TESTING "Library Test Suite: basic and low-level components" ./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: === standard case: References ===
out: Access\(D  as D&\)    .+D.. adr=0x.+ type: D
out: Access\(D& as D&\)    .+D.. adr=0x.+ type: D
out-lit: === build a value object ===
out: Access.D  as D.     .+D.. adr=0x.+ type: D
out: Access.D& as D.     .+D.. adr=0x.+ type: D
out: Access.D&& as D.    .+D.. adr=0x.+ type: D
out-lit: === take a pointer ===
out: Access.D  as D\*.    .+0x.+
out: Access.D& as D\*.    .+0x.+
out-lit: === dereference a pointer ===
out: Access.D\* as D&.    .+D.. adr=0x.+ type: D
out: Access.D\* as D.     .+D.. adr=0x.+ type: D
out: Access.D\*&& as D.   .+D.. adr=0x.+ type: D
out-lit: === const correctness ===
out: Access.D  as D const&. .+D.. adr=0x.+ type: D
out: Access.D& as D const&. .+D.. adr=0x.+ type: D
out: Access.D  as const D.  .+D.. adr=0x.+ type: D
out: Access.D& as const D.  .+D.. adr=0x.+ type: D
out: Access.D  as const D\*. .+0x.+
out: Access.D& as const D\*. .+0x.+
out: Access.D\* as D const&. .+D.. adr=0x.+ type: D
out: Access.D\* as const D.  .+D.. adr=0x.+ type: D
out: Access.const D  as D const&. .+D.. adr=0x.+ type: D
out: Access.D const& as D const&. .+D.. adr=0x.+ type: D
out: Access.const D  as const D.  .+D.. adr=0x.+ type: D
out: Access.D const& as const D.  .+D.. adr=0x.+ type: D
out: Access.const D  as const D\*. .+0x.+
out: Access.D const& as const D\*. .+0x.+
out: Access.const D\* as D const&. .+D.. adr=0x.+ type: D
out: Access.const D\* as const D.  .+D.. adr=0x.+ type: D
out: Access.D const& as D.        .+D.. adr=0x.+ type: D
out: Access.D const&& as D.       .+D.. adr=0x.+ type: D
out-lit: === work cases: actual conversions ===
out: Access.B& as B&.    .+B.. adr=0x.+ type: B
out: Access.D& as B&.    .+B.. adr=0x.+ type: B
out: Access.B\* as B\*.    .+0x.+
out: Access.D\* as B\*.    .+0x.+
out: Access.D& as B\*.    .+0x.+
out: Access.D\* as B&.    .+B.. adr=0x.+ type: B
out: Access.B\*& as B\*&.  .+0x.+
out: Access.D\*& as D\*&.  .+0x.+
out: Access.D& as const B\*.       .+0x.+
out: Access.D\* as B const&.       .+B.. adr=0x.+ type: B
out: Access.D const& as const B\*. .+0x.+
out: Access.const D\* as B const&. .+B.. adr=0x.+ type: B
out: Access.E\(F\)& as F&. .+F.. adr=0x.+ type: F
out: Access.E\(F\)\* as F\*. .+0x.+
out: Access.E\(F\)\* as F&. .+F.. adr=0x.+ type: F
out: Access.E\(F\)& as F\*. .+0x.+
out: Access.F\\* as X\*.    .+0x.+
out: Access.X\(F\)\* as X\*. .+0x.+
out: Access.F\* as B\*.    .+0x.+
out-lit: Access(int as double) --->2
out-lit: Access(float as long) --->3
END


TEST "CmdlineWrapper_test" CmdlineWrapper_test <<END
out-lit: wrapping cmdline:...
out-lit: -->
out-lit: wrapping cmdline:
out-lit: 	 ...
out-lit: -->
out-lit: wrapping cmdline:spam...
out-lit: 0|spam|
out-lit: -->spam
out-lit: wrapping cmdline:
out-lit: spam...
out-lit: 0|spam|
out-lit: -->spam
out-lit: wrapping cmdline:eat more spam...
out-lit: 0|eat|
out-lit: 1|more|
out-lit: 2|spam|
out-lit: -->eat more spam
out-lit: wrapping cmdline: oo _O()O_  ☭ + €...
out-lit: 0|oo|
out-lit: 1|_O()O_|
out-lit: 2|☭|
out-lit: 3|+|
out-lit: 4|€|
out-lit: -->oo _O()O_ ☭ + €
out-lit: wrapping cmdline:Ω	ooΩ	oΩo	Ωoo...
out-lit: 0|Ω|
out-lit: 1|ooΩ|
out-lit: 2|oΩo|
out-lit: 3|Ωoo|
out-lit: -->Ω ooΩ oΩo Ωoo
out-lit: Standard Cmdlineformat:one  two
END


