QGIS/tests/src/python/test_qgsrasterrange.py

344 lines
20 KiB
Python

# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsRasterRange.
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
"""
__author__ = 'Nyall Dawson'
__date__ = '07/06/2018'
__copyright__ = 'Copyright 2018, The QGIS Project'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
import qgis # NOQA switch sip api
from qgis.core import QgsRasterRange
from qgis.testing import unittest
class TestQgsRasterRange(unittest.TestCase):
def testBasic(self):
range = QgsRasterRange(1, 5)
self.assertEqual(range.min(), 1)
self.assertEqual(range.max(), 5)
range.setMin(2.2)
range.setMax(10.4)
self.assertEqual(range.min(), 2.2)
self.assertEqual(range.max(), 10.4)
self.assertEqual(range.bounds(), QgsRasterRange.IncludeMinAndMax)
range.setBounds(QgsRasterRange.IncludeMin)
self.assertEqual(range.bounds(), QgsRasterRange.IncludeMin)
def testEquality(self):
range = QgsRasterRange(1, 5)
range2 = QgsRasterRange(1, 5)
self.assertEqual(range, range2)
range2.setMin(2)
self.assertNotEqual(range, range2)
range2.setMin(1)
range2.setMax(4)
self.assertNotEqual(range, range2)
range2.setMax(5)
self.assertEqual(range, range2)
range.setBounds(QgsRasterRange.IncludeMax)
self.assertNotEqual(range, range2)
range2.setBounds(QgsRasterRange.IncludeMax)
self.assertEqual(range, range2)
range = QgsRasterRange()
range2 = QgsRasterRange()
self.assertEqual(range, range2)
range.setMin(1)
self.assertNotEqual(range, range2)
range2.setMin(1)
self.assertEqual(range, range2)
range = QgsRasterRange()
range2 = QgsRasterRange()
range.setMax(5)
self.assertNotEqual(range, range2)
range2.setMax(5)
self.assertEqual(range, range2)
def testContains(self):
range = QgsRasterRange(1, 5)
self.assertTrue(range.contains(1))
self.assertTrue(range.contains(5))
self.assertTrue(range.contains(4))
self.assertTrue(range.contains(1.00001))
self.assertTrue(range.contains(4.99999))
self.assertFalse(range.contains(0.99999))
self.assertFalse(range.contains(5.00001))
# with nan min/maxs
range = QgsRasterRange()
self.assertTrue(range.contains(1))
self.assertTrue(range.contains(-909999999))
self.assertTrue(range.contains(999999999))
range.setMin(5)
self.assertFalse(range.contains(0))
self.assertTrue(range.contains(5))
self.assertTrue(range.contains(10000000))
range = QgsRasterRange()
range.setMax(5)
self.assertFalse(range.contains(6))
self.assertTrue(range.contains(5))
self.assertTrue(range.contains(-99999))
range = QgsRasterRange(1, 5, QgsRasterRange.IncludeMax)
self.assertFalse(range.contains(0))
self.assertFalse(range.contains(1))
self.assertTrue(range.contains(2))
self.assertTrue(range.contains(5))
self.assertFalse(range.contains(6))
range = QgsRasterRange(1, 5, QgsRasterRange.IncludeMin)
self.assertFalse(range.contains(0))
self.assertTrue(range.contains(1))
self.assertTrue(range.contains(2))
self.assertFalse(range.contains(5))
self.assertFalse(range.contains(6))
range = QgsRasterRange(1, 5, QgsRasterRange.Exclusive)
self.assertFalse(range.contains(0))
self.assertFalse(range.contains(1))
self.assertTrue(range.contains(2))
self.assertFalse(range.contains(5))
self.assertFalse(range.contains(6))
def testContainsList(self):
self.assertFalse(QgsRasterRange.contains(1, []))
ranges = [QgsRasterRange(1, 5)]
self.assertTrue(QgsRasterRange.contains(3, ranges))
self.assertFalse(QgsRasterRange.contains(13, ranges))
ranges.append(QgsRasterRange(11, 15))
self.assertTrue(QgsRasterRange.contains(3, ranges))
self.assertTrue(QgsRasterRange.contains(13, ranges))
self.assertFalse(QgsRasterRange.contains(16, ranges))
def testOverlaps(self):
# includes both ends
range = QgsRasterRange(0, 10, QgsRasterRange.IncludeMinAndMax)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0)))
self.assertFalse(range.overlaps(QgsRasterRange(-10, -1)))
self.assertFalse(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(0, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
range = QgsRasterRange(float('NaN'), 10, QgsRasterRange.IncludeMinAndMax)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0)))
self.assertTrue(range.overlaps(QgsRasterRange(-10, -1)))
self.assertFalse(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(0, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
range = QgsRasterRange(0, float('NaN'), QgsRasterRange.IncludeMinAndMax)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0)))
self.assertFalse(range.overlaps(QgsRasterRange(-10, -1)))
self.assertTrue(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(0, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
# includes left end
range = QgsRasterRange(0, 10, QgsRasterRange.IncludeMin)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0)))
self.assertFalse(range.overlaps(QgsRasterRange(-10, -1)))
self.assertFalse(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(0, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
# includes right end
range = QgsRasterRange(0, 10, QgsRasterRange.IncludeMax)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0)))
self.assertFalse(range.overlaps(QgsRasterRange(-10, -1)))
self.assertFalse(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(0, 50)))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertTrue(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
# includes neither end
range = QgsRasterRange(0, 10, QgsRasterRange.Exclusive)
self.assertTrue(range.overlaps(QgsRasterRange(1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(0, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 10)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 9)))
self.assertTrue(range.overlaps(QgsRasterRange(1, 11)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, 11)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0)))
self.assertFalse(range.overlaps(QgsRasterRange(-10, -1)))
self.assertFalse(range.overlaps(QgsRasterRange(11, 12)))
self.assertTrue(range.overlaps(QgsRasterRange(-1, float('NaN'))))
self.assertTrue(range.overlaps(QgsRasterRange(1, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(10, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(11, float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), -1)))
self.assertFalse(range.overlaps(QgsRasterRange(float('NaN'), 0)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 1)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 10)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), 11)))
self.assertTrue(range.overlaps(QgsRasterRange(float('NaN'), float('NaN'))))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(-1, 0, QgsRasterRange.IncludeMax)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.Exclusive)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
def testAsText(self):
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMinAndMax).asText(), '0 ≤ x ≤ 10')
self.assertEqual(QgsRasterRange(-1, float('NaN')).asText(), '-1 ≤ x ≤ ∞')
self.assertEqual(QgsRasterRange(float('NaN'), 5).asText(), '-∞ ≤ x ≤ 5')
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN')).asText(), '-∞ ≤ x ≤ ∞')
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMin).asText(), '0 ≤ x < 10')
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.IncludeMin).asText(), '-1 ≤ x < ∞')
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.IncludeMin).asText(), '-∞ ≤ x < 5')
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.IncludeMin).asText(), '-∞ ≤ x < ∞')
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMax).asText(), '0 < x ≤ 10')
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.IncludeMax).asText(), '-1 < x ≤ ∞')
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.IncludeMax).asText(), '-∞ < x ≤ 5')
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.IncludeMax).asText(), '-∞ < x ≤ ∞')
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.Exclusive).asText(), '0 < x < 10')
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.Exclusive).asText(), '-1 < x < ∞')
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.Exclusive).asText(), '-∞ < x < 5')
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.Exclusive).asText(), '-∞ < x < ∞')
if __name__ == '__main__':
unittest.main()