Skip to content

Commit a569017

Browse files
committed
Increased test coverage of PropagatingEffect
Signed-off-by: Marvin Hansen <[email protected]>
1 parent cbf2102 commit a569017

File tree

2 files changed

+102
-33
lines changed

2 files changed

+102
-33
lines changed

deep_causality/src/types/reasoning_types/propagating_effect/mod.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ mod display;
1313
mod partial_eq;
1414

1515
// The graph type alias, updated to be recursive on the new unified enum.
16-
pub type EffectGraph = UltraGraph<crate::PropagatingEffect>;
16+
pub type EffectGraph = UltraGraph<PropagatingEffect>;
1717

1818
/// Unified data and control-flow container for causal reasoning.
1919
///
@@ -43,11 +43,11 @@ pub enum PropagatingEffect {
4343
Halting,
4444
/// A dispatch command that directs a reasoning engine to jump to a specific
4545
/// next causaloid with the specified id (`usize`) and provide it with the encapsulated effect as its new input.
46-
RelayTo(usize, Box<crate::PropagatingEffect>),
46+
RelayTo(usize, Box<PropagatingEffect>),
4747
}
4848

4949
// Predicate methods
50-
impl crate::PropagatingEffect {
50+
impl PropagatingEffect {
5151
pub fn is_none(&self) -> bool {
5252
matches!(self, PropagatingEffect::None)
5353
}
@@ -117,10 +117,6 @@ impl PropagatingEffect {
117117
crate::PropagatingEffect::Map(HashMap::new())
118118
}
119119

120-
pub fn new_map_with_capacity(size: usize) -> Self {
121-
crate::PropagatingEffect::Map(HashMap::with_capacity(size))
122-
}
123-
124120
/// Inserts a key-value pair into an Effect Map.
125121
/// Panics if the Effect is not a Map variant.
126122
pub fn insert(&mut self, key: IdentificationValue, value: crate::PropagatingEffect) {

deep_causality/tests/types/reasoning_types/propagating_effect_tests.rs

Lines changed: 99 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -154,66 +154,86 @@ fn test_clone() {
154154

155155
#[test]
156156
fn 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]
278351
fn test_graph_variant() {
279352
let graph1 = Arc::new(UltraGraph::new());

0 commit comments

Comments
 (0)