MCPcopy Create free account
hub / github.com/pybind/pybind11 / test_operator_overloading

Function test_operator_overloading

tests/test_operator_overloading.py:11–88  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9
10@pytest.mark.xfail("env.GRAALPY", reason="TODO should get fixed on GraalPy side")
11def test_operator_overloading():
12 v1 = m.Vector2(1, 2)
13 v2 = m.Vector(3, -1)
14 v3 = m.Vector2(1, 2) # Same value as v1, but different instance.
15 assert v1 is not v3
16
17 assert str(v1) == "[1.000000, 2.000000]"
18 assert str(v2) == "[3.000000, -1.000000]"
19
20 assert str(-v2) == "[-3.000000, 1.000000]"
21
22 assert str(v1 + v2) == "[4.000000, 1.000000]"
23 assert str(v1 - v2) == "[-2.000000, 3.000000]"
24 assert str(v1 - 8) == "[-7.000000, -6.000000]"
25 assert str(v1 + 8) == "[9.000000, 10.000000]"
26 assert str(v1 * 8) == "[8.000000, 16.000000]"
27 assert str(v1 / 8) == "[0.125000, 0.250000]"
28 assert str(8 - v1) == "[7.000000, 6.000000]"
29 assert str(8 + v1) == "[9.000000, 10.000000]"
30 assert str(8 * v1) == "[8.000000, 16.000000]"
31 assert str(8 / v1) == "[8.000000, 4.000000]"
32 assert str(v1 * v2) == "[3.000000, -2.000000]"
33 assert str(v2 / v1) == "[3.000000, -0.500000]"
34
35 assert v1 == v3
36 assert v1 != v2
37 assert hash(v1) == 4
38 # TODO(eric.cousineau): Make this work.
39 # assert abs(v1) == "abs(Vector2)"
40
41 v1 += 2 * v2
42 assert str(v1) == "[7.000000, 0.000000]"
43 v1 -= v2
44 assert str(v1) == "[4.000000, 1.000000]"
45 v1 *= 2
46 assert str(v1) == "[8.000000, 2.000000]"
47 v1 /= 16
48 assert str(v1) == "[0.500000, 0.125000]"
49 v1 *= v2
50 assert str(v1) == "[1.500000, -0.125000]"
51 v2 /= v1
52 assert str(v2) == "[2.000000, 8.000000]"
53
54 if env.GRAALPY:
55 pytest.skip("ConstructorStats is incompatible with GraalPy.")
56
57 cstats = ConstructorStats.get(m.Vector2)
58 assert cstats.alive() == 3
59 del v1
60 assert cstats.alive() == 2
61 del v2
62 assert cstats.alive() == 1
63 del v3
64 assert cstats.alive() == 0
65 assert cstats.values() == [
66 "[1.000000, 2.000000]",
67 "[3.000000, -1.000000]",
68 "[1.000000, 2.000000]",

Callers

nothing calls this directly

Calls 6

strClass · 0.85
hashFunction · 0.85
Vector2Method · 0.80
aliveMethod · 0.80
valuesMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected