| 9 | |
| 10 | @pytest.mark.xfail("env.GRAALPY", reason="TODO should get fixed on GraalPy side") |
| 11 | def 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]", |