TESTING "Metaprogramming facilities and techniques" ./test-suite --group=common TEST "casting or converting access helper" AccessCasted_test < = 1 out-lit: can_downcast = 1 out-lit: can_downcast = 1 out-lit: can_downcast = 0 out-lit: can_downcast = 0 out-lit: can_downcast = 1 out-lit: can_downcast = 1 out-lit: can_downcast = 1 out-lit: can_downcast = 1 out-lit: has_RTTI = 0 out-lit: has_RTTI = 1 out-lit: has_RTTI = 1 out-lit: is_convertible = 0 out-lit: is_convertible = 1 out-lit: can_use_dynamic_downcast = 0 out-lit: can_use_conversion = 0 out-lit: can_use_dynamic_downcast = 0 out-lit: can_use_conversion = 1 out-lit: can_use_dynamic_downcast = 0 out-lit: can_use_conversion = 1 out-lit: can_use_conversion = 0 out-lit: can_use_dynamic_downcast = 0 out-lit: can_use_conversion = 0 out-lit: can_use_dynamic_downcast = 1 out-lit: === standard case: References === out: Access\(D as D&\) .+D.. adr=╲\w{8} ↗«D» out: Access\(D& as D&\) .+D.. adr=╲\w{8} ↗«D» out-lit: === build a value object === out: Access.D as D. .+D.. adr=╲\w{8} ↗«D» out: Access.D& as D. .+D.. adr=╲\w{8} ↗«D» out: Access.D&& as D. .+D.. adr=╲\w{8} ↗«D» out-lit: === take a pointer === out: Access.D as D\*. .+╲\w{8} out: Access.D& as D\*. .+╲\w{8} out-lit: === dereference a pointer === out: Access.D\* as D&. .+D.. adr=╲\w{8} ↗«D» out: Access.D\* as D. .+D.. adr=╲\w{8} ↗«D» out: Access.D\*&& as D. .+D.. adr=╲\w{8} ↗«D» out-lit: === const correctness === out: Access.D as D const&. .+D.. adr=╲\w{8} ↗«D» out: Access.D& as D const&. .+D.. adr=╲\w{8} ↗«D» out: Access.D as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.D& as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.D as const D\*. .+╲\w{8} out: Access.D& as const D\*. .+╲\w{8} out: Access.D\* as D const&. .+D.. adr=╲\w{8} ↗«D» out: Access.D\* as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.const D as D const&. .+D.. adr=╲\w{8} ↗«D» out: Access.D const& as D const&. .+D.. adr=╲\w{8} ↗«D» out: Access.const D as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.D const& as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.const D as const D\*..+╲\w{8} out: Access.D const& as const D\*..+╲\w{8} out: Access.const D\* as D const&..+D.. adr=╲\w{8} ↗«D» out: Access.const D\* as const D. .+D.. adr=╲\w{8} ↗«D» out: Access.D const& as D. .+D.. adr=╲\w{8} ↗«D» out: Access.D const&& as D. .+D.. adr=╲\w{8} ↗«D» out-lit: === work cases: actual conversions === out: Access.B& as B&. .+B.. adr=╲\w{8} ↗«B» out: Access.D& as B&. .+B.. adr=╲\w{8} ↗«B» out: Access.B\* as B\*. .+╲\w{8} out: Access.D\* as B\*. .+╲\w{8} out: Access.D& as B\*. .+╲\w{8} out: Access.D\* as B&. .+B.. adr=╲\w{8} ↗«B» out: Access.B\*& as B\*&. .+╲\w{8} out: Access.D\*& as D\*&. .+╲\w{8} out: Access.D& as const B\*. .+╲\w{8} out: Access.D\* as B const&. .+B.. adr=╲\w{8} ↗«B» out: Access.D const& as const B\*..+╲\w{8} out: Access.const D\* as B const&..+B.. adr=╲\w{8} ↗«B» out: Access.E\(F\)& as F&. .+F.. adr=╲\w{8} ↗«F» out: Access.E\(F\)\* as F\*. .+╲\w{8} out: Access.E\(F\)\* as F&. .+F.. adr=╲\w{8} ↗«F» out: Access.E\(F\)& as F\*. .+╲\w{8} out: Access.F\\* as X\*. .+╲\w{8} out: Access.X\(F\)\* as X\*. .+╲\w{8} out: Access.F\* as B&. .+B.. adr=╲\w{8} ↗«B» out: Access.F\* as E&*. .+E.. adr=╲\w{8} ↗«F» out-lit: Access(int as double) --->2 out-lit: Access(float as long) --->3 return: 0 END TEST "Duck typing support" DuckDetector_test < : Yes out: HasNested_Core : No out: HasMember_honk : Yes out: HasMember_honk : Yes out: HasFunSig_honk : Yes out: HasFunSig_honk : No return: 0 END TEST "Duck detect extension points" DuckDetectorExtension_test <-<2>-<3>- out-lit: List2 :-<5>-<6>-<7>- out-lit: Args :-<5>-<9>- out-lit: NewArgs :-<1>-<5>-<9>- out-lit: : out-lit: : ---Apply--- out-lit: tup0 :«tuple<>»──() out-lit: tup1 :«tuple»──(11) out-lit: tup2 :«tuple»──(11,12) out-lit: tup3 :«tuple»──(11,12,13) out-lit: : out-lit: : ---Bind---- return: 0 END TEST "functional composition" FunctionComposition_test < out-lit: iter::eachDistinct out-lit: iter::eachDistinct::1 out-lit: iter::eachDistinct::1::2::3::1 out-lit: iter::eachDistinct::1::2::3::1 out-lit: -----iterateMapKeyVal---map out-lit: iter::eachKey::0::1::2::3::4::5::6::7::8::9 out-lit: iter::eachKey::0::1::2::3::4::5::6::7::8::9 out-lit: iter::eachVal::0::2::4::6::8::10::12::14::16::18 out-lit: iter::eachVal::0::2::4::6::8::10::12::14::16::18 out-lit: iter::eachDistinctKey::0::1::2::3::4::5::6::7::8::9 out-lit: -----iterateMapKeyVal---unordered_map out: iter::eachKey::.::.::.::.::.::.::.::.::.::. out: iter::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+ out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::. out-lit: -----iterateMapKeyVal---multimap out-lit: iter::eachKey::0::0::0::0::0::0::0::0::0::0::1::1::1::1::1::1::1::1::1::2::2::2::2::2::2::2::2::3::3::3::3::3::3::3::4::4::4::4::4::4::5::5::5::5::5::6::6::6::6::7::7::7::8::8::9 out-lit: iter::eachKey::0::0::0::0::0::0::0::0::0::0::1::1::1::1::1::1::1::1::1::2::2::2::2::2::2::2::2::3::3::3::3::3::3::3::4::4::4::4::4::4::5::5::5::5::5::6::6::6::6::7::7::7::8::8::9 out-lit: iter::eachVal::10::9::8::7::6::5::4::3::2::1::9::8::7::6::5::4::3::2::1::8::7::6::5::4::3::2::1::7::6::5::4::3::2::1::6::5::4::3::2::1::5::4::3::2::1::4::3::2::1::3::2::1::2::1::1 out-lit: iter::eachVal::10::9::8::7::6::5::4::3::2::1::9::8::7::6::5::4::3::2::1::8::7::6::5::4::3::2::1::7::6::5::4::3::2::1::6::5::4::3::2::1::5::4::3::2::1::4::3::2::1::3::2::1::2::1::1 out-lit: iter::eachDistinctKey::0::1::2::3::4::5::6::7::8::9 out-lit: -----iterateMapKeyVal---unordered_multimap out: iter::eachKey::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::. out: iter::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+ out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::. out-lit: -----iterateValues4Key---multimap out-lit: iter::eachValForKey::10::9::8::7::6::5::4::3::2::1 out-lit: -----iterateValues4Key---unordered_multimap out: iter::eachValForKey::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+ out-lit: snapshot-0-1-2-3-4-5-6-7-8-9 out-lit: snapshot-0-1-2-3-4-5-6-7-8-9 out-lit: snapshot-22-44 return: 0 END TEST "Lumiera Iterator Tools" IterTools_test 20 < : Yes out: can_STL_ForEach : Yes out: can_STL_ForEach : Yes out: can_STL_ForEach : Yes out: can_STL_ForEach : Yes out: can_STL_ForEach : Yes out: can_STL_ForEach : No out: can_STL_ForEach : No out: can_STL_ForEach : No out: can_STL_ForEach : No out: can_IterForEach : No out: can_IterForEach : No out: can_IterForEach : No out: can_IterForEach : No out: can_IterForEach : No out: can_IterForEach : No out: can_IterForEach : Yes out: can_IterForEach : Yes out: can_IterForEach : Yes out: can_IterForEach : Yes return: 0 END TEST "Linked iterable elements" LinkedElements_test <::Inner const&&) return: 0 END TEST "Helper for human readable type display" TypeDisplay_test < > out: ctor DoIt > out: ctor DoIt > out: ctor DoIt > out: ctor DoIt > out: ctor DoIt > out: devouring__Block< 2>__ out: devouring__Block< 5>__ out: devouring__Block<13>__ out: gulp! out: dtor DoIt > out: dtor DoIt > out: dtor DoIt > out: dtor DoIt > out: dtor DoIt > out: dtor DoIt > return: 0 END TEST "typelist manipulation" TypeListManip_test <-<2>-<3>- out-lit: List2 :-<5>-<6>-<7>- out-lit: Added2 :-<3>-<4>-<5>- out-lit: FilterEven :-<2>-<6>- out-lit: Append1 :- out-lit: Append2 :-<11>-<22>- out-lit: Append3 :-<111>- out-lit: Append4 :-<222>- out-lit: Append5 :-<1>-<2>-<3>- out-lit: Append6 :-<5>-<6>-<7>- out-lit: Append7 :-<111>-<5>-<6>-<7>- out-lit: Append8 :-<1>-<2>-<3>-<222>- out-lit: Append9 :-<1>-<2>-<3>-<5>-<6>-<7>- out-lit: Overl01 :- out-lit: Overl02 :- out-lit: Overl03 :- out-lit: Overl04 :-<9>-<8>-<3>- out-lit: Overl05 :-<1>-<9>-<8>- out-lit: Overl06 :-<1>-<2>-<9>- out-lit: Overl07 :-<1>-<2>-<3>- out-lit: Overl08 :-<1>-<2>-<3>- out-lit: Overl09 :-<1>-<2>-<3>- out-lit: Overl10 :-<1>-<1>-<2>- out-lit: Overl11 :-<1>-<2>-<3>- out-lit: Overl12 :-<1>-<2>-<3>- out-lit: Overl13 :-<1>-<2>-<3>- out-lit: Front1 :- out-lit: Front2 :-<1>- out-lit: Front3 :-<1>-<2>-<3>- out-lit: Back1 :-<2>-<3>- out-lit: Back2 :-<3>- out-lit: Back3 :- out-lit: Front4 :-<1>- out-lit: Back4 :-<2>-<3>- out-lit: Prefix :-<1>-<2>- out-lit: ElmL :-<3>- out-lit: NPrefix :- out-lit: Types :-<3>- out-lit: NList :- out-lit: Types :- out-lit: LL :-<1>-<2>-<3>-<5>-<6>-<7>- out-lit: List :-<1>-<2>-<3>-<5>-<6>-<7>- out-lit: First :-<1>- out-lit: Tail :-<2>-<3>-<5>-<6>-<7>- out-lit: Prefix :-<1>-<2>-<3>-<5>-<6>- out-lit: Last :-<7>- out-lit: HeadEnd :-<1>-<7>- out-lit: Prefix1 : out-lit: +---<11>-<22>-+- out-lit: Prefix2 : out-lit: +---<101>-<1>-+ out-lit: +---<101>-<2>-+ out-lit: +---<101>-<3>-+- out-lit: Prefix3 : out-lit: +---<1>-+ out-lit: +---<2>-+ out-lit: +---<3>-+- out-lit: Prefix4 : out-lit: +---<111>-<1>-<2>-<3>-+ out-lit: +---<111>-<0>-+ out-lit: +---<111>-<5>-<6>-<7>-+- out-lit: Prefix5 : out-lit: +---<1>-<2>-<3>-<5>-+ out-lit: +---<1>-<2>-<3>-<6>-+ out-lit: +---<1>-<2>-<3>-<7>-+- out-lit: Prefix6 : out-lit: +---<1>-<2>-<3>-<1>-<2>-<3>-+ out-lit: +---<1>-<2>-<3>-<0>-+ out-lit: +---<1>-<2>-<3>-<5>-<6>-<7>-+- out-lit: Dist1 : out-lit: +---<11>-<1>-+ out-lit: +---<11>-<2>-+ out-lit: +---<11>-<3>-+- out-lit: Dist2 : out-lit: +---<11>-<0>-+ out-lit: +---<22>-<0>-+ out-lit: +---<33>-<0>-+- out-lit: Dist3 : out-lit: +---<11>-<1>-+ out-lit: +---<11>-<2>-+ out-lit: +---<11>-<3>-+ out-lit: +---<22>-<1>-+ out-lit: +---<22>-<2>-+ out-lit: +---<22>-<3>-+ out-lit: +---<33>-<1>-+ out-lit: +---<33>-<2>-+ out-lit: +---<33>-<3>-+- out-lit: Dist4 : out-lit: +---<11>-<1>-<2>-<3>-+ out-lit: +---<11>-<5>-<6>-<7>-+ out-lit: +---<22>-<1>-<2>-<3>-+ out-lit: +---<22>-<5>-<6>-<7>-+ out-lit: +---<33>-<1>-<2>-<3>-+ out-lit: +---<33>-<5>-<6>-<7>-+- out-lit: Down :-<11>-<10>-<9>-<8>-<7>-<6>-<5>-<4>-<3>-<2>-<1>-<0>- out-lit: Combi : out-lit: +---<1>-<2>-<3>-<·>-+ out-lit: +---<1>-<2>-<2>-<·>-+ out-lit: +---<1>-<2>-<1>-<·>-+ out-lit: +---<1>-<2>-<0>-<·>-+ out-lit: +---<1>-<1>-<3>-<·>-+ out-lit: +---<1>-<1>-<2>-<·>-+ out-lit: +---<1>-<1>-<1>-<·>-+ out-lit: +---<1>-<1>-<0>-<·>-+ out-lit: +---<1>-<0>-<3>-<·>-+ out-lit: +---<1>-<0>-<2>-<·>-+ out-lit: +---<1>-<0>-<1>-<·>-+ out-lit: +---<1>-<0>-<0>-<·>-+ out-lit: +---<0>-<2>-<3>-<·>-+ out-lit: +---<0>-<2>-<2>-<·>-+ out-lit: +---<0>-<2>-<1>-<·>-+ out-lit: +---<0>-<2>-<0>-<·>-+ out-lit: +---<0>-<1>-<3>-<·>-+ out-lit: +---<0>-<1>-<2>-<·>-+ out-lit: +---<0>-<1>-<1>-<·>-+ out-lit: +---<0>-<1>-<0>-<·>-+ out-lit: +---<0>-<0>-<3>-<·>-+ out-lit: +---<0>-<0>-<2>-<·>-+ out-lit: +---<0>-<0>-<1>-<·>-+ out-lit: +---<0>-<0>-<0>-<·>-+- out-lit: OnOff : out-lit: +---<1>-<2>-<3>-<·>-+ out-lit: +---<1>-<2>-<·>-+ out-lit: +---<1>-<3>-<·>-+ out-lit: +---<1>-<·>-+ out-lit: +---<2>-<3>-<·>-+ out-lit: +---<2>-<·>-+ out-lit: +---<3>-<·>-+ out-lit: +---<·>-+- return: 0 END TEST "type sequence manipulation" TypeSeqManipl_test <-<2>-<3>-<7>-<8>-<9>- out: Seq :-<1>-<2>-<3>-<7>-<8>-<9>- out: SeqList :-<1>-<2>-<3>-<7>-<8>-<9>- out: NulS :- out: Prepend1 :-<5>-<1>-<2>-<3>- out: Prepend2 :-<·>-<1>-<2>-<3>- out: Prepend3 :-<5>- out: Prepend4 :- out: Seq_0 :-<7>-<8>-<9>-<1>-<2>-<3>- out: Seq_1 :-<8>-<9>-<1>-<2>-<3>- out: Seq_2 :-<9>-<1>-<2>-<3>- out: Seq_3 :-<1>-<2>-<3>- out: Seq_4 :-<2>-<3>- out: Seq_5 :-<3>- out: Seq_6 :- out: Head_0 :-<7>- out: Head_1 :-<8>- out: Head_2 :-<9>- out: Head_3 :-<1>- out: Head_4 :-<2>- out: Head_5 :-<3>- out: Head_6 :- out: Seq :-<1>-<2>-<3>-<7>-<8>-<9>- out: List :-<1>-<2>-<3>-<7>-<8>-<9>- out: First :-<1>- out: Tail :-<2>-<3>-<7>-<8>-<9>- out: Prefix :-<1>-<2>-<3>-<7>-<8>- out: Last :-<9>- out: HeadEnd :-<1>-<9>- return: 0 END TEST "tuple value pre-binding closure" TupleClosure_test <-<3>-<5>- out-lit: L2 :-<2>-<4>- out-lit: L3 :-<7>- out-lit: Tup1 :TUPLE-<1>-<3>-<5>- out-lit: Tup1() :«tuple, Num<3>, Num<5> >»──((1),(3),(5)) out-lit: tup1x :«tuple, Num<3>, Num<5> >»──({11},(3),{55}) out-lit: T_L1 :TUPLE-<1>-<3>-<5>- out-lit: Seq1 :-<1>-<3>-<5>- out-lit: tup1 :«tuple, Num<3>, Num<5> >»──((1),(3),(5)) out-lit: Prepend :TUPLE--<1>-<3>-<5>- out-lit: prep :«tuple, Num<3>, Num<5> >»──(22,{11},{33},(5)) out-lit: «tuple, Num<3>, Num<5> >»──((1),(3),(5)) out-lit: «tuple, Num<3>, Num<5> >»──(22,{11},{33},(5)) out-lit: «tuple<>»──() out: sizeof. tuple, Num<3>, Num<5> > . = 12 out: sizeof. tuple, Num<3>, Num<5> > . = 16 out-lit: sizeof( tuple<> ) = 1 out-lit: sizeof( tuple<> ) = 1 return: 0 END TEST "tuple initialisation from GenNode" TupleRecordInit_test <»──(lalü,42) out-lit: «tuple, Symbol, int, long, double, Duration>»──(ID-lal,lala,12,34,5.6,≺548s7ms≻) return: 0 END TEST "variadic type manipulations" VariadicHelper_test <──.─┼N<2>──.─┼N<3>──.─┼N<3>──.─┤ out: 4╎N<0>──.─┼N<1>──.─┼N<2>──.─┼N<3>──.─┤ out: 4╎N<3>──.─┼N<2>──.─┼N<1>──.─┼N<0>──.─┤ out: 2╎N<1>──.─┼N<0>──.─┤ out: 2╎N<2>──.─┼N<3>──.─┤ return: 0 END TEST "Typelist combinations generator" GeneratorCombinations_test <-<2>-+ out-lit: +---<1>-<4>-+ out-lit: +---<1>-<6>-+ out-lit: +---<3>-<2>-+ out-lit: +---<3>-<4>-+ out-lit: +---<3>-<6>-+ out-lit: +---<5>-<2>-+ out-lit: +---<5>-<4>-+ out-lit: +---<5>-<6>-+- out-lit: All-Test-Combinations--<12>-<14>-<16>-<32>-<34>-<36>-<52>-<54>-<56>-| return: 0 END TEST "Type-based contexts" TypedCounter_test <