codac4matlab 2.0.0.dev25__cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. codac4matlab/__init__.py +4 -0
  2. codac4matlab/_core.cpython-314-aarch64-linux-gnu.so +0 -0
  3. codac4matlab/_graphics.cpython-314-aarch64-linux-gnu.so +0 -0
  4. codac4matlab/_unsupported.cpython-314-aarch64-linux-gnu.so +0 -0
  5. codac4matlab/core/__init__.py +588 -0
  6. codac4matlab/empty.cpython-314-aarch64-linux-gnu.so +0 -0
  7. codac4matlab/graphics/__init__.py +1 -0
  8. codac4matlab/tests/__init__.py +1 -0
  9. codac4matlab/tests/test_AnalyticFunction.py +442 -0
  10. codac4matlab/tests/test_AnalyticTraj.py +62 -0
  11. codac4matlab/tests/test_Approx.py +27 -0
  12. codac4matlab/tests/test_BoolInterval.py +96 -0
  13. codac4matlab/tests/test_Color.py +77 -0
  14. codac4matlab/tests/test_ConvexPolygon.py +300 -0
  15. codac4matlab/tests/test_CtcAction.py +30 -0
  16. codac4matlab/tests/test_CtcCartProd.py +39 -0
  17. codac4matlab/tests/test_CtcCtcBoundary.py +48 -0
  18. codac4matlab/tests/test_CtcDeriv.py +434 -0
  19. codac4matlab/tests/test_CtcEval.py +214 -0
  20. codac4matlab/tests/test_CtcFixpoint.py +65 -0
  21. codac4matlab/tests/test_CtcInter.py +39 -0
  22. codac4matlab/tests/test_CtcInverse.py +213 -0
  23. codac4matlab/tests/test_CtcInverseNotIn.py +129 -0
  24. codac4matlab/tests/test_CtcLazy.py +50 -0
  25. codac4matlab/tests/test_CtcPolygon.py +91 -0
  26. codac4matlab/tests/test_CtcSegment.py +104 -0
  27. codac4matlab/tests/test_Ellipsoid.py +20 -0
  28. codac4matlab/tests/test_GaussJordan.py +34 -0
  29. codac4matlab/tests/test_IntFullPivLU.py +84 -0
  30. codac4matlab/tests/test_Interval.py +254 -0
  31. codac4matlab/tests/test_IntervalMatrix.py +664 -0
  32. codac4matlab/tests/test_IntervalVector.py +657 -0
  33. codac4matlab/tests/test_Interval_operations.py +293 -0
  34. codac4matlab/tests/test_Matrix.py +81 -0
  35. codac4matlab/tests/test_OctaSym.py +41 -0
  36. codac4matlab/tests/test_Parallelepiped.py +35 -0
  37. codac4matlab/tests/test_Parallelepiped_eval.py +62 -0
  38. codac4matlab/tests/test_Polygon.py +120 -0
  39. codac4matlab/tests/test_SampledTraj.py +135 -0
  40. codac4matlab/tests/test_Segment.py +138 -0
  41. codac4matlab/tests/test_SepCartProd.py +34 -0
  42. codac4matlab/tests/test_SepCtcBoundary.py +52 -0
  43. codac4matlab/tests/test_SepInverse.py +104 -0
  44. codac4matlab/tests/test_SepPolygon.py +102 -0
  45. codac4matlab/tests/test_SepProj.py +39 -0
  46. codac4matlab/tests/test_SepTransform.py +41 -0
  47. codac4matlab/tests/test_Slice.py +78 -0
  48. codac4matlab/tests/test_Slice_polygon.py +208 -0
  49. codac4matlab/tests/test_SlicedTube.py +562 -0
  50. codac4matlab/tests/test_SlicedTube_integral.py +380 -0
  51. codac4matlab/tests/test_TDomain.py +115 -0
  52. codac4matlab/tests/test_Vector.py +41 -0
  53. codac4matlab/tests/test_arithmetic_add.py +54 -0
  54. codac4matlab/tests/test_arithmetic_div.py +46 -0
  55. codac4matlab/tests/test_arithmetic_mul.py +114 -0
  56. codac4matlab/tests/test_arithmetic_sub.py +54 -0
  57. codac4matlab/tests/test_capd.py +19 -0
  58. codac4matlab/tests/test_cart_prod.py +38 -0
  59. codac4matlab/tests/test_eigen.py +19 -0
  60. codac4matlab/tests/test_geometry.py +136 -0
  61. codac4matlab/tests/test_hull.py +35 -0
  62. codac4matlab/tests/test_ibex.py +19 -0
  63. codac4matlab/tests/test_inversion.py +57 -0
  64. codac4matlab/tests/test_linear_ctc.py +77 -0
  65. codac4matlab/tests/test_operators.py +377 -0
  66. codac4matlab/tests/test_peibos.py +83 -0
  67. codac4matlab/tests/test_predefined_tubes.py +193 -0
  68. codac4matlab/tests/test_serialization.py +30 -0
  69. codac4matlab/tests/test_transformations.py +61 -0
  70. codac4matlab/tests/test_trunc.py +95 -0
  71. codac4matlab/unsupported/__init__.py +1 -0
  72. codac4matlab/version.py +1 -0
  73. codac4matlab-2.0.0.dev25.dist-info/METADATA +23 -0
  74. codac4matlab-2.0.0.dev25.dist-info/RECORD +76 -0
  75. codac4matlab-2.0.0.dev25.dist-info/WHEEL +6 -0
  76. codac4matlab-2.0.0.dev25.dist-info/top_level.txt +1 -0
