Skip to content

Commit d55d861

Browse files
committed
Added unit test.
1 parent 4fc08fb commit d55d861

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import numpy as np
2+
import matplotlib.tri as mtri
3+
import matplotlib.delaunay as mdel
4+
from nose.tools import assert_equal
5+
from numpy.testing import assert_array_equal, assert_array_almost_equal
6+
7+
def test_delaunay():
8+
# No duplicate points.
9+
x = [0,1,1,0]
10+
y = [0,0,1,1]
11+
npoints = 4
12+
ntriangles = 2
13+
nedges = 5
14+
15+
# Without duplicate points, mpl calls delaunay triangulation and
16+
# does not modify it.
17+
mpl_triang = mtri.Triangulation(x,y)
18+
del_triang = mdel.Triangulation(x,y)
19+
20+
# Points - floating point.
21+
assert_array_almost_equal(mpl_triang.x, x)
22+
assert_array_almost_equal(mpl_triang.x, del_triang.x)
23+
assert_array_almost_equal(mpl_triang.y, y)
24+
assert_array_almost_equal(mpl_triang.y, del_triang.y)
25+
26+
# Triangles - integers.
27+
assert_equal(len(mpl_triang.triangles), ntriangles)
28+
assert_equal(np.min(mpl_triang.triangles), 0)
29+
assert_equal(np.max(mpl_triang.triangles), npoints-1)
30+
assert_array_equal(mpl_triang.triangles, del_triang.triangle_nodes)
31+
32+
# Edges - integers.
33+
assert_equal(len(mpl_triang.edges), nedges)
34+
assert_equal(np.min(mpl_triang.edges), 0)
35+
assert_equal(np.max(mpl_triang.edges), npoints-1)
36+
assert_array_equal(mpl_triang.edges, del_triang.edge_db)
37+
38+
def test_delaunay_duplicate_points():
39+
# Issue 838.
40+
import warnings
41+
42+
# Index 2 is the same as index 0.
43+
x = [0,1,0,1,0]
44+
y = [0,0,0,1,1]
45+
duplicate_index = 2
46+
npoints = 4 # Number of non-duplicate points.
47+
nduplicates = 1
48+
ntriangles = 2
49+
nedges = 5
50+
51+
# With duplicate points, mpl calls delaunay triangulation but
52+
# modified returned arrays.
53+
warnings.simplefilter("ignore") # Ignore DuplicatePointWarning.
54+
mpl_triang = mtri.Triangulation(x,y)
55+
del_triang = mdel.Triangulation(x,y)
56+
warnings.resetwarnings()
57+
58+
# Points - floating point.
59+
assert_equal(len(mpl_triang.x), npoints + nduplicates)
60+
assert_equal(len(del_triang.x), npoints)
61+
assert_array_almost_equal(mpl_triang.x, x)
62+
assert_array_almost_equal(del_triang.x[:duplicate_index], x[:duplicate_index])
63+
assert_array_almost_equal(del_triang.x[duplicate_index:], x[duplicate_index+1:])
64+
65+
assert_equal(len(mpl_triang.y), npoints + nduplicates)
66+
assert_equal(len(del_triang.y), npoints)
67+
assert_array_almost_equal(mpl_triang.y, y)
68+
assert_array_almost_equal(del_triang.y[:duplicate_index], y[:duplicate_index])
69+
assert_array_almost_equal(del_triang.y[duplicate_index:], y[duplicate_index+1:])
70+
71+
# Triangles - integers.
72+
assert_equal(len(mpl_triang.triangles), ntriangles)
73+
assert_equal(np.min(mpl_triang.triangles), 0)
74+
assert_equal(np.max(mpl_triang.triangles), npoints-1 + nduplicates)
75+
assert_equal(len(del_triang.triangle_nodes), ntriangles)
76+
assert_equal(np.min(del_triang.triangle_nodes), 0)
77+
assert_equal(np.max(del_triang.triangle_nodes), npoints-1)
78+
# Convert mpl triangle point indices to delaunay's.
79+
converted_indices = np.where(mpl_triang.triangles > duplicate_index,
80+
mpl_triang.triangles - nduplicates,
81+
mpl_triang.triangles)
82+
assert_array_equal(del_triang.triangle_nodes, converted_indices)
83+
84+
# Edges - integers.
85+
assert_equal(len(mpl_triang.edges), nedges)
86+
assert_equal(np.min(mpl_triang.edges), 0)
87+
assert_equal(np.max(mpl_triang.edges), npoints-1 + nduplicates)
88+
assert_equal(len(del_triang.edge_db), nedges)
89+
assert_equal(np.min(del_triang.edge_db), 0)
90+
assert_equal(np.max(del_triang.edge_db), npoints-1)
91+
# Convert mpl edge point indices to delaunay's.
92+
converted_indices = np.where(mpl_triang.edges > duplicate_index,
93+
mpl_triang.edges - nduplicates,
94+
mpl_triang.edges)
95+
assert_array_equal(del_triang.edge_db, converted_indices)
96+

0 commit comments

Comments
 (0)