use debug3::Debug; #[test] fn motivating() { let complex_structure = vec![ vec![None, Some(2)], vec![Some(2), None], vec![Some(4), Some(777)], vec![None, Some(2)], vec![Some(2), None], vec![None, None, None, None, None], ]; assert_eq!( "[[None, Some(2)], [Some(2), None], [Some(4), Some(777)], [None, Some(2)], [Some(2), None], [None, None, None, None, None]]", format!("{:?}", complex_structure) ); assert_eq!( "\ [ [ None, Some( 2, ), ], [ Some( 2, ), None, ], [ Some( 4, ), Some( 777, ), ], [ None, Some( 2, ), ], [ Some( 2, ), None, ], [ None, None, None, None, None, ], ]", format!("{:#?}", complex_structure) ); assert_eq!( "\ [ [None, Some(2)], [Some(2), None], [Some(4), Some(777)], [None, Some(2)], [Some(2), None], [None, None, None, None, None], ]", debug3::pprint(complex_structure) ); } #[derive(Debug)] enum Instr { Push(i32), Load(&'static str), BinOp(BinOp), UnOp(UnOp), } #[derive(Debug)] enum BinOp { Div, Mul, Minus, Pow, PlusMinus, } #[derive(Debug)] enum UnOp { Minus, Sqrt, } #[test] fn quadratic_form() { let instrs = vec![ Instr::Load("b"), Instr::UnOp(UnOp::Minus), Instr::Load("b"), Instr::Push(2), Instr::BinOp(BinOp::Pow), Instr::Load("a"), Instr::Load("c"), Instr::Push(4), Instr::BinOp(BinOp::Mul), Instr::BinOp(BinOp::Mul), Instr::BinOp(BinOp::Minus), Instr::UnOp(UnOp::Sqrt), Instr::BinOp(BinOp::PlusMinus), Instr::Load("a"), Instr::Push(2), Instr::BinOp(BinOp::Div), ]; assert_eq!( debug3::pprint(instrs), "\ [ Load(\"b\"), UnOp(Minus), Load(\"b\"), Push(2), BinOp(Pow), Load(\"a\"), Load(\"c\"), Push(4), BinOp(Mul), BinOp(Mul), BinOp(Minus), UnOp(Sqrt), BinOp(PlusMinus), Load(\"a\"), Push(2), BinOp(Div), ]" ); } #[derive(Debug)] enum LinkedList { Empty, Node(T, Box>), } #[test] fn deeply_nested() { let mut list = LinkedList::Empty; for i in 0..1000 { list = LinkedList::Node(i, Box::new(list)); } let x = debug3::pprint(&list); assert_eq!(x, include_str!("./linked_list.txt")) }