@@ -0,0 +1,380 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+ import sys
13
+ import math
14
+
15
+ import os
16
+ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '.')))
17
+ import codac2_tests_predefined_tubes as predef
18
+
19
+ class TestSlicedTube_integral(unittest.TestCase):
20
+
21
+ def test_computing_integration_from_0_double_argument__tube1(self):
22
+
23
+ x = predef.tube_test_1()
24
+ x.set_ith_slice(Interval(-4,2), 14)
25
+
26
+ self.assertTrue(Approx(x.integral(0)) == Interval(0))
27
+ self.assertTrue(Approx(x.integral(0.1)) == Interval(0.4,0.8))
28
+ self.assertTrue(Approx(x.integral(1.1)) == Interval(4.2,8.7))
29
+ self.assertTrue(Approx(x.integral(0.5)) == Interval(2,4))
30
+ self.assertTrue(Approx(x.integral(1.0)) == Interval(4,8))
31
+ self.assertTrue(Approx(x.integral(1.5)) == Interval(5,11.5))
32
+ self.assertTrue(Approx(x.integral(2.0)) == Interval(6,15))
33
+ self.assertTrue(Approx(x.integral(2.5)) == Interval(6.5,18))
34
+ self.assertTrue(Approx(x.integral(2.9),1e-8) == Interval(6.9,20.4))
35
+ self.assertTrue(Approx(x.integral(3.0)) == Interval(7,21))
36
+ self.assertTrue(Approx(x.integral(3.1),1e-8) == Interval(6.6,21.4))
37
+ self.assertTrue(Approx(x.integral(4.0),1e-8) == Interval(3,25))
38
+
39
+ def test_computing_integration_from_0_double_argument__tube1_01(self):
40
+
41
+ x = predef.tube_test_1_01()
42
+ x.set_ith_slice(Interval(-4,2), 14)
43
+
44
+ self.assertTrue(Approx(x.integral(0)) == Interval(0))
45
+ self.assertTrue(Approx(x.integral(0.1)) == Interval(0.4,0.8))
46
+ self.assertTrue(Approx(x.integral(1.1)) == Interval(4.2,8.7))
47
+ self.assertTrue(Approx(x.integral(0.5)) == Interval(2,4))
48
+ self.assertTrue(Approx(x.integral(1.0)) == Interval(4,8))
49
+ self.assertTrue(Approx(x.integral(1.5)) == Interval(5,11.5))
50
+ self.assertTrue(Approx(x.integral(2.0)) == Interval(6,15))
51
+ self.assertTrue(Approx(x.integral(2.5)) == Interval(6.5,18))
52
+ self.assertTrue(Approx(x.integral(2.9),1e-8) == Interval(6.9,20.4))
53
+ self.assertTrue(Approx(x.integral(3.0)) == Interval(7,21))
54
+ self.assertTrue(Approx(x.integral(3.1),1e-8) == Interval(6.6,21.4))
55
+ self.assertTrue(Approx(x.integral(4.0)) == Interval(3,25))
56
+
57
+ def test_computing_integration_from_0_double_argument__tube4(self):
58
+
59
+ x = predef.tube_test4()
60
+ x.set(Interval(-1,1), Interval(10,11))
61
+
62
+ self.assertTrue(Approx(x.integral(0.0)) == Interval(0.0))
63
+ self.assertTrue(Approx(x.integral(0.1)) == Interval(0.1,0.2))
64
+ self.assertTrue(Approx(x.integral(0.9)) == Interval(0.9,1.8))
65
+ self.assertTrue(Approx(x.integral(1.0)) == Interval(1,2))
66
+ self.assertTrue(Approx(x.integral(1.2)) == Interval(1.2,2.4))
67
+ self.assertTrue(Approx(x.integral(2.0)) == Interval(2.0,4.0))
68
+ self.assertTrue(Approx(x.integral(3.0)) == Interval(3.0,6.0))
69
+ self.assertTrue(Approx(x.integral(5.0)) == Interval(5.0,10.0))
70
+ self.assertTrue(Approx(x.integral(7.0)) == Interval(7.0,14.0))
71
+ self.assertTrue(Approx(x.integral(9.0)) == Interval(9.0,18.0))
72
+ self.assertTrue(Approx(x.integral(10.0)) == Interval(9.5,19.5))
73
+ self.assertTrue(Approx(x.integral(10.1)) == Interval(9.4,19.6))
74
+ self.assertTrue(Approx(x.integral(11.0),1e-8) == Interval(8.5,20.5))
75
+ self.assertTrue(Approx(x.integral(11.5),1e-8) == Interval(7.75,20.25))
76
+ self.assertTrue(Approx(x.integral(12.5),1e-8) == Interval(6.5,20.5))
77
+ self.assertTrue(Approx(x.integral(12.6),1e-8) == Interval(6.4,20.6))
78
+ self.assertTrue(Approx(x.integral(14.5),1e-8) == Interval(7,23.5))
79
+
80
+ def test_computing_integration_from_0_interval_argument__tube1(self):
81
+
82
+ x = predef.tube_test_1()
83
+ x.set_ith_slice(Interval(-4,2), 14)
84
+
85
+ self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
86
+ self.assertTrue(Approx(x.integral(Interval(0.1))) == Interval(0.4,0.8))
87
+ self.assertTrue(Approx(x.integral(Interval(0.5))) == Interval(2,4))
88
+ self.assertTrue(Approx(x.integral(Interval(1.0))) == Interval(4,8))
89
+ self.assertTrue(Approx(x.integral(Interval(1.5))) == Interval(5,11.5))
90
+ self.assertTrue(Approx(x.integral(Interval(2.0))) == Interval(6,15))
91
+ self.assertTrue(Approx(x.integral(Interval(2.5))) == Interval(6.5,18))
92
+ self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
93
+ self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
94
+ self.assertTrue(Approx(x.integral(Interval(0.0,0.0))) == Interval(0,0))
95
+ self.assertTrue(Approx(x.integral(Interval(0.0,0.5))) == Interval(0,4))
96
+ self.assertTrue(Approx(x.integral(Interval(0.0,1.0))) == Interval(0,8))
97
+ self.assertTrue(Approx(x.integral(Interval(0.0,1.5))) == Interval(0,11.5))
98
+ self.assertTrue(Approx(x.integral(Interval(0.0,2.0))) == Interval(0,15))
99
+ self.assertTrue(Approx(x.integral(Interval(1.0,1.0))) == Interval(4,8))
100
+ self.assertTrue(Approx(x.integral(Interval(1.0,1.5))) == Interval(4,11.5))
101
+ self.assertTrue(Approx(x.integral(Interval(1.0,2.0))) == Interval(4,15))
102
+ self.assertTrue(Approx(x.integral(Interval(1.1,1.9))) == Interval(4.2,14.3))
103
+ self.assertTrue(Approx(x.integral(Interval(1.1,2.1)),1e-8) == Interval(4.2,15.6))
104
+ self.assertTrue(Approx(x.integral(Interval(6,7))) == Interval(-23,19))
105
+ self.assertTrue(Approx(x.integral(Interval(0,46)),1e-8) == Interval(-85,194))
106
+
107
+ def test_computing_integration_from_0_interval_argument__tube1_01(self):
108
+
109
+ x = predef.tube_test_1_01()
110
+
111
+ self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
112
+ self.assertTrue(Approx(x.integral(Interval(0.1))) == Interval(0.4,0.8))
113
+ self.assertTrue(Approx(x.integral(Interval(0.5))) == Interval(2,4))
114
+ self.assertTrue(Approx(x.integral(Interval(1.0))) == Interval(4,8))
115
+ self.assertTrue(Approx(x.integral(Interval(1.5))) == Interval(5,11.5))
116
+ self.assertTrue(Approx(x.integral(Interval(2.0))) == Interval(6,15))
117
+ self.assertTrue(Approx(x.integral(Interval(2.5))) == Interval(6.5,18))
118
+ self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
119
+ self.assertTrue(Approx(x.integral(Interval(3.0))) == Interval(7,21))
120
+ self.assertTrue(Approx(x.integral(Interval(0.0,0.0))) == Interval(0,0))
121
+ self.assertTrue(Approx(x.integral(Interval(0.0,0.5))) == Interval(0,4))
122
+ self.assertTrue(Approx(x.integral(Interval(0.0,1.0))) == Interval(0,8))
123
+ self.assertTrue(Approx(x.integral(Interval(0.0,1.5))) == Interval(0,11.5))
124
+ self.assertTrue(Approx(x.integral(Interval(0.0,2.0))) == Interval(0,15))
125
+ self.assertTrue(Approx(x.integral(Interval(1.0,1.0))) == Interval(4,8))
126
+ self.assertTrue(Approx(x.integral(Interval(1.0,1.5))) == Interval(4,11.5))
127
+ self.assertTrue(Approx(x.integral(Interval(1.0,2.0))) == Interval(4,15))
128
+ self.assertTrue(Approx(x.integral(Interval(1.1,1.9)),1e-8) == Interval(4.2,14.3))
129
+ self.assertTrue(Approx(x.integral(Interval(1.1,2.1)),1e-8) == Interval(4.2,15.6))
130
+ self.assertTrue(Approx(x.integral(Interval(6,7))) == Interval(-23,19))
131
+ self.assertTrue(x.tdomain().t0_tf() == Interval(0,46))
132
+ self.assertTrue(x.codomain() == Interval(-11,13))
133
+ self.assertTrue(Approx(x.integral(Interval(0,46))) == Interval(-85,194))
134
+
135
+ def test_computing_integration_from_0_interval_argument__tube4(self):
136
+
137
+ x = predef.tube_test4()
138
+ x.set(Interval(-1,1), Interval(10,11))
139
+
140
+ self.assertTrue(Approx(x.integral(Interval(12.5)),1e-8) == Interval(6.5,20.5))
141
+ self.assertTrue(Approx(x.integral(Interval(14.5)),1e-8) == Interval(7,23.5))
142
+ p_intv = x.partial_integral(Interval(12.5,14.5))
143
+ self.assertTrue(Approx(p_intv[0],1e-8) == Interval(6.,7.))
144
+ self.assertTrue(Approx(p_intv[1],1e-8) == Interval(20.5,23.5))
145
+ self.assertTrue(Approx(x.integral(Interval(12.5,14.5)),1e-8) == Interval(6.0,23.5))
146
+ self.assertTrue(Approx(x.integral(Interval(0)),1e-8) == Interval(0))
147
+ self.assertTrue(Approx(x.integral(Interval(10.2)),1e-8) == Interval(9.3,19.7))
148
+ self.assertTrue(Approx(x.integral(Interval(1.5,3.5)),1e-8) == Interval(1.5,7))
149
+ self.assertTrue(Approx(x.integral(Interval(9,21)),1e-8) == Interval(6,36.5))
150
+
151
+ def test_computing_integration_from_0_interval_argument__tube4_05(self):
152
+
153
+ x = predef.tube_test4_05()
154
+ x.set(Interval(-1,1), Interval(10,11))
155
+
156
+ self.assertTrue(Approx(x.integral(Interval(12.5))) == Interval(6.5,20.5))
157
+ self.assertTrue(Approx(x.integral(Interval(14.5))) == Interval(7,23.5))
158
+ p_intv = x.partial_integral(Interval(12.5,14.5))
159
+ self.assertTrue(p_intv[0] == Interval(6.,7.))
160
+ self.assertTrue(p_intv[1] == Interval(20.5,23.5))
161
+ self.assertTrue(Approx(x.integral(Interval(12.5,14.5))) == Interval(6.0,23.5))
162
+ self.assertTrue(Approx(x.integral(Interval(0))) == Interval(0))
163
+ self.assertTrue(Approx(x.integral(Interval(10.2))) == Interval(9.3,19.7))
164
+ self.assertTrue(Approx(x.integral(Interval(1.5,3.5))) == Interval(1.5,7))
165
+ self.assertTrue(Approx(x.integral(Interval(9,21))) == Interval(6,36.5))
166
+
167
+ def test_computing_integration_from_0_partial_integration__tube4(self):
168
+
169
+ x = predef.tube_test4()
170
+ x.set(Interval(-1,1), Interval(10,11))
171
+
172
+ self.assertTrue(Approx(x.partial_integral(Interval(0))) == (Interval(0.), Interval(0.)))
173
+ self.assertTrue(Approx(x.partial_integral(Interval(0.2))) == (Interval(0.2), Interval(0.4)))
174
+ self.assertTrue(Approx(x.partial_integral(Interval(0.1))) == (Interval(0.1), Interval(0.2)))
175
+ self.assertTrue(Approx(x.partial_integral(Interval(0.9))) == (Interval(0.9), Interval(1.8)))
176
+ self.assertTrue(Approx(x.partial_integral(Interval(1.0))) == (Interval(1), Interval(2)))
177
+ self.assertTrue(Approx(x.partial_integral(Interval(1.2))) == (Interval(1.2), Interval(2.4)))
178
+ self.assertTrue(Approx(x.partial_integral(Interval(2.0))) == (Interval(2.0), Interval(4.0)))
179
+ self.assertTrue(Approx(x.partial_integral(Interval(3.0))) == (Interval(3.0), Interval(6.0)))
180
+ self.assertTrue(Approx(x.partial_integral(Interval(5.0))) == (Interval(5.0), Interval(10.0)))
181
+ self.assertTrue(Approx(x.partial_integral(Interval(7.0))) == (Interval(7.0), Interval(14.0)))
182
+ self.assertTrue(Approx(x.partial_integral(Interval(9.0))) == (Interval(9.0), Interval(18.0)))
183
+ self.assertTrue(Approx(x.partial_integral(Interval(10.0))) == (Interval(9.5), Interval(19.5)))
184
+ self.assertTrue(Approx(x.partial_integral(Interval(10.1)),1e-8) == (Interval(9.4), Interval(19.6)))
185
+ self.assertTrue(Approx(x.partial_integral(Interval(11.0)),1e-8) == (Interval(8.5), Interval(20.5)))
186
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5)),1e-8) == (Interval(6.5), Interval(20.5)))
187
+ self.assertTrue(Approx(x.partial_integral(Interval(12.6)),1e-8) == (Interval(6.4), Interval(20.6)))
188
+ self.assertTrue(Approx(x.partial_integral(Interval(14.5)),1e-8) == (Interval(7), Interval(23.5)))
189
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5,13)),1e-8) == (Interval(6,6.5), Interval(20.5,21)))
190
+ self.assertTrue(Approx(x.partial_integral(Interval(13,14)),1e-8) == (Interval(6,6.5), Interval(21,22.5)))
191
+ self.assertTrue(Approx(x.partial_integral(Interval(14,14.5)),1e-8) == (Interval(6.5,7), Interval(22.5,23.5)))
192
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5,14.5)),1e-8) == (Interval(6.0,7.0), Interval(20.5,23.5)))
193
+ self.assertTrue(Approx(x.partial_integral(Interval(1.5,3.5)),1e-8) == (Interval(1.5,3.5), Interval(3,7)))
194
+ self.assertTrue(Approx(x.partial_integral(Interval(9,21)),1e-8) == (Interval(6,13.5), Interval(18,36.5)))
195
+
196
+ def test_computing_integration_from_0_partial_integration__tube4_05(self):
197
+
198
+ x = predef.tube_test4_05()
199
+
200
+ self.assertTrue(Approx(x.partial_integral(Interval(0))) == (Interval(0.), Interval(0.)))
201
+ self.assertTrue(Approx(x.partial_integral(Interval(0.2))) == (Interval(0.2), Interval(0.4)))
202
+ self.assertTrue(Approx(x.partial_integral(Interval(0.1))) == (Interval(0.1), Interval(0.2)))
203
+ self.assertTrue(Approx(x.partial_integral(Interval(0.9))) == (Interval(0.9), Interval(1.8)))
204
+ self.assertTrue(Approx(x.partial_integral(Interval(1.0))) == (Interval(1), Interval(2)))
205
+ self.assertTrue(Approx(x.partial_integral(Interval(1.2))) == (Interval(1.2), Interval(2.4)))
206
+ self.assertTrue(Approx(x.partial_integral(Interval(2.0))) == (Interval(2.0), Interval(4.0)))
207
+ self.assertTrue(Approx(x.partial_integral(Interval(3.0))) == (Interval(3.0), Interval(6.0)))
208
+ self.assertTrue(Approx(x.partial_integral(Interval(5.0))) == (Interval(5.0), Interval(10.0)))
209
+ self.assertTrue(Approx(x.partial_integral(Interval(7.0))) == (Interval(7.0), Interval(14.0)))
210
+ self.assertTrue(Approx(x.partial_integral(Interval(9.0))) == (Interval(9.0), Interval(18.0)))
211
+ self.assertTrue(Approx(x.partial_integral(Interval(10.0))) == (Interval(9.5), Interval(19.5)))
212
+ self.assertTrue(Approx(x.partial_integral(Interval(10.1)),1e-8) == (Interval(9.4), Interval(19.6)))
213
+ self.assertTrue(Approx(x.partial_integral(Interval(11.0))) == (Interval(8.5), Interval(20.5)))
214
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5))) == (Interval(6.5), Interval(20.5)))
215
+ self.assertTrue(Approx(x.partial_integral(Interval(12.6)),1e-8) == (Interval(6.4), Interval(20.6)))
216
+ self.assertTrue(Approx(x.partial_integral(Interval(14.5))) == (Interval(7), Interval(23.5)))
217
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5,13))) == (Interval(6,6.5), Interval(20.5,21)))
218
+ self.assertTrue(Approx(x.partial_integral(Interval(13,14))) == (Interval(6,6.5), Interval(21,22.5)))
219
+ self.assertTrue(Approx(x.partial_integral(Interval(14,14.5))) == (Interval(6.5,7), Interval(22.5,23.5)))
220
+ self.assertTrue(Approx(x.partial_integral(Interval(12.5,14.5))) == (Interval(6.0,7.0), Interval(20.5,23.5)))
221
+ self.assertTrue(Approx(x.partial_integral(Interval(1.5,3.5))) == (Interval(1.5,3.5), Interval(3,7)))
222
+ self.assertTrue(Approx(x.partial_integral(Interval(9,21))) == (Interval(6,13.5), Interval(18,36.5)))
223
+
224
+ def test_computing_integration_from_0_partial_integration__tube1(self):
225
+
226
+ x = predef.tube_test_1()
227
+ x.set_ith_slice(Interval(-4,2), 14)
228
+
229
+ self.assertTrue(Approx(x.partial_integral(x.tdomain().t0_tf())) == (Interval(-85,7), Interval(-16,194)))
230
+ self.assertTrue(Approx(x.partial_integral(Interval(0.,46.))) == (Interval(-85,7), Interval(-16,194)))
231
+ self.assertTrue(Approx(x.partial_integral(Interval(7.))) == (Interval(-23), Interval(13)))
232
+ self.assertTrue(Approx(x.partial_integral(Interval(0.,7.))) == (Interval(-23,7.0), Interval(0,25)))
233
+ self.assertTrue(Approx(x.partial_integral(Interval(2.,6.))) == (Interval(-13,7), Interval(15,25)))
234
+ self.assertTrue(Approx(x.partial_integral(Interval(6.,7.))) == (Interval(-23,-13), Interval(13,19)))
235
+
236
+ integrale_lb = Interval.empty()
237
+ integrale_ub = Interval.empty()
238
+
239
+ t = 0.0
240
+ while t <= 46.0:
241
+ integrale_lb |= x.partial_integral(Interval(0, t))[0]
242
+ integrale_ub |= x.partial_integral(Interval(0, t))[1]
243
+ t += 0.2
244
+
245
+ self.assertTrue(integrale_lb.is_subset(Interval(-85,7)))
246
+ self.assertTrue(integrale_ub.is_subset(Interval(-16,194)))
247
+
248
+ def test_computing_integration_from_0_partial_integration__tube1_01(self):
249
+
250
+ x = predef.tube_test_1_01()
251
+
252
+ self.assertTrue(Approx(x.partial_integral(Interval(0.,46.))) == (Interval(-85,7), Interval(-16,194)))
253
+ self.assertTrue(Approx(x.partial_integral(Interval(7.))) == (Interval(-23), Interval(13)))
254
+ self.assertTrue(Approx(x.partial_integral(Interval(0.,7.))) == (Interval(-23,7.0), Interval(0,25)))
255
+ self.assertTrue(Approx(x.partial_integral(Interval(2.,6.))) == (Interval(-13,7), Interval(15,25)))
256
+ self.assertTrue(Approx(x.partial_integral(Interval(6.,7.))) == (Interval(-23,-13), Interval(13,19)))
257
+
258
+ def test_computing_integration_two_interval_bounds__tube1(self):
259
+
260
+ x = predef.tube_test_1()
261
+ x.set_ith_slice(Interval(-4,2), 14)
262
+
263
+ self.assertTrue(Approx(x.integral(Interval(20), Interval(20))) == Interval(0.))
264
+ self.assertTrue(Approx(x.integral(Interval(2.1), Interval(2.1))) == Interval(0.))
265
+ self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
266
+ self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
267
+ self.assertTrue(Approx(x.integral(Interval(17.), Interval(20.))) == Interval(12,24))
268
+ self.assertTrue(Approx(x.integral(Interval(28.), Interval(33.))) == Interval(17,31))
269
+ self.assertTrue(Approx(x.integral(Interval(20.), Interval(28.))) == Interval(51,88))
270
+ self.assertTrue(Approx(x.integral(Interval(17.), Interval(33.))) == Interval(80,143))
271
+ self.assertTrue(Approx(x.integral(Interval(22.5), Interval(23))) == Interval(4.5,6))
272
+ self.assertTrue(Approx(x.integral(Interval(8.5), Interval(10.5))) == Interval(-18,-9.5))
273
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(7))) == Interval(-23,13))
274
+ self.assertTrue(Approx(x.integral(Interval(2), Interval(6))) == Interval(-19,4))
275
+ self.assertTrue(Approx(x.integral(Interval(0,2), Interval(6,7))) == Interval(-29,19))
276
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(17))) == Interval(-85,-4))
277
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(38))) == Interval(1,161))
278
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(17,38))) == Interval(-85,161))
279
+ self.assertTrue(Approx(x.integral(Interval(10), Interval(13))) == Interval(-21,-11))
280
+ self.assertTrue(Approx(x.integral(Interval(17), Interval(20))) == Interval(12,24))
281
+ self.assertTrue(Approx(x.integral(Interval(13), Interval(17))) == Interval(-11,11))
282
+ self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17))) == Interval(-32,11))
283
+ self.assertTrue(Approx(x.integral(Interval(13), Interval(17,20))) == Interval(-11,35))
284
+ self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17,20))) == Interval(-32,35))
285
+ self.assertTrue(Approx(x.integral(Interval(5,10), Interval(31,42))) == Interval(-6,180))
286
+
287
+ def test_computing_integration_two_interval_bounds__tube1_01(self):
288
+
289
+ x = predef.tube_test_1_01()
290
+
291
+ self.assertTrue(Approx(x.integral(Interval(20), Interval(20))) == Interval(0.))
292
+ self.assertTrue(Approx(x.integral(Interval(2.1), Interval(2.1))) == Interval(0.))
293
+ self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
294
+ self.assertTrue(Approx(x.integral(Interval(12.2), Interval(12.2)),1e-8) == Interval(0.))
295
+ self.assertTrue(Approx(x.integral(Interval(17.), Interval(20.))) == Interval(12,24))
296
+ self.assertTrue(Approx(x.integral(Interval(28.), Interval(33.))) == Interval(17,31))
297
+ self.assertTrue(Approx(x.integral(Interval(20.), Interval(28.))) == Interval(51,88))
298
+ self.assertTrue(Approx(x.integral(Interval(17.), Interval(33.))) == Interval(80,143))
299
+ self.assertTrue(Approx(x.integral(Interval(22.5), Interval(23))) == Interval(4.5,6))
300
+ self.assertTrue(Approx(x.integral(Interval(8.5), Interval(10.5))) == Interval(-18,-9.5))
301
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(7))) == Interval(-23,13))
302
+ self.assertTrue(Approx(x.integral(Interval(2), Interval(6))) == Interval(-19,4))
303
+ self.assertTrue(Approx(x.integral(Interval(0,2), Interval(6,7))) == Interval(-29,19))
304
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(17))) == Interval(-85,-4))
305
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(38))) == Interval(1,161))
306
+ self.assertTrue(Approx(x.integral(Interval(0), Interval(17,38))) == Interval(-85,161))
307
+ self.assertTrue(Approx(x.integral(Interval(10), Interval(13))) == Interval(-21,-11))
308
+ self.assertTrue(Approx(x.integral(Interval(17), Interval(20))) == Interval(12,24))
309
+ self.assertTrue(Approx(x.integral(Interval(13), Interval(17))) == Interval(-11,11))
310
+ self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17))) == Interval(-32,11))
311
+ self.assertTrue(Approx(x.integral(Interval(13), Interval(17,20))) == Interval(-11,35))
312
+ self.assertTrue(Approx(x.integral(Interval(10,13), Interval(17,20))) == Interval(-32,35))
313
+ self.assertTrue(Approx(x.integral(Interval(5,10), Interval(31,42))) == Interval(-6,180))
314
+
315
+ def test_computing_integration_two_interval_bounds__tube4(self):
316
+
317
+ x = predef.tube_test4()
318
+ x.set(Interval(-1,1), Interval(10,11))
319
+
320
+ self.assertTrue(Approx(x.integral(Interval(0,8), Interval(15,21)),1e-8) == Interval(-0.5,36.5))
321
+ self.assertTrue(Approx(x.integral(Interval(0,8), Interval(9,21)),1e-8) == Interval(-2,36.5))
322
+
323
+ def test_computing_integration_two_interval_bounds__tube4_05(self):
324
+
325
+ x = predef.tube_test4_05()
326
+
327
+ self.assertTrue(Approx(x.integral(Interval(0,8), Interval(15,21))) == Interval(-0.5,36.5))
328
+ self.assertTrue(Approx(x.integral(Interval(0,8), Interval(9,21))) == Interval(-2,36.5))
329
+
330
+ def test_computing_partial_integration_two_interval_bounds__tube1(self):
331
+
332
+ x = predef.tube_test_1()
333
+ x.set_ith_slice(Interval(-4,2), 14)
334
+
335
+ self.assertTrue(Approx(x.partial_integral(Interval(0), Interval(0))) == (Interval(0.), Interval(0.)))
336
+ self.assertTrue(Approx(x.partial_integral(Interval(20), Interval(20))) == (Interval(0.), Interval(0.)))
337
+ self.assertTrue(Approx(x.partial_integral(Interval(22,23), Interval(24,25))) == (Interval(8,24), Interval(13,37)))
338
+ self.assertTrue(Approx(x.partial_integral(Interval(17,20), Interval(28,33))) == (Interval(51,80), Interval(88,143)))
339
+ self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(7.))) == (Interval(-23), Interval(13)))
340
+ self.assertTrue(Approx(x.partial_integral(Interval(2.), Interval(6.))) == (Interval(-19), Interval(4)))
341
+ self.assertTrue(Approx(x.partial_integral(Interval(0,2), Interval(6,7))) == (Interval(-29,-13), Interval(-2,19)))
342
+ self.assertTrue(Approx(x.partial_integral(Interval(10,13), Interval(17,20))) == (Interval(-32,1), Interval(0,35)))
343
+ self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(46.))) == (Interval(-3), Interval(194)))
344
+
345
+ def test_computing_partial_integration_two_interval_bounds__tube1_01(self):
346
+
347
+ x = predef.tube_test_1_01()
348
+
349
+ self.assertTrue(Approx(x.partial_integral(Interval(0), Interval(0))) == (Interval(0.), Interval(0.)))
350
+ self.assertTrue(Approx(x.partial_integral(Interval(20), Interval(20))) == (Interval(0.), Interval(0.)))
351
+ self.assertTrue(Approx(x.partial_integral(Interval(22,23), Interval(24,25))) == (Interval(8,24), Interval(13,37)))
352
+ self.assertTrue(Approx(x.partial_integral(Interval(17,20), Interval(28,33))) == (Interval(51,80), Interval(88,143)))
353
+ self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(7.))) == (Interval(-23), Interval(13)))
354
+ self.assertTrue(Approx(x.partial_integral(Interval(2.), Interval(6.))) == (Interval(-19), Interval(4)))
355
+ self.assertTrue(Approx(x.partial_integral(Interval(0,2), Interval(6,7))) == (Interval(-29,-13), Interval(-2,19)))
356
+ self.assertTrue(Approx(x.partial_integral(Interval(10,13), Interval(17,20))) == (Interval(-32,1), Interval(0,35)))
357
+ self.assertTrue(Approx(x.partial_integral(Interval(0.), Interval(46.))) == (Interval(-3), Interval(194)))
358
+
359
+ def test_computing_partial_integration_two_interval_bounds__tube4(self):
360
+
361
+ x = predef.tube_test4()
362
+ x.set(Interval(-1,1), Interval(10,11))
363
+
364
+ self.assertTrue(Approx(x.partial_integral(Interval(0.1,1.1), Interval(2.6,3.2)))
365
+ == (Interval(1.5,3.1), Interval(3.0,6.2)))
366
+ self.assertTrue(Approx(x.partial_integral(Interval(8.6,9.9), Interval(13.2,13.6)),1e-8)
367
+ == (Interval(-3.35,-2.3), Interval(1.95,4.7)))
368
+
369
+ def test_computing_partial_integration_two_interval_bounds__tube4_05(self):
370
+
371
+ x = predef.tube_test4_05()
372
+
373
+ self.assertTrue(Approx(x.partial_integral(Interval(0.1,1.1), Interval(2.6,3.2)))
374
+ == (Interval(1.5,3.1), Interval(3.0,6.2)))
375
+ self.assertTrue(Approx(x.partial_integral(Interval(8.6,9.9), Interval(13.2,13.6)),1e-8)
376
+ == (Interval(-3.35,-2.3), Interval(1.95,4.7)))
377
+
378
+
379
+ if __name__ == '__main__':
380
+ unittest.main()
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+ import sys
13
+ import math
14
+
15
+ class TestTDomain(unittest.TestCase):
16
+
17
+ def test_tdomain(self):
18
+
19
+ tdomain = create_tdomain()
20
+ tdomain.sample(Interval(0,1), 0.5)
21
+ self.assertTrue(tdomain.nb_tslices() == 4)
22
+ self.assertTrue(tdomain.t0_tf() == Interval(-oo,oo))
23
+
24
+ vector_tslices = tdomain.tslices_vector()
25
+
26
+ self.assertTrue(len(vector_tslices) == 4)
27
+ self.assertTrue(vector_tslices[0] == Interval(-oo,0))
28
+ self.assertTrue(vector_tslices[1] == Interval(0,0.5))
29
+ self.assertTrue(vector_tslices[2] == Interval(0.5,1))
30
+ self.assertTrue(vector_tslices[3] == Interval(1,oo))
31
+
32
+ self.assertTrue(tdomain.tslice(-10.) == Interval(-oo,0))
33
+ self.assertTrue(tdomain.tslice(-120.) == Interval(-oo,0))
34
+ self.assertTrue(tdomain.tslice(0.2) == Interval(0,0.5))
35
+ self.assertTrue(tdomain.tslice(5540.2) == Interval(1,oo))
36
+
37
+ self.assertTrue(tdomain.nb_tubes() == 0)
38
+ x = SlicedTube(tdomain, IntervalVector(2))
39
+ self.assertTrue(tdomain.nb_tubes() == 1)
40
+
41
+ def outside_scope(): # new scope
42
+ v = SlicedTube(tdomain, IntervalVector(3))
43
+ self.assertTrue(tdomain.nb_tubes() == 2)
44
+ # end of scope, removing the tube
45
+
46
+ outside_scope()
47
+ self.assertTrue(tdomain.nb_tubes() == 1)
48
+
49
+ def test_degenerated_tdomain(self):
50
+
51
+ tdomain = create_tdomain(Interval(1))
52
+ self.assertTrue(tdomain.nb_tslices() == 1)
53
+ self.assertTrue(tdomain.t0_tf() == Interval(1))
54
+ self.assertTrue(tdomain.nb_tubes() == 0)
55
+
56
+ vector_tslices = tdomain.tslices_vector()
57
+
58
+ self.assertTrue(len(vector_tslices) == 1)
59
+ self.assertTrue(vector_tslices[0] == Interval(1))
60
+
61
+ def test_tdomain_with_gates(self):
62
+
63
+ tdomain = create_tdomain(Interval(0,1), 0.5, True)
64
+ self.assertTrue(tdomain.nb_tslices() == 5)
65
+ self.assertTrue(tdomain.t0_tf() == Interval(0,1))
66
+ self.assertTrue(tdomain.nb_tubes() == 0)
67
+
68
+ vector_tslices = tdomain.tslices_vector()
69
+
70
+ self.assertTrue(len(vector_tslices) == 5)
71
+ self.assertTrue(vector_tslices[0] == Interval(0))
72
+ self.assertTrue(vector_tslices[1] == Interval(0,0.5))
73
+ self.assertTrue(vector_tslices[2] == Interval(0.5))
74
+ self.assertTrue(vector_tslices[3] == Interval(0.5,1))
75
+ self.assertTrue(vector_tslices[4] == Interval(1,1))
76
+
77
+ self.assertTrue(tdomain.tslice(0.) == Interval(0))
78
+ self.assertTrue(tdomain.tslice(0.1) == Interval(0,0.5))
79
+ self.assertTrue(tdomain.tslice(0.5) == Interval(0.5))
80
+ self.assertTrue(tdomain.tslice(0.6) == Interval(0.5,1))
81
+ self.assertTrue(tdomain.tslice(1.) == Interval(1))
82
+
83
+ def test_tdomain_with_sampling(self):
84
+
85
+ tdomain = create_tdomain()
86
+ tdomain.sample(1.)
87
+ self.assertTrue(tdomain.nb_tslices() == 2)
88
+ tdomain.sample(10.,False) # no gate
89
+ self.assertTrue(tdomain.nb_tslices() == 3)
90
+ tdomain.sample(10.,True) # second sampling with gate
91
+ self.assertTrue(tdomain.nb_tslices() == 4)
92
+ tdomain.sample(10.,True) # no more action
93
+ self.assertTrue(tdomain.nb_tslices() == 4)
94
+
95
+ vector_tslices = tdomain.tslices_vector()
96
+
97
+ self.assertTrue(len(vector_tslices) == 4)
98
+ self.assertTrue(vector_tslices[0] == Interval(-oo,1))
99
+ self.assertTrue(vector_tslices[1] == Interval(1,10))
100
+ self.assertTrue(vector_tslices[2] == Interval(10))
101
+ self.assertTrue(vector_tslices[3] == Interval(10,oo))
102
+
103
+ def test_unbounded_tdomain(self):
104
+
105
+ tdomain = create_tdomain()
106
+ self.assertTrue(tdomain.nb_tslices() == 1)
107
+ self.assertTrue(tdomain.t0_tf() == Interval(-oo,oo))
108
+
109
+ vector_tslices = tdomain.tslices_vector()
110
+
111
+ self.assertTrue(len(vector_tslices) == 1)
112
+ self.assertTrue(vector_tslices[0] == Interval(-oo,oo))
113
+
114
+ if __name__ == '__main__':
115
+ unittest.main()
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+
13
+ class TestVector(unittest.TestCase):
14
+
15
+ def test_Vector(self):
16
+
17
+ self.assertTrue(Vector([1,2])+Vector([3,4]) == Vector([4,6]))
18
+
19
+
20
+ def test_vector_specific_to_python(self):
21
+
22
+ x = Vector([1,2,3])
23
+ y = Vector.zero(3)
24
+
25
+ i = 0
26
+ for xi in x: # using __iter__
27
+ y[i] = xi
28
+ i = i+1
29
+
30
+ self.assertTrue(x == y)
31
+
32
+ a,b,c = x # using __iter__
33
+ self.assertTrue(a == x[0])
34
+ self.assertTrue(b == x[1])
35
+ self.assertTrue(c == x[2])
36
+
37
+ v = Vector([*x, 42]) # using __iter__
38
+ self.assertTrue(v == [1,2,3,42])
39
+
40
+ if __name__ == '__main__':
41
+ unittest.main()
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+
13
+ class TestArithmeticAdd(unittest.TestCase):
14
+
15
+ def test_ArithmeticAdd(self):
16
+
17
+ # inline Vector operator+(const Vector& x1, const Vector& x2)
18
+ self.assertTrue(Vector([1,2,3])+Vector([5,6,7]) == Vector([6,8,10]))
19
+
20
+ # inline IntervalVector operator+(const Vector& x1, const IntervalVector& x2)
21
+ self.assertTrue(Vector([1,2,3])+IntervalVector([[-1,1],[-2,2],[-3,3]]) == IntervalVector([[0,2],[0,4],[0,6]]))
22
+
23
+ # Matrix operator+(const M& x1, const M_& x2)
24
+ self.assertTrue(Matrix([[1,2],[3,4]])+Matrix([[3,4],[5,6]]) == Matrix([[4,6],[8,10]]))
25
+ self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+Matrix([[3,4],[5,6]]) == Matrix([[4,6],[8,10]]))
26
+ self.assertTrue(Matrix([[1,2],[3,4]])+Matrix([[3,4],[5,6]]).block(0,0,2,2) == Matrix([[4,6],[8,10]]))
27
+ self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+Matrix([[3,4],[5,6]]).block(0,0,2,2) == Matrix([[4,6],[8,10]]))
28
+
29
+ # IntervalMatrix operator+(const M& x1, const IM& x2)
30
+ self.assertTrue(Matrix([[1,2],[3,4]])+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
31
+ self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
32
+ self.assertTrue(Matrix([[1,2],[3,4]])+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
33
+ self.assertTrue(Matrix([[1,2],[3,4]]).block(0,0,2,2)+IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
34
+
35
+ # inline IntervalVector operator+(const IntervalVector& x1, const Vector& x2)
36
+ self.assertTrue(IntervalVector([[-1,1],[-2,2],[-3,3]])+Vector([1,2,3]) == IntervalVector([[0,2],[0,4],[0,6]]))
37
+
38
+ # inline IntervalVector operator+(const IntervalVector& x1, const IntervalVector& x2)
39
+ self.assertTrue(IntervalVector([[-1,1],[-2,2],[-3,3]])+IntervalVector([[1],[2],[3]]) == IntervalVector([[0,2],[0,4],[0,6]]))
40
+
41
+ # IntervalMatrix operator+(const IM& x1, const M& x2)
42
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+Matrix([[1,2],[3,4]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
43
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+Matrix([[1,2],[3,4]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
44
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+Matrix([[1,2],[3,4]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
45
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+Matrix([[1,2],[3,4]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
46
+
47
+ # IntervalMatrix operator+(const IM& x1, const IM_& x2)
48
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+IntervalMatrix([[[1],[2]],[[3],[4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
49
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+IntervalMatrix([[[1],[2]],[[3],[4]]]) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
50
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]])+IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
51
+ self.assertTrue(IntervalMatrix([[[-1,1],[-2,2]],[[-3,3],[-4,4]]]).block(0,0,2,2)+IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2) == IntervalMatrix([[[0,2],[0,4]],[[0,6],[0,8]]]))
52
+
53
+ if __name__ == '__main__':
54
+ unittest.main()
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Codac tests
4
+ # ----------------------------------------------------------------------------
5
+ # \date 2024
6
+ # \author Simon Rohou
7
+ # \copyright Copyright 2024 Codac Team
8
+ # \license GNU Lesser General Public License (LGPL)
9
+
10
+ import unittest
11
+ from codac import *
12
+
13
+ class TestArithmeticDiv(unittest.TestCase):
14
+
15
+ def test_ArithmeticDiv(self):
16
+
17
+ #inline Vector operator/(const Vector& x1, double x2)
18
+ self.assertTrue(Approx(Vector([1,2,3])/10.) == Vector([.1,.2,.3]))
19
+
20
+ #inline IntervalVector operator/(const Vector& x1, const Interval& x2)
21
+ self.assertTrue(Approx(Vector([1,2,3])/Interval(10.,oo)) == IntervalVector([[0,.1],[0,.2],[0,.3]]))
22
+
23
+ #Matrix operator/(const M& x1, double x2)
24
+ self.assertTrue(Approx(Matrix([[1,2],[3,4]])/10.) == Matrix([[.1,.2],[.3,.4]]))
25
+ self.assertTrue(Approx(Matrix([[1,2],[3,4]]).block(0,0,2,2)/10.) == Matrix([[.1,.2],[.3,.4]]))
26
+
27
+ #IntervalMatrix operator/(const M& x1, const Interval& x2)
28
+ self.assertTrue(Approx(Matrix([[1,2],[3,4]])/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
29
+ self.assertTrue(Approx(Matrix([[1,2],[3,4]]).block(0,0,2,2)/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
30
+
31
+ #inline IntervalVector operator/(const IntervalVector& x1, double x2)
32
+ self.assertTrue(Approx(IntervalVector([[1],[2],[3]])/10.) == IntervalVector([[.1],[.2],[.3]]))
33
+
34
+ #inline IntervalVector operator/(const IntervalVector& x1, const Interval& x2)
35
+ self.assertTrue(Approx(IntervalVector([[1],[2],[3]])/Interval(10.,oo)) == IntervalVector([[0,.1],[0,.2],[0,.3]]))
36
+
37
+ #IntervalMatrix operator/(const IM& x1, double x2)
38
+ self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]])/10.) == IntervalMatrix([[[.1],[.2]],[[.3],[.4]]]))
39
+ self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2)/10.) == IntervalMatrix([[[.1],[.2]],[[.3],[.4]]]))
40
+
41
+ #IntervalMatrix operator/(const IM& x1, const Interval& x2)
42
+ self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]])/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
43
+ self.assertTrue(Approx(IntervalMatrix([[[1],[2]],[[3],[4]]]).block(0,0,2,2)/Interval(10.,oo)) == IntervalMatrix([[[0,.1],[0,.2]],[[0,.3],[0,.4]]]))
44
+
45
+ if __name__ == '__main__':
46
+ unittest.main()