/// parser_monomorphs.rs /// /// Simple tests to make sure that all of the appropriate monomorphs are /// instantiated use super::*; #[test] fn test_struct_monomorphs() { Tester::new_single_source_expect_ok( "no polymorph", "struct Integer{ int field }" ).for_struct("Integer", |s| { s .assert_num_monomorphs(0); }); Tester::new_single_source_expect_ok( "single polymorph", " struct Number{ T number } int instantiator() { auto a = Number{ number: 0 }; auto b = Number{ number: 1 }; auto c = Number{ number: 2 }; auto d = Number{ number: 3 }; auto e = Number>{ number: Number{ number: 4 }}; return 0; } " ).for_struct("Number", |s| { s .assert_has_monomorph("byte") .assert_has_monomorph("short") .assert_has_monomorph("int") .assert_has_monomorph("long") .assert_has_monomorph("Number") .assert_num_monomorphs(5); }).for_function("instantiator", |f| { f .for_variable("a", |v| {v.assert_concrete_type("Number");} ) .for_variable("e", |v| {v.assert_concrete_type("Number>");} ); }); } #[test] fn test_enum_monomorphs() { Tester::new_single_source_expect_ok( "no polymorph", " enum Answer{ Yes, No } int do_it() { auto a = Answer::Yes; return 0; } " ).for_enum("Answer", |e| { e .assert_num_monomorphs(0); }); Tester::new_single_source_expect_ok( "single polymorph", " enum Answer { Yes, No } int instantiator() { auto a = Answer::Yes; auto b = Answer::No; auto c = Answer::Yes; auto d = Answer>>::No; return 0; } " ).for_enum("Answer", |e| { e .assert_num_monomorphs(3) .assert_has_monomorph("byte") .assert_has_monomorph("int") .assert_has_monomorph("Answer>"); }); }