TEST "CustomSharedPtr_test" CustomSharedPtr_test <<END
return: 0
END


TEST "Deleter function collection" DelStash_test <<END
return: 0
END


TEST "Dependency injection" DependencyFactory_test <<END
out-lit: ctor TargetObj(0) successful
out-lit: ctor TargetObj(1) successful
out-lit: ctor TargetObj(2) successful
out-lit: ctor TargetObj(3) successful
out-lit: dtor ~TargetObj(3) successful
out-lit: ctor TargetObj(4) successful
out-lit: dtor ~TargetObj(4) successful
out-lit: dtor ~TargetObj(2) successful
out-lit: dtor ~TargetObj(1) successful
out-lit: dtor ~TargetObj(0) successful
return: 0
END


TEST "Diff: apply list diff to target sequence" DiffListApplication_test <<END
return: 0
END


TEST "Diff: compare sequences to generate list diff" DiffListGeneration_test <<END
return: 0
END


TEST "Diff: lookup table helper" DiffIndexTable_test <<END
return: 0
END


TEST "A Digxel (numeric component)" Digxel_test <<END
out-lit: empty____## +0.0 ##
out-lit: value____##-88.8 ##
out: timings\(\w+\)....*ns
return: 0
END


TEST "Digxel standard configurations" DigxelConfigurations_test <<END
out: .+Digxel.+Formatter.+--empty--  0--\(val=123\)--123\|
out: .+Digxel.+Formatter.+--empty--00.000--\(val=123.457\)--123.457
out: .+Digxel.+SexaFormatter.+--empty--00--\(val=42\)--42
out: .+Digxel.+SexaFormatter.+--empty--00--\(val=-5\)---5
out: .+Digxel.+HexaFormatter.+--empty--00--\(val=12\)--0C
out: .+Digxel.+HexaFormatter.+--empty--00--\(val=111\)--6F
out: .+Digxel.+CountFormatter.+--empty--0000--\(val=-1234567890\)---1234567890
return: 0
END


TEST "formatting/diagnostics helpers" FormatHelper_test <<END
out: Displaying some types....
out: «util::test::Reticent»
out: <no comment>
out: ^hey Joe!
out: ^he says: hey Joe!
out: ^the truth: 0
out: ^just a number: 1.234.*e\+56
out: ^12345X
out: 0.+1.1.+2.2.+3.3.+4.4.+5.5.+6.6.+7.7.+8.8.+\-\-\+\-\-9.9
out-lit: Nr.01(0.0), Nr.02(2.2), Nr.03(4.4), Nr.04(6.6), Nr.05(8.8), Nr.06(11.0), Nr.07(13.2), Nr.08(15.4), Nr.09(17.6), Nr.10(19.8)
return: 0
END


TEST "formatting by string template" FormatString_test <<END
out-lit: --format-template--int=0012--double=+1.23--string=Lumiera  --
out: 0x....+ _____+ .
out: «.+util.+test.+Silent.»
out-lit: __nix_
out-lit: ____
out-lit: __1__
out-lit: __1__
out-lit: __↯__
out-lit: __dirt__
out-lit: __1234__
out-lit: __0xff__
return: 0
END


PLANNED "GenNodeBasic_test" GenNodeBasic_test <<END
return: 0
END


PLANNED "GenericRecordRepresentation_test" GenericRecordRepresentation_test <<END
return: 0
END


PLANNED "GenericTreeRepresentation_test" GenericTreeRepresentation_test <<END
return: 0
END


TEST "Generic recursive mutation with closure binding" GenericTreeMutator_test <<END
out: concrete TreeMutator .+Builder<.+ChangeOperation<.+TreeMutator, .+string
out-lit: "data" closure received something that would be acceptable
out-lit: localData changed to: that would be acceptable
return: 0
END


TEST "HashGenerator_test" HashGenerator_test <<END
return: 0
END


TEST "HashIndexed_test" HashIndexed_test <<END
return: 0
END


TEST "bridge boost::hash to std::hash" HashStandardToBoostBridge_test <<END
return: 0
END


TEST "Hierarchy rebuilding" HierarchyOrientationIndicator_test <<END
return: 0
END


TEST "configurable Factory" MultiFact_test <<END
END


