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: : ---Bind---- out-lit: tup0 :«tuple<>»──() out-lit: tup1 :«tuple»──(11) out-lit: tup2 :«tuple»──(11,12) out-lit: tup3 :«tuple»──(11,12,13) 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>- return: 0 END TEST "type sequence manipulation" TypeSeqManip_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: «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 <