Files
@ 8dbdf7022aaf
Branch filter:
Location: CSY/reowolf/src/protocol/tests/parser_monomorphs.rs - annotation
8dbdf7022aaf
2.1 KiB
application/rls-services+xml
Initial union implementation
Still untested, but: make union declaration implicit (so no longer
inferred from 'enum' use), and initial implementation of type
inference.
Still untested, but: make union declaration implicit (so no longer
inferred from 'enum' use), and initial implementation of type
inference.
9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 9774ef9fe888 e406c61b1158 e406c61b1158 e406c61b1158 9774ef9fe888 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 f7c20c8ac012 9774ef9fe888 | /// 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>{ T number }
int instantiator() {
auto a = Number<byte>{ number: 0 };
auto b = Number<byte>{ number: 1 };
auto c = Number<int>{ number: 2 };
auto d = Number<long>{ number: 3 };
auto e = Number<Number<short>>{ 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<short>")
.assert_num_monomorphs(5);
}).for_function("instantiator", |f| { f
.for_variable("a", |v| {v.assert_concrete_type("Number<byte>");} )
.for_variable("e", |v| {v.assert_concrete_type("Number<Number<short>>");} );
});
}
#[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<T> { Yes, No }
int instantiator() {
auto a = Answer<byte>::Yes;
auto b = Answer<byte>::No;
auto c = Answer<int>::Yes;
auto d = Answer<Answer<Answer<long>>>::No;
return 0;
}
"
).for_enum("Answer", |e| { e
.assert_num_monomorphs(3)
.assert_has_monomorph("byte")
.assert_has_monomorph("int")
.assert_has_monomorph("Answer<Answer<long>>");
});
}
|