use super::adf::Adf as NaiveAdf; use super::adfbiodivine::*; use super::datatypes::*; use super::parser::*; use test_log::test; #[test] fn adf_biodivine_cmp_1() { let parser = AdfParser::default(); parser.parse()("s(a).s(b).s(c).s(d).ac(a,c(v)).ac(b,b).ac(c,and(a,b)).ac(d,neg(b)).\ns(e).ac(e,and(b,or(neg(b),c(f)))).s(f).\n\nac(f,xor(a,e)).") .unwrap(); let adf = Adf::from_parser(&parser); let mut naive_adf = NaiveAdf::from_biodivine(&adf); let result = adf.grounded(); assert_eq!( result, vec![ Term::TOP, Term::UND, Term::UND, Term::UND, Term::BOT, Term::TOP ] ); assert_eq!( format!("{}", adf.print_interpretation(&result)), "T(a) u(b) u(c) u(d) F(e) T(f) \n" ); let naive_result = naive_adf.grounded(); assert_eq!( format!("{}", adf.print_interpretation(&adf.grounded())), format!("{}", naive_adf.print_interpretation(&naive_result)) ); let printer = naive_adf.print_dictionary(); let mut str1 = String::new(); let mut str2 = String::new(); let mut str3 = String::new(); for model in adf.stable() { str1 = format!("{}{}", str1, adf.print_interpretation(&model)); } for model in naive_adf.stable() { str2 = format!("{}{}", str2, printer.print_interpretation(&model)); } for model in adf.hybrid_step().stable() { str3 = format!("{}{}", str3, printer.print_interpretation(&model)); } assert_eq!(str1, str2); assert_eq!(str1, str3); let mut str1 = String::new(); let mut str2 = String::new(); let mut str3 = String::new(); for model in adf.complete() { str1 = format!("{}{}", str1, adf.print_interpretation(&model)); } for model in naive_adf.complete() { str2 = format!("{}{}", str2, printer.print_interpretation(&model)); } for model in adf.hybrid_step().complete() { str3 = format!("{}{}", str3, printer.print_interpretation(&model)); } assert_eq!(str1, str2); assert_eq!(str1, str3); let parser = AdfParser::default(); parser.parse()( "s(a).s(b).s(c).s(d).s(e).ac(a,c(v)).ac(b,a).ac(c,b).ac(d,neg(c)).ac(e,and(a,d)).", ) .unwrap(); let adf = Adf::from_parser(&parser); let mut naive_adf = NaiveAdf::from_biodivine(&adf); let result = adf.grounded(); let naive_result = naive_adf.grounded(); assert_eq!( result, vec![Term::TOP, Term::TOP, Term::TOP, Term::BOT, Term::BOT] ); assert_eq!( format!("{}", adf.print_interpretation(&result)), format!("{}", naive_adf.print_interpretation(&naive_result)) ); } #[test] fn adf_biodivine_cmp_2() { let parser = AdfParser::default(); parser.parse()( "s(a).s(b).s(c).s(d).s(e).ac(a,c(v)).ac(b,a).ac(c,b).ac(d,neg(c)).ac(e,and(a,d)).", ) .unwrap(); let adf = Adf::from_parser(&parser); let mut naive_adf = NaiveAdf::from_biodivine(&adf); let result = adf.grounded(); let naive_result = naive_adf.grounded(); assert_eq!( result, vec![Term::TOP, Term::TOP, Term::TOP, Term::BOT, Term::BOT] ); assert_eq!( format!("{}", adf.print_interpretation(&result)), format!("{}", naive_adf.print_interpretation(&naive_result)) ); let printer = naive_adf.print_dictionary(); let mut str1 = String::new(); let mut str2 = String::new(); let mut str3 = String::new(); for model in adf.stable() { str1 = format!("{}{}", str1, adf.print_interpretation(&model)); } for model in naive_adf.stable() { str2 = format!("{}{}", str2, printer.print_interpretation(&model)); } for model in adf.hybrid_step().stable() { str3 = format!("{}{}", str3, printer.print_interpretation(&model)); } assert_eq!(str1, str2); assert_eq!(str1, str3); let mut str1 = String::new(); let mut str2 = String::new(); let mut str3 = String::new(); for model in adf.complete() { str1 = format!("{}{}", str1, adf.print_interpretation(&model)); } for model in naive_adf.complete() { str2 = format!("{}{}", str2, printer.print_interpretation(&model)); } for model in adf.hybrid_step().complete() { str3 = format!("{}{}", str3, printer.print_interpretation(&model)); } assert_eq!(str1, str2); assert_eq!(str1, str3); } #[test] fn stable_variants_cmp() { let parser = AdfParser::default(); parser.parse()("s(a).s(b).s(c).s(d).ac(a,c(v)).ac(b,b).ac(c,and(a,b)).ac(d,neg(b)).\ns(e).ac(e,and(b,or(neg(b),c(f)))).s(f).\n\nac(f,xor(a,e)).") .unwrap(); let adf = Adf::from_parser_with_stm_rewrite(&parser); let mut naive_adf = NaiveAdf::from_biodivine(&adf); let mut stable_naive: Vec> = naive_adf.stable().collect(); let mut stable_pre: Vec> = naive_adf.stable_with_prefilter().collect(); let mut stable_v2 = adf.stable_bdd_representation(); let mut stable_v2_hybrid = naive_adf.stable_bdd_representation(&adf); stable_naive.sort(); stable_pre.sort(); stable_v2.sort(); stable_v2_hybrid.sort(); assert_eq!(stable_naive, stable_v2); assert_eq!(stable_v2, stable_v2_hybrid); assert_eq!(stable_pre, stable_v2); }