TEST "Family of Singleton Factories" MultiFactSingleton_test <<END
out: Impl-1
out: Impl-2
out: Impl-3
out: Impl-4
out: sizeof\( .+MultiFact.+Interface.+theID.+PassAsIs.+ \) =
return: 0
END


TEST "Factory argument handling" MultiFactArgument_test  <<END
out: sizeof\( .+MultiFact.+Num.+prodID.+BuildRefcountPtr.+ \) =
out: fabricate\(1, 2\)
out: fabricate\(2, 3\)
return: 0
END


TEST "NIL object singleton" NullValue_test  <<END
return: 0
END


TEST "inline type erasure" OpaqueHolder_test  <<END
out: 1
out: 3
out: 5
out: 7
out: sizeof\( .+ \) = .*[12468]{1,2}
return: 0
END


TEST "inline unchecked buffer" OpaqueUncheckedBuffer_test  <<END
out: DD<0>:
out-lit: DD<5>: *****
out-lit: DD<9>: I'm fine*
out-lit: I'm special, what the f** is going on here?************
return: 0
END


TEST "inline val/ref wrapper" ItemWrapper_test <<END
out: ItemWrapper: sizeof\( .+ItemWrapper.+ ) =
END


TEST "switchable reference" OptionalRef_test <<END
return: 0
END


TEST "RefArray_test" RefArray_test  <<END
return: 0
END


