During the early stage of the Project, at some point I attempted to »attack« the topic of Engine and Render Nodes following a ''top down path.'' This effort went into a dead end eventually — due to the total lack of tangible reference points to relate to. However, the implementation at that time prompted the development of several supporting facilities, which remain relevant until today. And it resulted in a ''free wheeling'' compound of implementation structures, which could even be operated through some highly convoluted unit test. This piece of implementation code was valuable as starting point for th »Playback Vertical Slice« in 2024 — resulting in a new design which was ''re-oriented'' towards a new degree of freedom (the »Domain Ontology«) while handling the configuration and connectivity of Render Nodes in a rather fixed and finite way. This new approach seems to be much more successful, as we're now able to build, connect and invoke Render Nodes, thereby mapping the processing through a functor binding into some arbitrary, external processing function (which will later be supplied by a media processing library — and thus be part of some »Domain Ontology«)
722 lines
22 KiB
Text
722 lines
22 KiB
Text
TESTING "Metaprogramming facilities and techniques" ./test-suite --group=common
|
|
|
|
|
|
|
|
TEST "casting or converting access helper" AccessCasted_test <<END
|
|
out-lit: can_downcast<B,D> = 1
|
|
out-lit: can_downcast<B*,D*> = 1
|
|
out-lit: can_downcast<B&,D&> = 1
|
|
out-lit: can_downcast<B&,D*> = 0
|
|
out-lit: can_downcast<B*,D&> = 0
|
|
out-lit: can_downcast<B*&,D*&> = 1
|
|
out-lit: can_downcast<D*&,D*&> = 1
|
|
out-lit: can_downcast<D*,E*> = 1
|
|
out-lit: can_downcast<E*,F*> = 1
|
|
out-lit: has_RTTI<D*> = 0
|
|
out-lit: has_RTTI<E*> = 1
|
|
out-lit: has_RTTI<F*> = 1
|
|
out-lit: is_convertible<D,D&> = 0
|
|
out-lit: is_convertible<D&,D> = 1
|
|
out-lit: can_use_dynamic_downcast<D,D&> = 0
|
|
out-lit: can_use_conversion<D,D&> = 0
|
|
out-lit: can_use_dynamic_downcast<B*,D*> = 0
|
|
out-lit: can_use_conversion<D*,B*> = 1
|
|
out-lit: can_use_dynamic_downcast<D*&,D*&> = 0
|
|
out-lit: can_use_conversion<D*&,D*&> = 1
|
|
out-lit: can_use_conversion<D*,E*> = 0
|
|
out-lit: can_use_dynamic_downcast<D*&,E*> = 0
|
|
out-lit: can_use_conversion<E*,F*> = 0
|
|
out-lit: can_use_dynamic_downcast<E*,F*> = 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 <<END
|
|
out: HasNested_Core<PropperGander> : Yes
|
|
out: HasNested_Core<Propaganda> : No
|
|
out: HasMember_honk<PropperGander> : Yes
|
|
out: HasMember_honk<Propaganda> : Yes
|
|
out: HasFunSig_honk<PropperGander> : Yes
|
|
out: HasFunSig_honk<Propaganda> : No
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Duck detect extension points" DuckDetectorExtension_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "functional closure" FunctionClosure_test <<END
|
|
out-lit: List1 :-<1>-<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<int>»──(11)
|
|
out-lit: tup2 :«tuple<int, int>»──(11,12)
|
|
out-lit: tup3 :«tuple<int, int, int>»──(11,12,13)
|
|
out-lit: :
|
|
out-lit: : ---Bind----
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "functional composition" FunctionComposition_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "function type erasure" FunctionErasure_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "function signature trait" FunctionSignature_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "member function late binding" LateBindInstance_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "metaprogramming helpers" MetaUtils_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Lumiera Iterator Concept" IterAdapter_test 20 <<END
|
|
out-lit: ::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ++21++22++23++24++25++26++27++28++29++30++31++32++33++34++35++36++37++38++39
|
|
out-lit: ::0::1::2::3::4::5::6::7::8::9::10::11::12::13::14::15::16::17::18::19
|
|
out-lit: ::0::1::2::3::4::5::6::7::8::9::10::11::12::13::14::15::16::17::18::19
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Lumiera Iterator Adapter for STL" IterAdapterSTL_test <<END
|
|
out-lit: -----filter-distinct-values---vector<int>
|
|
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<int, int>
|
|
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<int, int>
|
|
out: iter::eachKey::.::.::.::.::.::.::.::.::.::.
|
|
out: iter::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+
|
|
out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::.
|
|
out-lit: -----iterateMapKeyVal---multimap<int, int>
|
|
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<int, int>
|
|
out: iter::eachKey::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.
|
|
out: iter::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+
|
|
out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::.
|
|
out-lit: -----iterateValues4Key---multimap<int, int>
|
|
out-lit: iter::eachValForKey::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: -----iterateValues4Key---unordered_multimap<int, int>
|
|
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 <<END
|
|
out-lit: ::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ::20::18::16::14::12::10::8::6::4::2
|
|
out-lit: ::19::17::15::13::11::9::7::5::3::1
|
|
out-lit: ::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ::16::14::12::10::8::6::4::2
|
|
out-lit: ::17::15::13::11::9::7::5::3::1
|
|
out-lit: ::12::18::24::30::36::42::48::54
|
|
out-lit: ::13::17::19::23::25::29::31::35::37::41::43::47::49::53::55::59
|
|
out-lit: ::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out-lit: ::-20::-19::-18::-17::-16::-15::-14::-13::-12::-11::-10::-9::-8::-7::-6::-5::-4::-3::-2::-1
|
|
out-lit: ::22::21::20::19::18::17::16::15::14::13::12::11::10::9::8::7::6::5::4::3
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Lumiera state-core iteration" IterCoreAdapter_test 20 <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "forward/backward iterator" IterCursor_test 20 <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "index-based iterator" IndexIter_test 20 <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Iterable data source" IterSource_test 13 <<END
|
|
out: ::13::12::11::10::9::8::7::6::5::4::3::2::1
|
|
out: ::.............::............::...........::..........::.........::........::.......::......::.....::....::...::..::.$
|
|
out-lit: ::3s250ms::3s::2s750ms::2s500ms::2s250ms::2s::1s750ms::1s500ms::1s250ms::1s::750ms::500ms::250ms
|
|
out: (::X...........){13}$
|
|
out: (::.+s){13}$
|
|
out: (::X...........){13}$
|
|
out: (::.+s){13}$
|
|
out: distinct_keys::0::1::2::3::4::5::6::7::8::9::10::11::12
|
|
out: values_4_key(::[0-9]{1,2})+
|
|
out: distinct_keys(::[0-9]{1,2}){13}
|
|
out: values_4_key(::[0-9]{1,2})+
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Iterator tree exploration" IterExplorer_test <<END
|
|
out-lit: 4-3-2-1
|
|
out: Search in random tree: toFind = .....
|
|
out: Protocol of the search: .+\-.+\-.+\-.+\-.+
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Stack-like iterator" IterStack_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Queue-like iterator" IterQueue_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Tuple-zipped iterators" IterZip_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Iterable type detection" IterableClassification_test <<END
|
|
out: can_STL_ForEach<LongVector> : Yes
|
|
out: can_STL_ForEach<TimeSet> : Yes
|
|
out: can_STL_ForEach<CharMap> : Yes
|
|
out: can_STL_ForEach<BoolList> : Yes
|
|
out: can_STL_ForEach<ShortDeque> : Yes
|
|
out: can_STL_ForEach<CustomCont> : Yes
|
|
out: can_STL_ForEach<ForwardRangeIter> : No
|
|
out: can_STL_ForEach<TransformedForwardIter> : No
|
|
out: can_STL_ForEach<FilteredForwardIter> : No
|
|
out: can_STL_ForEach<CustomForwardIter> : No
|
|
out: can_IterForEach<LongVector> : No
|
|
out: can_IterForEach<TimeSet> : No
|
|
out: can_IterForEach<CharMap> : No
|
|
out: can_IterForEach<BoolList> : No
|
|
out: can_IterForEach<ShortDeque> : No
|
|
out: can_IterForEach<CustomCont> : No
|
|
out: can_IterForEach<ForwardRangeIter> : Yes
|
|
out: can_IterForEach<TransformedForwardIter> : Yes
|
|
out: can_IterForEach<FilteredForwardIter> : Yes
|
|
out: can_IterForEach<CustomForwardIter> : Yes
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Linked iterable elements" LinkedElements_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Polymorphic value objects" PolymorphicValue_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Variadic template diagnostics" TestHelperVariadic_test <<END
|
|
out-lit: --no-arg--
|
|
out-lit: :.
|
|
out-lit: --reference--
|
|
out: .+#1.+ Type: double& .+Adr╲.+
|
|
out-lit: :.
|
|
out-lit: --value--
|
|
out: .+#1.+ Type: double && .+Adr╲.+
|
|
out-lit: :.
|
|
out-lit: --two values--
|
|
out: .+#2.+ Type: char \[4\] const& .+Adr╲.+
|
|
out: .+#1.+ Type: long && .+Adr╲.+
|
|
out-lit: :.
|
|
out-lit: --references--
|
|
out: .+#3.+ Type: double& .+Adr╲.+
|
|
out: .+#2.+ Type: double const& .+Adr╲.+
|
|
out: .+#1.+ Type: double && .+Adr╲.+
|
|
out-lit: :.
|
|
out-lit: --baseclass--
|
|
out: .+#1.+ Type: Interface const& .+Adr╲.+
|
|
out-lit: :.
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Helper to show demangled C++ names" TypeDemangling_test <<END
|
|
out: .+lib.meta.test.Space.+Outer.+Inner
|
|
out-lit: lib::meta::test::Space const* (*)(lib::meta::test::Outer<lib::meta::test::Space>::Inner const&&)
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Helper for human readable type display" TypeDisplay_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "TypeList_test" TypeList_test <<END
|
|
out: - 1 -- 2 -- 3 -- 5 -- 8 -- 13 -- The End -
|
|
out: ..Size of = 1
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "simple typelist utils" TypeListUtil_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "TypeListGenerator_test" TypeListGenerator_test <<END
|
|
out: ctor DoIt<Block<13> >
|
|
out: ctor DoIt<Block< 8> >
|
|
out: ctor DoIt<Block< 5> >
|
|
out: ctor DoIt<Block< 3> >
|
|
out: ctor DoIt<Block< 2> >
|
|
out: ctor DoIt<Block< 1> >
|
|
out: devouring__Block< 2>__
|
|
out: devouring__Block< 5>__
|
|
out: devouring__Block<13>__
|
|
out: gulp!
|
|
out: dtor DoIt<Block< 1> >
|
|
out: dtor DoIt<Block< 2> >
|
|
out: dtor DoIt<Block< 3> >
|
|
out: dtor DoIt<Block< 5> >
|
|
out: dtor DoIt<Block< 8> >
|
|
out: dtor DoIt<Block<13> >
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "typelist manipulation" TypeListManip_test <<END
|
|
out-lit: List1 :-<1>-<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<Elm1> :-<3>-
|
|
out-lit: NList :-
|
|
out-lit: Types<Nil> :-
|
|
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 <<END
|
|
out: LL :-<1>-<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 <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "tuple metaprogramming helpers" TupleHelper_test <<END
|
|
out-lit: L1 :-<1>-<3>-<5>-
|
|
out-lit: L2 :-<2>-<4>-
|
|
out-lit: L3 :-<7>-
|
|
out-lit: Tup1 :TUPLE-<1>-<3>-<5>-
|
|
out-lit: Tup1() :«tuple<Num<1>, Num<3>, Num<5> >»──((1),(3),(5))
|
|
out-lit: tup1x :«tuple<Num<1>, 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<1>, Num<3>, Num<5> >»──((1),(3),(5))
|
|
out-lit: Prepend :TUPLE-<i>-<1>-<3>-<5>-
|
|
out-lit: prep :«tuple<int, Num<1>, Num<3>, Num<5> >»──(22,{11},{33},(5))
|
|
out-lit: «tuple<Num<1>, Num<3>, Num<5> >»──((1),(3),(5))
|
|
out-lit: «tuple<int, Num<1>, Num<3>, Num<5> >»──(22,{11},{33},(5))
|
|
out-lit: «tuple<>»──()
|
|
out: sizeof. tuple<Num<1>, Num<3>, Num<5> > . = 12
|
|
out: sizeof. tuple<int, Num<1>, 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 <<END
|
|
out: Rec...GenNode.+DataCap.«string».lalü, GenNode.+DataCap.«int».42
|
|
out: Rec...GenNode.+DataCap.«string».lalü, GenNode.+DataCap.«string».lala, GenNode.+DataCap.«int».12, GenNode.+DataCap.«int».34, GenNode.+DataCap.«double».5.6, GenNode.+DataCap.«Time».0:09:08.007
|
|
out-lit: «tuple<string, int>»──(lalü,42)
|
|
out-lit: «tuple<idi::EntryID<long>, Symbol, int, long, double, Duration>»──(ID<long>-lal,lala,12,34,5.6,≺548s7ms≻)
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "variadic type manipulations" VariadicHelper_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "variadic argument manipulation" VariadicArgumentPicker_test <<END
|
|
out: 4╎N<1>──.─┼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 <<END
|
|
out-lit: Cartesian :
|
|
out-lit: +---<1>-<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 <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "Type-based family member IDs" TypedFamilyMemberID_test <<END
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST "for-each operations" UtilForeach_test 10 <<END
|
|
out: ---:check_foreach_plain
|
|
out: :10:9:8:7:6:5:4:3:2:1
|
|
out: :10$
|
|
out: ---:check_foreach_plain
|
|
out: :10:9:8:7:6:5:4:3:2:1
|
|
out: :10$
|
|
out: ---:check_foreach_bind
|
|
out: :20:19:18:17:16:15:14:13:12:11
|
|
out: :20$
|
|
out: :20:18:16:14:12:10:8:6:4:2
|
|
out: :20$
|
|
out: ---:check_foreach_bind
|
|
out: :20:19:18:17:16:15:14:13:12:11
|
|
out: :20$
|
|
out: :20:18:16:14:12:10:8:6:4:2
|
|
out: :20$
|
|
out: ---:check_foreach_bind_const
|
|
out: :20:19:18:17:16:15:14:13:12:11
|
|
out: :20$
|
|
out: :20:18:16:14:12:10:8:6:4:2
|
|
out: :20$
|
|
out: :20:38:54:68:80:90:98:104:108:110
|
|
out: :130:148:164:178:190:200:208:214:218:220
|
|
out: :240
|
|
out: ---:check_foreach_memFun
|
|
out: :10:19:27:34:40:45:49:52:54:55
|
|
out: :10$
|
|
out: :10:19:27:34:40:45:49:52:54:55
|
|
out: :65:74:82:89:95:100:104:107:109:110
|
|
out: :120
|
|
out: sum=120
|
|
out: ---:check_foreach_memFun
|
|
out: :10:19:27:34:40:45:49:52:54:55
|
|
out: :10$
|
|
out: :10:19:27:34:40:45:49:52:54:55
|
|
out: :65:74:82:89:95:100:104:107:109:110
|
|
out: :120
|
|
out: sum=120
|
|
out: ---:check_foreach_lambda
|
|
out: ---:check_existence_quant
|
|
out: ---:assign_to_input
|
|
out: :20:19:18:17:16:15:14:13:12:11
|
|
out: :30:29:28:27:26:25:24:23:22:21
|
|
out: :40:39:38:37:36:35:34:33:32:31
|
|
out: :50:49:48:47:46:45:44:43:42:41
|
|
out: :60
|
|
out: :70
|
|
out: :80:59:58:57:56:55:54:53:52:51
|
|
out: :90:69:68:67:66:65:64:63:62:61
|
|
out: :100$
|
|
out: ---:assign_to_var
|
|
out: :90:149:207:264:320:375:429:482:534:585
|
|
out: :675:734:792:849:905:960:1014:1067:1119:1170
|
|
out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755
|
|
out: sum=1755
|
|
out: :90:149:207:264:320:375:429:482:534:585
|
|
out: :675:734:792:849:905:960:1014:1067:1119:1170
|
|
out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755
|
|
out: sum=1755
|
|
out: :90
|
|
out: :180
|
|
out: :270
|
|
out: sum=270
|
|
out: ---:assign_to_input
|
|
out: :20:19:18:17:16:15:14:13:12:11
|
|
out: :30:29:28:27:26:25:24:23:22:21
|
|
out: :40:39:38:37:36:35:34:33:32:31
|
|
out: :50:49:48:47:46:45:44:43:42:41
|
|
out: :60
|
|
out: :70
|
|
out: :80:59:58:57:56:55:54:53:52:51
|
|
out: :90:69:68:67:66:65:64:63:62:61
|
|
out: :100$
|
|
out: ---:assign_to_var
|
|
out: :90:149:207:264:320:375:429:482:534:585
|
|
out: :675:734:792:849:905:960:1014:1067:1119:1170
|
|
out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755
|
|
out: sum=1755
|
|
out: :90:149:207:264:320:375:429:482:534:585
|
|
out: :675:734:792:849:905:960:1014:1067:1119:1170
|
|
out: :1260:1319:1377:1434:1490:1545:1599:1652:1704:1755
|
|
out: sum=1755
|
|
out: :90
|
|
out: :180
|
|
out: :270
|
|
out: sum=270
|
|
out: ---:wrapped_container_passing
|
|
out: :10:9:8:7:6:5:4:3:2:1
|
|
out: :-20:-21:-22:-23:-24:-25:-26:-27:-28:-29
|
|
out: ---:check_invoke_on_each
|
|
out: :0:1:2:3:4:5
|
|
out: :0$
|
|
out: :0:1$
|
|
out: :0:1:2:3:4:5
|
|
out: :0$
|
|
out: :0:1$
|
|
return: 0
|
|
END
|
|
|
|
|
|
|
|
TEST "Virtual copying of opaque objects" VirtualCopySupport_test <<END
|
|
return: 0
|
|
END
|
|
|