|
4 | 4 | */ |
5 | 5 |
|
6 | 6 | use deep_causality::*; |
| 7 | +use std::collections::HashMap; |
| 8 | +use std::sync::Arc; |
| 9 | +use ultragraph::{GraphView, UltraGraph}; |
7 | 10 |
|
8 | 11 | #[test] |
9 | 12 | fn test_is_deterministic() { |
@@ -173,3 +176,94 @@ fn test_partial_eq() { |
173 | 176 | assert_ne!(effect1, effect7); |
174 | 177 | assert_ne!(effect4, effect7); |
175 | 178 | } |
| 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