Skip to content

Commit d340a3d

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

File tree

2 files changed

+100
-48
lines changed

2 files changed

+100
-48
lines changed

Cargo.lock

Lines changed: 6 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deep_causality/tests/types/reasoning_types/propagating_effect_tests.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
*/
55

66
use deep_causality::*;
7+
use std::collections::HashMap;
8+
use std::sync::Arc;
9+
use ultragraph::{GraphView, UltraGraph};
710

811
#[test]
912
fn test_is_deterministic() {
@@ -173,3 +176,94 @@ fn test_partial_eq() {
173176
assert_ne!(effect1, effect7);
174177
assert_ne!(effect4, effect7);
175178
}
179+
180+
#[test]
181+
fn test_none_variant() {
182+
let effect = PropagatingEffect::None;
183+
assert!(effect.is_none());
184+
assert_eq!(effect, PropagatingEffect::None);
185+
assert_ne!(effect, PropagatingEffect::Deterministic(true));
186+
assert_eq!(format!("{:?}", effect), "PropagatingEffect::None");
187+
}
188+
189+
#[test]
190+
fn test_numerical_variant() {
191+
let effect = PropagatingEffect::Numerical(123.45);
192+
assert!(effect.is_numerical());
193+
assert_eq!(effect.as_numerical(), Some(123.45));
194+
assert_eq!(effect, PropagatingEffect::Numerical(123.45));
195+
assert_ne!(effect, PropagatingEffect::Numerical(543.21));
196+
assert_eq!(format!("{:?}", effect), "PropagatingEffect::Numerical(123.45)");
197+
}
198+
199+
#[test]
200+
fn test_map_variant() {
201+
let mut map1 = HashMap::new();
202+
map1.insert(1, Box::new(PropagatingEffect::Numerical(1.0)));
203+
map1.insert(2, Box::new(PropagatingEffect::Deterministic(true)));
204+
let effect1 = PropagatingEffect::Map(map1.clone());
205+
206+
let mut map2 = HashMap::new();
207+
map2.insert(1, Box::new(PropagatingEffect::Numerical(1.0)));
208+
map2.insert(2, Box::new(PropagatingEffect::Deterministic(true)));
209+
let effect2 = PropagatingEffect::Map(map2.clone());
210+
211+
let mut map3 = HashMap::new();
212+
map3.insert(1, Box::new(PropagatingEffect::Numerical(1.0)));
213+
map3.insert(3, Box::new(PropagatingEffect::Deterministic(false))); // Different key and value
214+
let effect3 = PropagatingEffect::Map(map3.clone());
215+
216+
assert!(effect1.is_map());
217+
assert_eq!(effect1, effect2);
218+
assert_ne!(effect1, effect3);
219+
assert_eq!(format!("{:?}", effect1), format!("PropagatingEffect::Map({:?})", map1));
220+
221+
// Test map specific methods
222+
let mut new_map = PropagatingEffect::new_map();
223+
new_map.insert(10, PropagatingEffect::Numerical(100.0));
224+
assert_eq!(new_map.get_numerical_from_map(10).unwrap(), 100.0);
225+
assert!(new_map.get_numerical_from_map(99).is_err());
226+
227+
new_map.insert(11, PropagatingEffect::Deterministic(true));
228+
assert_eq!(new_map.get_deterministic_from_map(11).unwrap(), true);
229+
assert!(new_map.get_deterministic_from_map(99).is_err());
230+
}
231+
232+
#[test]
233+
fn test_graph_variant() {
234+
let graph1 = Arc::new(UltraGraph::new());
235+
let graph2 = Arc::new(UltraGraph::new());
236+
let graph3 = Arc::new(UltraGraph::new());
237+
238+
let effect1 = PropagatingEffect::Graph(Arc::clone(&graph1));
239+
let effect2 = PropagatingEffect::Graph(Arc::clone(&graph1)); // Same Arc
240+
let effect3 = PropagatingEffect::Graph(Arc::clone(&graph2)); // Different Arc, same content
241+
let effect4 = PropagatingEffect::Graph(Arc::clone(&graph3)); // Different Arc, different content
242+
243+
assert!(effect1.is_graph());
244+
assert_eq!(effect1, effect2); // Should be equal due to Arc::ptr_eq
245+
assert_ne!(effect1, effect3); // Should be not equal due to Arc::ptr_eq
246+
assert_ne!(effect1, effect4);
247+
assert_eq!(format!("{:?}", effect1), format!("PropagatingEffect::Graph(nodes: {}, edges: {})", graph1.number_nodes(), graph1.number_edges()));
248+
}
249+
250+
#[test]
251+
fn test_relay_to_variant() {
252+
let effect1 = PropagatingEffect::RelayTo(1, Box::new(PropagatingEffect::Deterministic(true)));
253+
let effect2 = PropagatingEffect::RelayTo(1, Box::new(PropagatingEffect::Deterministic(true)));
254+
let effect3 = PropagatingEffect::RelayTo(2, Box::new(PropagatingEffect::Deterministic(true)));
255+
let effect4 = PropagatingEffect::RelayTo(1, Box::new(PropagatingEffect::Deterministic(false)));
256+
257+
assert!(effect1.is_relay_to());
258+
assert_eq!(effect1, effect2);
259+
assert_ne!(effect1, effect3);
260+
assert_ne!(effect1, effect4);
261+
assert_eq!(format!("{:?}", effect1), "PropagatingEffect::RelayTo(1, PropagatingEffect::Deterministic(true))");
262+
}
263+
264+
#[test]
265+
fn test_default_variant() {
266+
let effect: PropagatingEffect = Default::default();
267+
assert!(effect.is_none());
268+
assert_eq!(effect, PropagatingEffect::None);
269+
}

0 commit comments

Comments
 (0)