Skip to content

Commit 8caf231

Browse files
authored
Python binding bug fix (#107)
This revision includes: * FdmMgpcgSolver3 binding fix * Vector2D and Vector3F binding fix * More unit tests
1 parent da1ae1b commit 8caf231

3 files changed

Lines changed: 139 additions & 11 deletions

File tree

src/python/fdm_mgpcg_solver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void addFdmMgpcgSolver3(py::module& m) {
8282
R"pbdoc(
8383
The last residual after the MGPCG iterations.
8484
)pbdoc")
85-
.def_property_readonly("sorFactor", &FdmMgpcgSolver2::sorFactor)
85+
.def_property_readonly("sorFactor", &FdmMgpcgSolver3::sorFactor)
8686
.def_property_readonly("useRedBlackOrdering",
87-
&FdmMgpcgSolver2::useRedBlackOrdering);
87+
&FdmMgpcgSolver3::useRedBlackOrdering);
8888
}

src/python/vector.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void addVector2F(pybind11::module& m) {
125125
void addVector2D(pybind11::module& m) {
126126
py::class_<Vector2D>(m, "Vector2D")
127127
// CTOR
128-
.def("__init__", [](Vector2D instance, double x,
128+
.def("__init__", [](Vector2D& instance, double x,
129129
double y) { new (&instance) Vector2D(x, y); },
130130
R"pbdoc(
131131
Constructs Vector2D.
@@ -288,11 +288,11 @@ void addVector3F(pybind11::module& m) {
288288
.def("__setitem__",
289289
[](Vector3F& instance, size_t i, float val) { instance[i] = val; })
290290
.def("__add__",
291-
[](const Vector3D& instance, py::object object) {
292-
if (py::isinstance<double>(object)) {
293-
return instance.add(object.cast<double>());
291+
[](const Vector3F& instance, py::object object) {
292+
if (py::isinstance<float>(object)) {
293+
return instance.add(object.cast<float>());
294294
} else {
295-
return instance.add(objectToVector3D(object));
295+
return instance.add(objectToVector3F(object));
296296
}
297297
})
298298
.def("__sub__",

src/tests/python_tests/vector_tests.py

Lines changed: 132 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,135 @@
1010
import unittest
1111

1212

13+
class Vector2FTest(unittest.TestCase):
14+
def testInit(self):
15+
a = pyjet.Vector2F()
16+
self.assertEqual(a.x, 0.0)
17+
self.assertEqual(a.y, 0.0)
18+
b = pyjet.Vector2F(1, 2)
19+
self.assertEqual(b.x, 1.0)
20+
self.assertEqual(b.y, 2.0)
21+
c = pyjet.Vector2F(y=2, x=1)
22+
self.assertEqual(c.x, 1.0)
23+
self.assertEqual(c.y, 2.0)
24+
25+
def testGetters(self):
26+
a = pyjet.Vector2F(1, 2)
27+
self.assertEqual(a[0], 1)
28+
self.assertEqual(a[1], 2)
29+
30+
def testSetters(self):
31+
a = pyjet.Vector2F(1, 2)
32+
a[0] = 4; a[1] = 5;
33+
self.assertEqual(a[0], 4)
34+
self.assertEqual(a[1], 5)
35+
36+
def testCalc(self):
37+
a = pyjet.Vector2F(1, 2)
38+
b = pyjet.Vector2F(4, 6)
39+
c = a + b
40+
self.assertEqual(c.x, 5.0)
41+
self.assertEqual(c.y, 8.0)
42+
c = a - b
43+
self.assertEqual(c.x, -3.0)
44+
self.assertEqual(c.y, -4.0)
45+
c = a * b
46+
self.assertEqual(c.x, 4.0)
47+
self.assertEqual(c.y, 12.0)
48+
c = a / b
49+
self.assertAlmostEqual(c.x, 1.0 / 4.0)
50+
self.assertAlmostEqual(c.y, 1.0 / 3.0)
51+
52+
53+
class Vector2DTest(unittest.TestCase):
54+
def testInit(self):
55+
a = pyjet.Vector2D()
56+
self.assertEqual(a.x, 0.0)
57+
self.assertEqual(a.y, 0.0)
58+
b = pyjet.Vector2D(1, 2)
59+
self.assertEqual(b.x, 1.0)
60+
self.assertEqual(b.y, 2.0)
61+
c = pyjet.Vector2D(y=2, x=1)
62+
self.assertEqual(c.x, 1.0)
63+
self.assertEqual(c.y, 2.0)
64+
65+
def testGetters(self):
66+
a = pyjet.Vector2D(1, 2)
67+
self.assertEqual(a[0], 1)
68+
self.assertEqual(a[1], 2)
69+
70+
def testSetters(self):
71+
a = pyjet.Vector2D(1, 2)
72+
a[0] = 4; a[1] = 5;
73+
self.assertEqual(a[0], 4)
74+
self.assertEqual(a[1], 5)
75+
76+
def testCalc(self):
77+
a = pyjet.Vector2D(1, 2)
78+
b = pyjet.Vector2D(4, 6)
79+
c = a + b
80+
self.assertEqual(c.x, 5.0)
81+
self.assertEqual(c.y, 8.0)
82+
c = a - b
83+
self.assertEqual(c.x, -3.0)
84+
self.assertEqual(c.y, -4.0)
85+
c = a * b
86+
self.assertEqual(c.x, 4.0)
87+
self.assertEqual(c.y, 12.0)
88+
c = a / b
89+
self.assertAlmostEqual(c.x, 1.0 / 4.0)
90+
self.assertAlmostEqual(c.y, 1.0 / 3.0)
91+
92+
93+
class Vector3FTest(unittest.TestCase):
94+
def testInit(self):
95+
a = pyjet.Vector3F()
96+
self.assertEqual(a.x, 0.0)
97+
self.assertEqual(a.y, 0.0)
98+
self.assertEqual(a.z, 0.0)
99+
b = pyjet.Vector3F(1, 2, 3)
100+
self.assertEqual(b.x, 1.0)
101+
self.assertEqual(b.y, 2.0)
102+
self.assertEqual(b.z, 3.0)
103+
c = pyjet.Vector3F(y=2, x=1, z=3)
104+
self.assertEqual(c.x, 1.0)
105+
self.assertEqual(c.y, 2.0)
106+
self.assertEqual(c.z, 3.0)
107+
108+
def testGetters(self):
109+
a = pyjet.Vector3F(1, 2, 3)
110+
self.assertEqual(a[0], 1)
111+
self.assertEqual(a[1], 2)
112+
self.assertEqual(a[2], 3)
113+
114+
def testSetters(self):
115+
a = pyjet.Vector3F(1, 2, 3)
116+
a[0] = 4; a[1] = 5; a[2] = 6
117+
self.assertEqual(a[0], 4)
118+
self.assertEqual(a[1], 5)
119+
self.assertEqual(a[2], 6)
120+
121+
def testCalc(self):
122+
a = pyjet.Vector3F(1, 2, 3)
123+
b = pyjet.Vector3F(4, 6, 8)
124+
c = a + b
125+
self.assertEqual(c.x, 5.0)
126+
self.assertEqual(c.y, 8.0)
127+
self.assertEqual(c.z, 11.0)
128+
c = a - b
129+
self.assertEqual(c.x, -3.0)
130+
self.assertEqual(c.y, -4.0)
131+
self.assertEqual(c.z, -5.0)
132+
c = a * b
133+
self.assertEqual(c.x, 4.0)
134+
self.assertEqual(c.y, 12.0)
135+
self.assertEqual(c.z, 24.0)
136+
c = a / b
137+
self.assertAlmostEqual(c.x, 1.0 / 4.0)
138+
self.assertAlmostEqual(c.y, 1.0 / 3.0)
139+
self.assertAlmostEqual(c.z, 3.0 / 8.0)
140+
141+
13142
class Vector3DTest(unittest.TestCase):
14143
def testInit(self):
15144
a = pyjet.Vector3D()
@@ -54,10 +183,9 @@ def testCalc(self):
54183
self.assertEqual(c.y, 12.0)
55184
self.assertEqual(c.z, 24.0)
56185
c = a / b
57-
self.assertEqual(c.x, 1.0 / 4.0)
58-
self.assertEqual(c.y, 1.0 / 3.0)
59-
self.assertEqual(c.z, 3.0 / 8.0)
60-
186+
self.assertAlmostEqual(c.x, 1.0 / 4.0)
187+
self.assertAlmostEqual(c.y, 1.0 / 3.0)
188+
self.assertAlmostEqual(c.z, 3.0 / 8.0)
61189

62190
def main():
63191
pyjet.Logging.mute()

0 commit comments

Comments
 (0)