several extensions and convenience features are conceivable, but I'll postpone all of them for later, when actual need arises Note especially there is one recurring design challenge, when creating such a demand-driven tree evaluation: more often than not it turns out that "downstream" will need some information about the nested tree structure, even while, on the surfice, it looks as if the evaluation could be working completely "linearised". Often, such a need arises from diagnostic features, and sometimes we want to invoke another API, which in turn could benefit from knowing something about the original tree structure, even if just abstracted. I have no real solution for this problem, but implementing this pipeline builder leads to a pragmatic workaround: since the iterator already exposes a expandChildren(), it may as well expose a depth() call, even while keeping anything beyond that opaque. This is not the clean solution you'd like, but it comes without any overhead and does not really break the abstraction.
722 lines
22 KiB
Text
722 lines
22 KiB
Text
TESTING "Metaprogramming facilities and techniques" ./test-suite --group=common
|
|
|
|
|
|
|
|
TEST "ConfigFlags_test" ConfigFlags_test <<END
|
|
out-lit: Conf0 :-
|
|
out-lit: Conf1 :-<1>-
|
|
out-lit: Conf2 :-<2>-
|
|
out-lit: Conf3 :-<3>-
|
|
out-lit: Conf4 :-<2>-<4>-
|
|
out-lit: AllFlags :-<1>-<2>-<3>-<4>-
|
|
out-lit: __________________________
|
|
out-lit: __________________________ check_flags()
|
|
out-lit: Flags1 :-<2>-<4>-
|
|
out-lit: Flags2 :-<2>-<4>-
|
|
out-lit: SimpleConfig_defined_by_Typelist :-<1>-
|
|
out-lit: AnotherConfig_defined_by_Typelist :-<1>-<2>-<3>-<4>-
|
|
out-lit: __________________________
|
|
out-lit: __________________________ check_instantiation()
|
|
out-lit: defined Conf0? ---> 0
|
|
out-lit: defined Conf1? ---> 1
|
|
out-lit: defined Conf2? ---> 1
|
|
out-lit: defined Conf3? ---> 1
|
|
out-lit: defined Conf4? ---> 1
|
|
out-lit: defined Trash? ---> 0
|
|
out-lit: __________________________
|
|
out-lit: __________________________ check_filter()
|
|
out-lit: SomeFlagsets :
|
|
out-lit: +---<1>-<3>-+
|
|
out-lit: +---<2>-<4>-+-
|
|
out-lit: Configs_defined_by_Flagsets :
|
|
out-lit: +-Conf-[-<1>-<3>-]
|
|
out-lit: +-Conf-[-<2>-<4>-]-
|
|
out-lit: Filter_possible_Configs :
|
|
out-lit: +-Conf-[-<2>-<4>-]-
|
|
out-lit: AllFlagCombinations :
|
|
out-lit: +---<1>-<2>-<3>-<4>-<·>-+
|
|
out-lit: +---<1>-<2>-<3>-<·>-+
|
|
out-lit: +---<1>-<2>-<4>-<·>-+
|
|
out-lit: +---<1>-<2>-<·>-+
|
|
out-lit: +---<1>-<3>-<4>-<·>-+
|
|
out-lit: +---<1>-<3>-<·>-+
|
|
out-lit: +---<1>-<4>-<·>-+
|
|
out-lit: +---<1>-<·>-+
|
|
out-lit: +---<2>-<3>-<4>-<·>-+
|
|
out-lit: +---<2>-<3>-<·>-+
|
|
out-lit: +---<2>-<4>-<·>-+
|
|
out-lit: +---<2>-<·>-+
|
|
out-lit: +---<3>-<4>-<·>-+
|
|
out-lit: +---<3>-<·>-+
|
|
out-lit: +---<4>-<·>-+
|
|
out-lit: +---<·>-+-
|
|
out-lit: ListAllConfigs :
|
|
out-lit: +-Conf-[-<1>-<2>-<3>-<4>-]
|
|
out-lit: +-Conf-[-<1>-<2>-<3>-]
|
|
out-lit: +-Conf-[-<1>-<2>-<4>-]
|
|
out-lit: +-Conf-[-<1>-<2>-]
|
|
out-lit: +-Conf-[-<1>-<3>-<4>-]
|
|
out-lit: +-Conf-[-<1>-<3>-]
|
|
out-lit: +-Conf-[-<1>-<4>-]
|
|
out-lit: +-Conf-[-<1>-]
|
|
out-lit: +-Conf-[-<2>-<3>-<4>-]
|
|
out-lit: +-Conf-[-<2>-<3>-]
|
|
out-lit: +-Conf-[-<2>-<4>-]
|
|
out-lit: +-Conf-[-<2>-]
|
|
out-lit: +-Conf-[-<3>-<4>-]
|
|
out-lit: +-Conf-[-<3>-]
|
|
out-lit: +-Conf-[-<4>-]
|
|
out-lit: +-Conf-[-]-
|
|
out-lit: Filter_all_possible_Configs :
|
|
out-lit: +-Conf-[-<1>-]
|
|
out-lit: +-Conf-[-<2>-<3>-]
|
|
out-lit: +-Conf-[-<2>-<4>-]
|
|
out-lit: +-Conf-[-<2>-]
|
|
out-lit: +-Conf-[-<3>-]-
|
|
out-lit: __________________________
|
|
out-lit: __________________________ check_FlagInfo()
|
|
out-lit: Flags1 :-<1>-<3>-
|
|
out-lit: max bit : 3
|
|
out-lit: binary code: 10
|
|
out-lit: SomeConfigs :
|
|
out-lit: +-Conf-[-<1>-<3>-]
|
|
out-lit: +-Conf-[-<2>-<4>-]-
|
|
out-lit: max bit in [SomeConfigs] : 4
|
|
out-lit: TestVisitor application:
|
|
out-lit: visit(code=10) -->
|
|
out-lit: +-Conf-[-<1>-<3>-]-
|
|
out-lit: visit(code=20) -->
|
|
out-lit: +-Conf-[-<2>-<4>-]-
|
|
out-lit: __________________________
|
|
out-lit: __________________________ check_ConfigSelector()
|
|
out-lit: Possible_Configs :
|
|
out-lit: +-Conf-[-<1>-]
|
|
out-lit: +-Conf-[-<2>-<3>-]
|
|
out-lit: +-Conf-[-<2>-<4>-]
|
|
out-lit: +-Conf-[-<2>-]
|
|
out-lit: +-Conf-[-<3>-]-
|
|
out-lit: Flag-code = 2 ConfigSelector() ---> 1010
|
|
out-lit: Flag-code = 12 ConfigSelector() ---> 1023
|
|
out-lit: Flag-code = 20 ConfigSelector() ---> 1024
|
|
out-lit: Flag-code = 4 ConfigSelector() ---> 1020
|
|
out-lit: Flag-code = 8 ConfigSelector() ---> 1030
|
|
out: LUMIERA_ERROR_INVALID:invalid input or parameters.+No preconfigured factory for config-bits=10111
|
|
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 "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 "forward/backward iterator" IterCursor_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 monad variations (1st draft)" IterExplorer_test <<END
|
|
out-lit: 1-2-3-4-5-6-7-8
|
|
out-lit: 0-1-2-3-4-0-1-2-3-4-5-6-0-1-2-3-4-5-6-7-8
|
|
out-lit: 0-1-2-3-4-5-6-7-8
|
|
out-lit: 0-1-2-3-4-5-6-7-8
|
|
return: 0
|
|
END
|
|
|
|
|
|
TEST: "Iterator monad variations (2nd draft)" IterTreeExplorer_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 "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: --value--
|
|
out: .+#1.+ Type: double VAL Address. 0x.+
|
|
out-lit: :.
|
|
out-lit: --reference--
|
|
out: .+#1.+ Type: double REF Address. 0x.+
|
|
out-lit: :.
|
|
out-lit: --move--
|
|
out: .+#1.+ Type: double MOV Address. 0x.+
|
|
out-lit: :.
|
|
out-lit: --two values--
|
|
out: .+#2.+ Type: char REF Address. 0x.+
|
|
out: .+#1.+ Type: long MOV Address. 0x.+
|
|
out-lit: :.
|
|
out-lit: --matched--
|
|
out: .+#3.+ Type: double REF Address. 0x.+
|
|
out: .+#2.+ Type: double REF Address. 0x.+
|
|
out: .+#1.+ Type: double MOV Address. 0x.+
|
|
out-lit: :.
|
|
out-lit: --baseclass--
|
|
out: .+#1.+ Type: Impl REF Address. 0x.+
|
|
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 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 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
|
|
|