@@ -154,66 +154,86 @@ fn test_clone() {
154154
155155#[ test]
156156fn test_partial_eq ( ) {
157+ // None variant
157158 let effect1 = PropagatingEffect :: None ;
158159 let effect2 = PropagatingEffect :: None ;
159160 let effect3 = PropagatingEffect :: Deterministic ( false ) ;
160161 assert_eq ! ( effect1, effect2) ;
161162 assert_ne ! ( effect1, effect3) ;
162163
164+ // Deterministic variant
163165 let effect1 = PropagatingEffect :: Deterministic ( true ) ;
164166 let effect2 = PropagatingEffect :: Deterministic ( true ) ;
165167 let effect3 = PropagatingEffect :: Deterministic ( false ) ;
166168 assert_eq ! ( effect1, effect2) ;
167169 assert_ne ! ( effect1, effect3) ;
168170
171+ // Numerical variant
169172 let effect1 = PropagatingEffect :: Numerical ( 1.0 ) ;
170173 let effect2 = PropagatingEffect :: Numerical ( 1.0 ) ;
171174 let effect3 = PropagatingEffect :: Numerical ( 23.0 ) ;
172175 assert_eq ! ( effect1, effect2) ;
173176 assert_ne ! ( effect1, effect3) ;
174177
178+ // Probabilistic variant
175179 let effect4 = PropagatingEffect :: Probabilistic ( 0.5 ) ;
176180 let effect5 = PropagatingEffect :: Probabilistic ( 0.5 ) ;
177181 let effect6 = PropagatingEffect :: Probabilistic ( 0.6 ) ;
178182 assert_eq ! ( effect4, effect5) ;
179183 assert_ne ! ( effect4, effect6) ;
180184
185+ // ContextualLink variant
181186 let effect7 = PropagatingEffect :: ContextualLink ( 1 , 2 ) ;
182187 let effect8 = PropagatingEffect :: ContextualLink ( 1 , 2 ) ;
183188 let effect9 = PropagatingEffect :: ContextualLink ( 2 , 1 ) ;
184189 assert_eq ! ( effect7, effect8) ;
185190 assert_ne ! ( effect7, effect9) ;
186191
187- assert_ne ! ( effect1 , effect4 ) ;
188- assert_ne ! ( effect1 , effect7 ) ;
189- assert_ne ! ( effect4 , effect7 ) ;
190-
191- let map1 = HashMap :: new ( ) ;
192+ // Map variant
193+ let mut map1 = HashMap :: new ( ) ;
194+ map1 . insert ( 1 , Box :: new ( PropagatingEffect :: Numerical ( 1.0 ) ) ) ;
195+ map1 . insert ( 2 , Box :: new ( PropagatingEffect :: Deterministic ( true ) ) ) ;
196+ let effect10 = PropagatingEffect :: Map ( map1 . clone ( ) ) ;
192197
193- let effect1 = PropagatingEffect :: Map ( map1. clone ( ) ) ;
194- let effect2 = PropagatingEffect :: Map ( map1) ;
195- let effect3 = PropagatingEffect :: None ;
196- assert_eq ! ( effect1, effect2) ;
197- assert_ne ! ( effect1, effect3) ;
198+ let mut map2 = HashMap :: new ( ) ;
199+ map2. insert ( 1 , Box :: new ( PropagatingEffect :: Numerical ( 1.0 ) ) ) ;
200+ map2. insert ( 2 , Box :: new ( PropagatingEffect :: Deterministic ( true ) ) ) ;
201+ let effect11 = PropagatingEffect :: Map ( map2. clone ( ) ) ;
198202
199- let graph = Arc :: new ( UltraGraph :: new ( ) ) ;
200- let effect1 = PropagatingEffect :: Graph ( graph. clone ( ) ) ;
201- let effect2 = PropagatingEffect :: Graph ( graph. clone ( ) ) ;
202- let effect3 = PropagatingEffect :: None ;
203- assert_eq ! ( effect1, effect2) ;
204- assert_ne ! ( effect1, effect3) ;
203+ let mut map3 = HashMap :: new ( ) ;
204+ map3. insert ( 1 , Box :: new ( PropagatingEffect :: Numerical ( 1.0 ) ) ) ;
205+ map3. insert ( 3 , Box :: new ( PropagatingEffect :: Deterministic ( false ) ) ) ; // Different key and value
206+ let effect12 = PropagatingEffect :: Map ( map3. clone ( ) ) ;
205207
206- let effect1 = PropagatingEffect :: Halting ;
207- let effect2 = PropagatingEffect :: Halting ;
208- let effect3 = PropagatingEffect :: Deterministic ( false ) ;
209- assert_eq ! ( effect1, effect2) ;
210- assert_ne ! ( effect1, effect3) ;
208+ assert_eq ! ( effect10, effect11) ;
209+ assert_ne ! ( effect10, effect12) ;
211210
212- let effect7 = PropagatingEffect :: RelayTo ( 1 , Box :: new ( PropagatingEffect :: None ) ) ;
213- let effect8 = PropagatingEffect :: RelayTo ( 1 , Box :: new ( PropagatingEffect :: None ) ) ;
214- let effect9 = PropagatingEffect :: None ;
215- assert_eq ! ( effect7, effect8) ;
216- assert_ne ! ( effect7, effect9) ;
211+ // Graph variant
212+ let graph1 = Arc :: new ( UltraGraph :: new ( ) ) ;
213+ let graph2 = Arc :: new ( UltraGraph :: new ( ) ) ;
214+ // let graph3 = Arc::new(UltraGraph::new());
215+
216+ let effect13 = PropagatingEffect :: Graph ( Arc :: clone ( & graph1) ) ;
217+ let effect14 = PropagatingEffect :: Graph ( Arc :: clone ( & graph1) ) ; // Same Arc
218+ let effect15 = PropagatingEffect :: Graph ( Arc :: clone ( & graph2) ) ; // Different Arc, same content
219+ assert_eq ! ( effect13, effect14) ; // Should be equal due to Arc::ptr_eq
220+ assert_ne ! ( effect13, effect15) ; // Should be not equal due to Arc::ptr_eq
221+
222+ // Halting variant
223+ let effect16 = PropagatingEffect :: Halting ;
224+ let effect17 = PropagatingEffect :: Halting ;
225+ let effect18 = PropagatingEffect :: Deterministic ( false ) ;
226+ assert_eq ! ( effect16, effect17) ;
227+ assert_ne ! ( effect16, effect18) ;
228+
229+ // RelayTo variant
230+ let effect19 = PropagatingEffect :: RelayTo ( 1 , Box :: new ( PropagatingEffect :: Deterministic ( true ) ) ) ;
231+ let effect20 = PropagatingEffect :: RelayTo ( 1 , Box :: new ( PropagatingEffect :: Deterministic ( true ) ) ) ;
232+ let effect21 = PropagatingEffect :: RelayTo ( 2 , Box :: new ( PropagatingEffect :: Deterministic ( true ) ) ) ;
233+ let effect22 = PropagatingEffect :: RelayTo ( 1 , Box :: new ( PropagatingEffect :: Deterministic ( false ) ) ) ;
234+ assert_eq ! ( effect19, effect20) ;
235+ assert_ne ! ( effect19, effect21) ;
236+ assert_ne ! ( effect19, effect22) ;
217237}
218238
219239#[ test]
@@ -274,6 +294,59 @@ fn test_map_variant() {
274294 assert ! ( new_map. get_deterministic_from_map( 99 ) . is_err( ) ) ;
275295}
276296
297+ #[ test]
298+ #[ should_panic( expected = "Cannot insert into PropagatingEffect that is not a Map variant" ) ]
299+ fn test_insert_panic ( ) {
300+ let mut effect = PropagatingEffect :: None ;
301+ effect. insert ( 1 , PropagatingEffect :: Numerical ( 1.0 ) ) ;
302+ }
303+
304+ #[ test]
305+ fn test_get_numerical_from_map_error_not_map ( ) {
306+ let effect = PropagatingEffect :: None ;
307+ let result = effect. get_numerical_from_map ( 1 ) ;
308+ assert ! ( result. is_err( ) ) ;
309+ assert_eq ! (
310+ result. unwrap_err( ) . to_string( ) ,
311+ "CausalityError: Cannot get value by key from PropagatingEffect that is not a Map variant"
312+ ) ;
313+ }
314+
315+ #[ test]
316+ fn test_get_numerical_from_map_error_wrong_type ( ) {
317+ let mut map = PropagatingEffect :: new_map ( ) ;
318+ map. insert ( 1 , PropagatingEffect :: Deterministic ( true ) ) ;
319+ let result = map. get_numerical_from_map ( 1 ) ;
320+ assert ! ( result. is_err( ) ) ;
321+ assert_eq ! (
322+ result. unwrap_err( ) . to_string( ) ,
323+ "CausalityError: Effect for key '1' is not of type Numerical"
324+ ) ;
325+ }
326+
327+ #[ test]
328+ fn test_get_deterministic_from_map_error_not_map ( ) {
329+ let effect = PropagatingEffect :: None ;
330+ let result = effect. get_deterministic_from_map ( 1 ) ;
331+ assert ! ( result. is_err( ) ) ;
332+ assert_eq ! (
333+ result. unwrap_err( ) . to_string( ) ,
334+ "CausalityError: Cannot get value by key from PropagatingEffect that is not a Map variant"
335+ ) ;
336+ }
337+
338+ #[ test]
339+ fn test_get_deterministic_from_map_error_wrong_type ( ) {
340+ let mut map = PropagatingEffect :: new_map ( ) ;
341+ map. insert ( 1 , PropagatingEffect :: Numerical ( 1.0 ) ) ;
342+ let result = map. get_deterministic_from_map ( 1 ) ;
343+ assert ! ( result. is_err( ) ) ;
344+ assert_eq ! (
345+ result. unwrap_err( ) . to_string( ) ,
346+ "CausalityError: Effect for key '1' is not of type Deterministic"
347+ ) ;
348+ }
349+
277350#[ test]
278351fn test_graph_variant ( ) {
279352 let graph1 = Arc :: new ( UltraGraph :: new ( ) ) ;
0 commit comments