|
| 1 | +import numpy as np |
1 | 2 | from mat3ra.code.vector import RoundedVector3D, Vector3D |
2 | 3 |
|
3 | 4 | VECTOR_FLOAT = [1.234567890, 2.345678901, 3.456789012] |
| 5 | +VECTOR_FLOAT_NORM = 4.3561172682906 |
| 6 | +FLOAT_PRECISION = 1e-8 |
| 7 | + |
4 | 8 | VECTOR_FLOAT_DIFFERENT_WITHIN_TOL = [1.23456789999, 2.345678901, 3.456789012] |
5 | 9 | VECTOR_FLOAT_DIFFERENT_OUTSIDE_TOL = [1.2345699999, 2.345678901, 3.456789012] |
6 | 10 | VECTOR_FLOAT_ROUNDED_4 = [1.2346, 2.3457, 3.4568] |
@@ -38,6 +42,28 @@ def test_vector_equality(): |
38 | 42 | assert vector != Vector3D(VECTOR_FLOAT_DIFFERENT_OUTSIDE_TOL) |
39 | 43 |
|
40 | 44 |
|
| 45 | +def test_vector_equality_with_list(): |
| 46 | + vector = Vector3D(VECTOR_FLOAT) |
| 47 | + assert vector == VECTOR_FLOAT |
| 48 | + assert vector == VECTOR_FLOAT_DIFFERENT_WITHIN_TOL |
| 49 | + assert vector != VECTOR_FLOAT_DIFFERENT_OUTSIDE_TOL |
| 50 | + |
| 51 | + |
| 52 | +def test_vector_norm(): |
| 53 | + vector = Vector3D(VECTOR_FLOAT) |
| 54 | + # Check if the norm is close to the expected value to avoid architecture-specific issues |
| 55 | + np.isclose(vector.norm, VECTOR_FLOAT_NORM, atol=FLOAT_PRECISION, rtol=0) |
| 56 | + assert vector.value == VECTOR_FLOAT |
| 57 | + assert vector.x == 1.234567890 |
| 58 | + assert vector.y == 2.345678901 |
| 59 | + assert vector.z == 3.456789012 |
| 60 | + |
| 61 | + |
| 62 | +##################################################################### |
| 63 | +## RoundedVector3D tests |
| 64 | +##################################################################### |
| 65 | + |
| 66 | + |
41 | 67 | def test_rounded_vector_init(): |
42 | 68 | vector = RoundedVector3D(VECTOR_FLOAT) |
43 | 69 | assert vector.model_dump() == VECTOR_FLOAT |
@@ -70,3 +96,19 @@ def test_rounded_vector_serialization(): |
70 | 96 | assert vector.x_rounded == VECTOR_FLOAT_ROUNDED_3[0] |
71 | 97 | assert vector.y_rounded == VECTOR_FLOAT_ROUNDED_3[1] |
72 | 98 | assert vector.z_rounded == VECTOR_FLOAT_ROUNDED_3[2] |
| 99 | + |
| 100 | + |
| 101 | +def test_rounded_vector_equality(): |
| 102 | + class_reference = RoundedVector3D |
| 103 | + # Higher precision yields inequality |
| 104 | + class_reference.__round_precision__ = 4 |
| 105 | + vector = class_reference(VECTOR_FLOAT) |
| 106 | + assert vector == VECTOR_FLOAT |
| 107 | + assert vector == VECTOR_FLOAT_ROUNDED_4 |
| 108 | + assert vector != VECTOR_FLOAT_ROUNDED_3 |
| 109 | + # Lower precision yields equality |
| 110 | + class_reference.__round_precision__ = 3 |
| 111 | + vector = class_reference(VECTOR_FLOAT) |
| 112 | + assert vector == VECTOR_FLOAT |
| 113 | + assert vector == VECTOR_FLOAT_ROUNDED_4 |
| 114 | + assert vector == VECTOR_FLOAT_ROUNDED_3 |
0 commit comments