use log::LevelFilter; use rain::Graph; use rand::distributions::{Distribution, Range}; use std::{thread, time::Duration}; #[test] fn add_remove_success_1() { let mut graph = Graph::new().set_log_level(LevelFilter::Warn); assert!(graph.add("Line 1", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 2", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 3", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.remove("Line 2").is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 3", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 4", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 3", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.remove("Line 1").is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 3", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("Line 1", 0).is_ok()); assert!(graph.print().is_ok()); } #[test] fn add_remove_success_2() { let mut graph = Graph::new().set_log_level(LevelFilter::Warn); for i in 1..50 { if i > 25 { assert!(graph.remove(&(i - 25).to_string()).is_ok()); } assert!(graph.add(&i.to_string(), i).is_ok()); } for _ in 0..5 { assert!(graph.print().is_ok()); } } #[test] fn add_remove_success_3() { let mut graph = Graph::new(); assert!(graph.add("0", 100).is_ok()); for i in 1..101 { assert!(graph.add("0", i).is_ok()); assert!(graph.print().is_ok()); } assert!(graph.remove("0").is_ok()); assert!(graph.print().is_ok()); } #[test] fn add_remove_success_4() { let mut graph = Graph::new(); let l1 = "Line 1"; let l2 = "Line 2"; assert!(graph.add(l1, 0).is_ok()); assert!(graph.add(l2, 0).is_ok()); for _ in 0..3 { assert!(graph.print().is_ok()); } for _ in 0..3 { assert!(graph.add(l2, 0).is_ok()); assert!(graph.print().is_ok()); } for _ in 0..3 { assert!(graph.add(l1, 0).is_ok()); assert!(graph.print().is_ok()); } assert!(graph.remove(l1).is_ok()); assert!(graph.remove(l2).is_ok()); assert!(graph.print().is_ok()); } #[test] fn print_long_prefix_success() { let mut graph = Graph::with_prefix_length(18); assert!(graph.add("Line 1", 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add("A very long prefix", 0).is_ok()); assert!(graph.print().is_ok()); } #[test] fn print_if_new_data_success() { let mut graph = Graph::new(); let l1 = "Line 1"; let l2 = "Line 2"; assert!(graph.add(l1, 0).is_ok()); assert!(graph.add(l2, 0).is_ok()); assert_eq!(graph.print_if_new_data().unwrap(), true); assert_eq!(graph.print_if_new_data().unwrap(), false); assert!(graph.remove(l2).is_ok()); assert_eq!(graph.print_if_new_data().unwrap(), true); assert_eq!(graph.print_if_new_data().unwrap(), false); assert!(graph.add(l2, 0).is_ok()); assert_eq!(graph.print_if_new_data().unwrap(), true); assert_eq!(graph.print_if_new_data().unwrap(), false); assert_eq!(graph.print_if_new_data().unwrap(), false); } #[test] fn random_add_remove_success() { let mut graph = Graph::new(); let between = Range::new(0, 10); let mut rng = rand::thread_rng(); for _ in 0..100 { let a = between.sample(&mut rng); let b = between.sample(&mut rng); if b % 3 == 0 { assert!(graph.add(a, b).is_ok()); } if a % 3 == 0 { graph.remove(b).ok(); } assert!(graph.print_if_new_data().is_ok()); thread::sleep(Duration::from_millis(10)); } } #[test] fn add_remove_success_signed_integer() { let mut graph = Graph::new(); let l1 = "L 1"; let l2 = "L 2"; let l3 = "Too long line 3"; assert!(graph.add(l1, -10).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add(l2, 0).is_ok()); assert!(graph.print().is_ok()); assert!(graph.add(l3, 10).is_ok()); assert!(graph.print().is_ok()); assert!(graph.remove(l1).is_ok()); assert!(graph.print().is_ok()); assert!(graph.remove(l2).is_ok()); assert!(graph.print().is_ok()); assert!(graph.remove(l3).is_ok()); assert!(graph.print().is_ok()); }