test_geometry.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Jun 19 14:13:53 2014
  4. @author: pietro
  5. """
  6. import sys
  7. import unittest
  8. import numpy as np
  9. import grass.lib.vector as libvect
  10. from grass.pygrass.vector.geometry import Point, Line
  11. class PointTestCase(unittest.TestCase):
  12. def test_empty_init(self):
  13. """Test Point()"""
  14. point = Point()
  15. self.assertEqual(point.gtype, libvect.GV_POINT)
  16. self.assertEqual(point.x, 0)
  17. self.assertEqual(point.y, 0)
  18. self.assertIsNone(point.z)
  19. self.assertTrue(point.is2D)
  20. def test_init_3d(self):
  21. """Test 3D Point(1, 2, 3)"""
  22. point = Point(1, 2, 3)
  23. self.assertEqual(point.x, 1)
  24. self.assertEqual(point.y, 2)
  25. self.assertEqual(point.z, 3)
  26. self.assertFalse(point.is2D)
  27. def test_switch_2D_3D_2D(self):
  28. """Test switch between: 2D => 3D => 2D"""
  29. point = Point()
  30. self.assertIsNone(point.z)
  31. self.assertTrue(point.is2D)
  32. point.z = 1
  33. self.assertFalse(point.is2D)
  34. point.z = None
  35. self.assertTrue(point.is2D, True)
  36. def test_coords(self):
  37. """Test coords method"""
  38. self.assertEqual(Point(1, 2).coords(), (1, 2))
  39. self.assertEqual(Point(1, 2, 3).coords(), (1, 2, 3))
  40. def test_get_wkt(self):
  41. """Test coords method"""
  42. self.assertEqual(Point(1, 2).get_wkt(), 'POINT(1.000000 2.000000)')
  43. self.assertEqual(Point(1, 2, 3).get_wkt(),
  44. 'POINT(1.000000 2.000000 3.000000)')
  45. def test_distance(self):
  46. """Test distance method"""
  47. point0 = Point(0, 0, 0)
  48. point1 = Point(1, 0)
  49. self.assertEqual(point0.distance(point1), 1.0)
  50. point1.z = 1
  51. self.assertAlmostEqual(point0.distance(point1), np.sqrt(2.))
  52. def test_eq(self):
  53. """Test __eq__"""
  54. point0 = Point(0, 0)
  55. point1 = Point(1, 0)
  56. self.assertFalse(point0 == point1)
  57. self.assertFalse(point0 == (1, 0))
  58. self.assertTrue(point0 == point0)
  59. self.assertTrue(point0 == (0, 0))
  60. def test_repr(self):
  61. """Test __eq__"""
  62. self.assertEqual(repr(Point(1, 2)), 'Point(1.000000, 2.000000)')
  63. self.assertEqual(repr(Point(1, 2, 3)),
  64. 'Point(1.000000, 2.000000, 3.000000)')
  65. @unittest.skip("Not implemented yet.")
  66. def test_buffer(self):
  67. """Test buffer method"""
  68. # TODO: verify if the buffer depends from the mapset's projection
  69. pass
  70. class LineTestCase(unittest.TestCase):
  71. def test_len(self):
  72. """Test __len__ magic method"""
  73. self.assertEqual(len(Line()), 0)
  74. self.assertEqual(len(Line([(0, 0), (1, 1)])), 2)
  75. @unittest.skipIf(sys.version_info[:2] < (2, 7), "Require Python >= 2.7")
  76. def test_getitem(self):
  77. """Test __getitem__ magic method"""
  78. line = Line([(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)])
  79. self.assertTupleEqual(line[0].coords(), (0, 0))
  80. self.assertTupleEqual(line[1].coords(), (1, 1))
  81. self.assertTupleEqual(line[-2].coords(), (3, 3))
  82. self.assertTupleEqual(line[-1].coords(), (4, 4))
  83. self.assertListEqual([p.coords() for p in line[:2]], [(0, 0), (1, 1)])
  84. self.assertListEqual([p.coords() for p in line[::2]],
  85. [(0, 0), (2, 2), (4, 4)])
  86. with self.assertRaises(IndexError):
  87. line[5]
  88. @unittest.skipIf(sys.version_info[:2] < (2, 7), "Require Python >= 2.7")
  89. def test_setitem(self):
  90. """Test __setitem__ magic method"""
  91. line = Line([(0, 0), (1, 1)])
  92. self.assertTupleEqual(line[0].coords(), (0., 0.))
  93. line[0] = (10, 10)
  94. self.assertTupleEqual(line[0].coords(), (10., 10.))
  95. @unittest.skipIf(sys.version_info[:2] < (2, 7), "Require Python >= 2.7")
  96. def test_get_pnt(self):
  97. """Test get_pnt method"""
  98. line = Line([(0, 0), (1, 1)])
  99. with self.assertRaises(ValueError):
  100. line.get_pnt(5)
  101. vals = (0.7071067811865475, 0.7071067811865475)
  102. self.assertTupleEqual(line.get_pnt(1).coords(), vals)
  103. def test_bbox(self):
  104. line = Line([(0, 0), (0, 1), (2, 1), (2, 0)])
  105. bbox = line.bbox()
  106. if __name__ == '__main__':
  107. unittest.main()