TEST "RemoveFromSet_test" RemoveFromSet_test <<END
out-lit: removed  nothing  ---> [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
out-lit: removed 0 ---> [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
out-lit: removed 9 ---> [ 0, 1, 2, 3, 4, 5, 6, 7, 8, ]
out-lit: removed 5 ---> [ 0, 1, 2, 3, 4, 6, 7, 8, 9, ]
out-lit: removed 0   2   4   6   8   ---> [ 1, 3, 5, 7, 9, ]
out-lit: removed   1   3   5   7   9 ---> [ 0, 2, 4, 6, 8, ]
out-lit: removed 0 1 2 3 4 5 6 7 8 9 ---> [ ]
out-lit: removed 0 1 2 3 4 5 6 7 8   ---> [ 9, ]
out-lit: removed   1 2 3 4 5 6 7 8 9 ---> [ 0, ]
out-lit: removed 0 1 2 3 4   6 7 8 9 ---> [ 5, ]
END


TEST "SanitizedIdentifier_test" SanitizedIdentifier_test <<END
out-lit: 'Word' --> 'Word'
out-lit: 'a Sentence' --> 'a_Sentence'
out-lit: 'trailing Withespace
out-lit:        	' --> 'trailing_Withespace'
out-lit: 'with    a  	 lot
out-lit:   of Whitespace' --> 'with_a_lot_of_Whitespace'
out-lit: 'with"much (punctuation)[]!' --> 'withmuch_(punctuation)'
out-lit: '§&Ω%€  leading garbage' --> 'leading_garbage'
out-lit: 'mixed    Ω   garbage' --> 'mixed_garbage'
out-lit: 'Bääääh!!' --> 'Bh'
out-lit: '§&Ω%€' --> ''
END


TEST "ScopedHolder_test" ScopedHolder_test <<END
out: checking ScopedHolder<Dummy>...
out: checking ScopedPtrHolder<Dummy>...
END


TEST "ScopedHolderTransfer_test" ScopedHolderTransfer_test <<END
out-lit: checking ScopedHolder<Dummy>...
out-lit: .
out-lit: ..install one element at index[0]
out-lit: .
out-lit: ..*** resize table to 16 elements
out-lit: .
out-lit: .throw some exceptions...
out-lit: checking ScopedPtrHolder<Dummy>...
out-lit: .
out-lit: ..install one element at index[0]
out-lit: .
out-lit: ..*** resize table to 16 elements
out-lit: .
out-lit: .throw some exceptions...
END


TEST "Managed Collection (I)" ScopedCollection_test <<END
return: 0
END


TEST "Managed Collection (II)" ScopedPtrVect_test <<END
return: 0
END


TEST "Search path walking" SearchPathSplitter_test <<END
out-lit: ➢➢a
out-lit: ➢➢a
out-lit: ➢➢a
out-lit: ➢➢b
out-lit: ➢➢a
out-lit: ➢➢b
out-lit: ➢➢c
out: ➢➢.d.
out-lit: ➢➢ e f
out-lit: ➢➢/usr/bin
out-lit: ➢➢/usr/lib
END


TEST "Singleton_test" Singleton_test 23 <<END
out-lit: testing TargetObj(23) as Singleton
out-lit: ctor TargetObj(23) successful
out-lit: calling a non-static method on the Singleton instance
out-lit: .....TargetObj(23): data="***********************", array[23]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,}
out-lit: dtor ~TargetObj(23) successful
END


TEST "SingletonSubclass_test" SingletonSubclass_test 13 <<END
out-lit: using the Singleton should create TargetObj(13)...
out-lit: ctor TargetObj(13) successful
out-lit: calling a non-static method on the Singleton-Implementation
out-lit: .....TargetObj(13): data="*************", array[13]={0,1,2,3,4,5,6,7,8,9,10,11,12,}
out-lit: dtor ~TargetObj(13) successful
END


TEST "SingletonTestMock_test" SingletonTestMock_test <<END
out-lit: TestSingletonO::doIt() call=1
out-lit: TestSingletonO::doIt() call=2
out-lit: Mock_1::doIt() call=1
out-lit: Mock_1::doIt() call=2
out-lit: Mock_1::doIt() call=3
out-lit: Mock_1::doIt() call=4
out-lit: Mock_1::doIt() call=5
out-lit: Mock_2::doIt() call=1
out-lit: TestSingletonO::doIt() call=3
END


TEST "Symbol_test" Symbol_test  <<END
out: one
out: sizeof.+lib.Literal.+  =   (4|8)
out: Ss
out: one\.\.\.\.one
return: 0
END


TEST "Hashtable with Symbol keys" SymbolHashtable_test  <<END
return: 0
END


TEST "extensible symbolic identifier" SubID_test <<END
out: ....RGB
out: id1=R.12
out: id2=G.13
out: verify...
out: Elements in hashtable: 3
out: verify...
out: Elements in hashtable: 5
return: 0
END


TEST "integer rounding utility" UtilFloordiv_test <<END
return: 0
END


TEST "integer scale wrapping utility" UtilFloorwrap_test <<END
out-lit: --------i--------12/4
out-lit:  12 / 4 = 3  % = 0     floor= 3.0  wrap = ( 3, 0)
out-lit:  11 / 4 = 2  % = 3     floor= 2.0  wrap = ( 2, 3)
out-lit:  10 / 4 = 2  % = 2     floor= 2.0  wrap = ( 2, 2)
out-lit:   9 / 4 = 2  % = 1     floor= 2.0  wrap = ( 2, 1)
out-lit:   8 / 4 = 2  % = 0     floor= 2.0  wrap = ( 2, 0)
out-lit:   7 / 4 = 1  % = 3     floor= 1.0  wrap = ( 1, 3)
out-lit:   6 / 4 = 1  % = 2     floor= 1.0  wrap = ( 1, 2)
out-lit:   5 / 4 = 1  % = 1     floor= 1.0  wrap = ( 1, 1)
out-lit:   4 / 4 = 1  % = 0     floor= 1.0  wrap = ( 1, 0)
out-lit:   3 / 4 = 0  % = 3     floor= 0.0  wrap = ( 0, 3)
out-lit:   2 / 4 = 0  % = 2     floor= 0.0  wrap = ( 0, 2)
out-lit:   1 / 4 = 0  % = 1     floor= 0.0  wrap = ( 0, 1)
out-lit:   0 / 4 = 0  % = 0     floor= 0.0  wrap = ( 0, 0)
out-lit:  -1 / 4 = 0  % =-1     floor=-1.0  wrap = (-1, 3)
out-lit:  -2 / 4 = 0  % =-2     floor=-1.0  wrap = (-1, 2)
out-lit:  -3 / 4 = 0  % =-3     floor=-1.0  wrap = (-1, 1)
out-lit:  -4 / 4 =-1  % = 0     floor=-1.0  wrap = (-1, 0)
out-lit:  -5 / 4 =-1  % =-1     floor=-2.0  wrap = (-2, 3)
out-lit:  -6 / 4 =-1  % =-2     floor=-2.0  wrap = (-2, 2)
out-lit:  -7 / 4 =-1  % =-3     floor=-2.0  wrap = (-2, 1)
out-lit:  -8 / 4 =-2  % = 0     floor=-2.0  wrap = (-2, 0)
out-lit:  -9 / 4 =-2  % =-1     floor=-3.0  wrap = (-3, 3)
out-lit: -10 / 4 =-2  % =-2     floor=-3.0  wrap = (-3, 2)
out-lit: -11 / 4 =-2  % =-3     floor=-3.0  wrap = (-3, 1)
out-lit: -12 / 4 =-3  % = 0     floor=-3.0  wrap = (-3, 0)
out-lit: --------i--------12/-4
out-lit:  12 /-4 =-3  % = 0     floor=-3.0  wrap = (-3, 0)
out-lit:  11 /-4 =-2  % = 3     floor=-3.0  wrap = (-3,-1)
out-lit:  10 /-4 =-2  % = 2     floor=-3.0  wrap = (-3,-2)
out-lit:   9 /-4 =-2  % = 1     floor=-3.0  wrap = (-3,-3)
out-lit:   8 /-4 =-2  % = 0     floor=-2.0  wrap = (-2, 0)
out-lit:   7 /-4 =-1  % = 3     floor=-2.0  wrap = (-2,-1)
out-lit:   6 /-4 =-1  % = 2     floor=-2.0  wrap = (-2,-2)
out-lit:   5 /-4 =-1  % = 1     floor=-2.0  wrap = (-2,-3)
out-lit:   4 /-4 =-1  % = 0     floor=-1.0  wrap = (-1, 0)
out-lit:   3 /-4 = 0  % = 3     floor=-1.0  wrap = (-1,-1)
out-lit:   2 /-4 = 0  % = 2     floor=-1.0  wrap = (-1,-2)
out-lit:   1 /-4 = 0  % = 1     floor=-1.0  wrap = (-1,-3)
out-lit:   0 /-4 = 0  % = 0     floor=-0.0  wrap = ( 0, 0)
out-lit:  -1 /-4 = 0  % =-1     floor= 0.0  wrap = ( 0,-1)
out-lit:  -2 /-4 = 0  % =-2     floor= 0.0  wrap = ( 0,-2)
out-lit:  -3 /-4 = 0  % =-3     floor= 0.0  wrap = ( 0,-3)
out-lit:  -4 /-4 = 1  % = 0     floor= 1.0  wrap = ( 1, 0)
out-lit:  -5 /-4 = 1  % =-1     floor= 1.0  wrap = ( 1,-1)
out-lit:  -6 /-4 = 1  % =-2     floor= 1.0  wrap = ( 1,-2)
out-lit:  -7 /-4 = 1  % =-3     floor= 1.0  wrap = ( 1,-3)
out-lit:  -8 /-4 = 2  % = 0     floor= 2.0  wrap = ( 2, 0)
out-lit:  -9 /-4 = 2  % =-1     floor= 2.0  wrap = ( 2,-1)
out-lit: -10 /-4 = 2  % =-2     floor= 2.0  wrap = ( 2,-2)
out-lit: -11 /-4 = 2  % =-3     floor= 2.0  wrap = ( 2,-3)
out-lit: -12 /-4 = 3  % = 0     floor= 3.0  wrap = ( 3, 0)
out-lit: --------l--------12/4
out-lit:  12 / 4 = 3  % = 0     floor= 3.0  wrap = ( 3, 0)
out-lit:  11 / 4 = 2  % = 3     floor= 2.0  wrap = ( 2, 3)
out-lit:  10 / 4 = 2  % = 2     floor= 2.0  wrap = ( 2, 2)
out-lit:   9 / 4 = 2  % = 1     floor= 2.0  wrap = ( 2, 1)
out-lit:   8 / 4 = 2  % = 0     floor= 2.0  wrap = ( 2, 0)
out-lit:   7 / 4 = 1  % = 3     floor= 1.0  wrap = ( 1, 3)
out-lit:   6 / 4 = 1  % = 2     floor= 1.0  wrap = ( 1, 2)
out-lit:   5 / 4 = 1  % = 1     floor= 1.0  wrap = ( 1, 1)
out-lit:   4 / 4 = 1  % = 0     floor= 1.0  wrap = ( 1, 0)
out-lit:   3 / 4 = 0  % = 3     floor= 0.0  wrap = ( 0, 3)
out-lit:   2 / 4 = 0  % = 2     floor= 0.0  wrap = ( 0, 2)
out-lit:   1 / 4 = 0  % = 1     floor= 0.0  wrap = ( 0, 1)
out-lit:   0 / 4 = 0  % = 0     floor= 0.0  wrap = ( 0, 0)
out-lit:  -1 / 4 = 0  % =-1     floor=-1.0  wrap = (-1, 3)
out-lit:  -2 / 4 = 0  % =-2     floor=-1.0  wrap = (-1, 2)
out-lit:  -3 / 4 = 0  % =-3     floor=-1.0  wrap = (-1, 1)
out-lit:  -4 / 4 =-1  % = 0     floor=-1.0  wrap = (-1, 0)
out-lit:  -5 / 4 =-1  % =-1     floor=-2.0  wrap = (-2, 3)
out-lit:  -6 / 4 =-1  % =-2     floor=-2.0  wrap = (-2, 2)
out-lit:  -7 / 4 =-1  % =-3     floor=-2.0  wrap = (-2, 1)
out-lit:  -8 / 4 =-2  % = 0     floor=-2.0  wrap = (-2, 0)
out-lit:  -9 / 4 =-2  % =-1     floor=-3.0  wrap = (-3, 3)
out-lit: -10 / 4 =-2  % =-2     floor=-3.0  wrap = (-3, 2)
out-lit: -11 / 4 =-2  % =-3     floor=-3.0  wrap = (-3, 1)
out-lit: -12 / 4 =-3  % = 0     floor=-3.0  wrap = (-3, 0)
out-lit: --------l--------12/-4
out-lit:  12 /-4 =-3  % = 0     floor=-3.0  wrap = (-3, 0)
out-lit:  11 /-4 =-2  % = 3     floor=-3.0  wrap = (-3,-1)
out-lit:  10 /-4 =-2  % = 2     floor=-3.0  wrap = (-3,-2)
out-lit:   9 /-4 =-2  % = 1     floor=-3.0  wrap = (-3,-3)
out-lit:   8 /-4 =-2  % = 0     floor=-2.0  wrap = (-2, 0)
out-lit:   7 /-4 =-1  % = 3     floor=-2.0  wrap = (-2,-1)
out-lit:   6 /-4 =-1  % = 2     floor=-2.0  wrap = (-2,-2)
out-lit:   5 /-4 =-1  % = 1     floor=-2.0  wrap = (-2,-3)
out-lit:   4 /-4 =-1  % = 0     floor=-1.0  wrap = (-1, 0)
out-lit:   3 /-4 = 0  % = 3     floor=-1.0  wrap = (-1,-1)
out-lit:   2 /-4 = 0  % = 2     floor=-1.0  wrap = (-1,-2)
out-lit:   1 /-4 = 0  % = 1     floor=-1.0  wrap = (-1,-3)
out-lit:   0 /-4 = 0  % = 0     floor=-0.0  wrap = ( 0, 0)
out-lit:  -1 /-4 = 0  % =-1     floor= 0.0  wrap = ( 0,-1)
out-lit:  -2 /-4 = 0  % =-2     floor= 0.0  wrap = ( 0,-2)
out-lit:  -3 /-4 = 0  % =-3     floor= 0.0  wrap = ( 0,-3)
out-lit:  -4 /-4 = 1  % = 0     floor= 1.0  wrap = ( 1, 0)
out-lit:  -5 /-4 = 1  % =-1     floor= 1.0  wrap = ( 1,-1)
out-lit:  -6 /-4 = 1  % =-2     floor= 1.0  wrap = ( 1,-2)
out-lit:  -7 /-4 = 1  % =-3     floor= 1.0  wrap = ( 1,-3)
out-lit:  -8 /-4 = 2  % = 0     floor= 2.0  wrap = ( 2, 0)
out-lit:  -9 /-4 = 2  % =-1     floor= 2.0  wrap = ( 2,-1)
out-lit: -10 /-4 = 2  % =-2     floor= 2.0  wrap = ( 2,-2)
out-lit: -11 /-4 = 2  % =-3     floor= 2.0  wrap = ( 2,-3)
out-lit: -12 /-4 = 3  % = 0     floor= 3.0  wrap = ( 3, 0)
return: 0
END


TEST "ownership of malloced data" UniqueMallocOwner_test <<END
return: 0
END


TEST "collection utils" UtilCollection_test <<END
return: 0
END


TEST "typesafe Variant record" Variant_test <<END
out: Variant.«bool».0
out: Variant.«(long|int64_t)».11
out: Variant.«std::string».lololo
out: Variant.«lib::time::Time».0:00:00.000
return: 0
END


TEST "verb token based double dispatch helper" VerbFunctionDispatch_test <<END
out-lit: consuming woof ->  'Woof-Woof!'
out-lit: consuming honk ->  'Honk-Honk!'
out-lit: consuming moo ->  'Moo-Moo!'
out-lit: consuming meh ->  'Meh!'
return: 0
END


TEST "VectorTransfer_test" VectorTransfer_test <<END
return: 0
END

