fix and adjust broken test defintions. Closes #985

This commit is contained in:
Fischlurch 2016-01-10 12:25:45 +01:00
parent e518a19435
commit ecd1375e92
16 changed files with 303 additions and 277 deletions

View file

@ -47,7 +47,7 @@ namespace test{
string
showSizeof (size_t siz, string name)
{
static _Fmt fmt{"sizeof( %s ) %|30t|= %3d"};
static _Fmt fmt{"sizeof( %s ) %|40t|= %3d"};
return fmt % name % siz;
}

View file

@ -288,7 +288,7 @@ namespace mobject {
&& (*pRef_).template isCompatible<MOX>();
}
operator string() const ///////////////////////TICKET #527 should be better integrated with the other object types
operator string() const ///////////////////////TICKET #527 #528 should be better integrated with the other object types
{
return isValid()? string(getPlacement())
: "MRef-NIL";

View file

@ -51,7 +51,7 @@ namespace mobject {
Placement<MObject>::operator string () const
{
return _Fmt{"Placement<%s> %|50T.| use-cnt=%u ID(%x) adr=%p pointee=%p"}
return _Fmt{"Placement<%s> %|50T.| use-cnt=%u ID(%016x) adr=%p pointee=%p"}
% typeStr(this->get()) % use_count()
% (size_t)getID()
% (void*)this
@ -64,7 +64,7 @@ namespace mobject {
format_PlacementID (Placement<MObject> const& pla)
{
size_t hashVal = pla.getID();
return _Fmt{"pID(%x)"} % hashVal;
return _Fmt{"pID(%016x)"} % hashVal;
}

View file

@ -4,13 +4,18 @@ TESTING "Test support and helpers" ./test-suite --group=common
TEST "Test support functions" TestHelper_test <<END
out: [a-z0-9]{80}$
out: Displaying types and sizes....
out: sizeof..just a char.+ = 1
out: sizeof.+lib.+test.+test.+Murpf.+ = 1
out: sizeof.+lib.+test.+test.+Wrmrmpft.+ = 2
out: sizeof.+lib.+test.+test.+Wrmrmpft.+ = 3
out: sizeof.+lib.+test.+test.+Wrmrmpft.+Murpf.+ = 1
out: sizeof..everything.+ = 42
out-lit: Displaying types and sizes....
out-lit: sizeof( just a char ) = 1
out-lit: sizeof( test::Murpf ) = 1
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
out-lit: sizeof( test::Wrmrmpft<char [2]> ) = 2
out-lit: sizeof( test::Wrmrmpft<char [3]> ) = 3
out-lit: sizeof( Universe ) = 42
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
out-lit: sizeof( test::Wrmrmpft<test::Murpf> ) = 1
END

View file

@ -18,7 +18,7 @@ out: doIt
out: 13
out: 14
out: doIt
out: sizeof.+lib.+test.+ExampleCustomType123.+ = [248]
out: sizeof. ExampleCustomType123 . = [248]
return: 0
END
@ -176,32 +176,38 @@ END
TEST "Lumiera Iterator Adapter for STL" IterAdapterSTL_test <<END
out: -----filter-distinct-values---.+vector
out: iter::eachDistinct$
out: iter::eachDistinct::1$
out: iter::eachDistinct::1::2::3::1
out: -----iterateMapKeyVal---.+map
out: iter::eachKey::0::1::2::3::4::5::6::7::8::9
out: iter::eachVal::0::2::4::6::8::10::12::14::16::18
out: iter::eachDistinctKey::0::1::2::3::4::5::6::7::8::9
out: -----iterateMapKeyVal---.+unordered_map
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::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+
out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::.
out: -----iterateMapKeyVal---.+multimap
out: 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: 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: iter::eachDistinctKey::0::1::2::3::4::5::6::7::8::9
out: -----iterateMapKeyVal---.+unordered_multimap
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::eachVal::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+::.+
out: iter::eachDistinctKey::.::.::.::.::.::.::.::.::.::.
out: -----iterateValues4Key---.+multimap
out: iter::eachValForKey::10::9::8::7::6::5::4::3::2::1
out: -----iterateValues4Key---.+unordered_multimap
out: iter::eachValForKey::.+
out: snapshot-0-1-2-3-4-5-6-7-8-9
out: snapshot-22-44
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
END
@ -297,32 +303,32 @@ TEST "Variadic template diagnostics" TestHelperVariadic_test <<END
out-lit: --no-arg--
out-lit: :.
out-lit: --value--
out: .+#1.+ Type: d VAL Address. 0x.+
out: .+#1.+ Type: double VAL Address. 0x.+
out-lit: :.
out-lit: --reference--
out: .+#1.+ Type: d REF Address. 0x.+
out: .+#1.+ Type: double REF Address. 0x.+
out-lit: :.
out-lit: --move--
out: .+#1.+ Type: d MOV Address. 0x.+
out: .+#1.+ Type: double MOV Address. 0x.+
out-lit: :.
out-lit: --two values--
out: .+#2.+ Type: A4_c REF Address. 0x.+
out: .+#1.+ Type: l MOV Address. 0x.+
out: .+#2.+ Type: char REF Address. 0x.+
out: .+#1.+ Type: long MOV Address. 0x.+
out-lit: :.
out-lit: --matched--
out: .+#3.+ Type: d REF Address. 0x.+
out: .+#2.+ Type: d REF Address. 0x.+
out: .+#1.+ Type: d MOV Address. 0x.+
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: .+lib.test.test.+Interface. REF Address. 0x.+
out: .+#1.+ Type: Impl REF Address. 0x.+
out-lit: :.
END
TEST "Helper to show demangled C++ names" TypeDemangling_test <<END
out: .+lib.test.test.Space.+Outer.+Inner
out-lit: lib::test::test::Space const* (*)(lib::test::test::Outer<lib::test::test::Space>::Inner const&&)
out: .+lib.meta.test.Space.+Outer.+Inner
out-lit: lib::meta::test::Space const* (*)(lib::meta::test::Outer<lib::meta::test::Space>::Inner const&&)
END

View file

@ -25,59 +25,62 @@ 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=0x.+ type: D
out: Access\(D& as D&\) .+D.. adr=0x.+ type: D
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=0x.+ type: D
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=╲\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\*. .+0x.+
out: Access.D& as D\*. .+0x.+
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=0x.+ type: D
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=╲\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=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: 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=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: 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
END
@ -172,32 +175,33 @@ 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
out-lit: Digxel<int, digxel::Formatter<int> >--empty-- 0--(val=123)--123|
out-lit: Digxel<double, digxel::Formatter<double> >--empty--00.000--(val=123.457)--123.457|
out-lit: Digxel<int, digxel::SexaFormatter>--empty--00--(val=42)--42|
out-lit: Digxel<int, digxel::SexaFormatter>--empty--00--(val=-5)---5|
out-lit: Digxel<unsigned int, digxel::HexaFormatter>--empty--00--(val=12)--0C|
out-lit: Digxel<unsigned int, digxel::HexaFormatter>--empty--00--(val=111)--6F|
out-lit: Digxel<long, digxel::CountFormatter>--empty--0000--(val=-1234567890)---1234567890|
return: 0
END
TEST "plain entry-ID" EntryID_test <<END
out: ID<Dummy>-Dummy.0..
out: ID<Dummy>-strange
out: ID<Dummy>-Dummy.0..
out: ID<Fork>-Fork.0..
out: ID<Fork>-special
out: sizeof\( idi::EntryID<Fork> \) .+ =
out: sizeof\( idi::BareEntryID \) .+ =
END
TEST "formatting/string conversion in output" FormatCOUT_test <<END
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-lit: 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
@ -205,12 +209,12 @@ 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: «test::FormatString_test::Silent»
out-lit: __nix_
out-lit: ____
out-lit: __1__
out-lit: __1__
out-lit: ____
out-lit: ____
out-lit: __dirt__
out-lit: __1234__
out-lit: __0xff__
@ -260,15 +264,15 @@ END
TEST "Generic Record data node" GenNodeBasic_test <<END
out: GenNode.+_CHILD_Record.+Rec.spam..ham = DataCap.+eggs
out-lit: --spam--
out: GenNode.+"baked beans".+Rec...hasSpam = DataCap.«bool».+«char».+«std::string».*«double».+GenNode.+"spam".+«lib::diff::Record<lib::diff::GenNode>».+«std::string».eggs.+«std::string».spam.+«std::string».spam
out: GenNode.+"hasSpam".+«bool».1
out: GenNode.+"baked beans".+Rec...hasSpam = DataCap.«bool».true.+«char».+«string».*«double».+GenNode.+"spam".+«Record<GenNode>».+«string».eggs.+«string».spam.+«string».spam
out: GenNode.+"hasSpam".+«bool».true
out: GenNode.+_CHILD_char.+«char».\*
out: GenNode.+_CHILD_string.+«std::string».★
out: GenNode.+_CHILD_string.+«string».★
out: GenNode.+_CHILD_double.+«double».3.1415927
out: GenNode.+"spam".+«lib::diff::Record<lib::diff::GenNode>».Rec.ham.+eggs.+spam.+spam
out: GenNode.+_CHILD_string.+«std::string».eggs
out: GenNode.+_CHILD_string.+«std::string».spam
out: GenNode.+_CHILD_TimeSpan.+«lib::time::TimeSpan»
out: GenNode.+"spam".+«Record<GenNode>».Rec.ham.+eggs.+spam.+spam
out: GenNode.+_CHILD_string.+«string».eggs
out: GenNode.+_CHILD_string.+«string».spam
out: GenNode.+_CHILD_TimeSpan.+«TimeSpan»|0:00:00.000≺920ms≻
out: GenNode.+_CHILD_long.+«long.+42
return: 0
END
@ -280,7 +284,7 @@ END
TEST "Generic recursive mutation with closure binding" GenericTreeMutator_test <<END
out: concrete TreeMutator .+Builder<.+ChangeOperation<.+TreeMutator, .+string
out: concrete TreeMutator .+Builder<ChangeOperation<TreeMutator, test::GenericTreeMutator_test::simpleAttributeBinding().+lambda\(string\).+> >
out-lit: "data" closure received something that would be acceptable
out-lit: localData changed to: that would be acceptable
return: 0
@ -339,7 +343,9 @@ out: 1
out: 3
out: 5
out: 7
out: sizeof\( .+ \) = .*[12468]{1,2}
out: sizeof\( Base . =.+[12468]{1,2}
out: sizeof\( Special . =.+[12468]{1,2}
out: sizeof\( OpaqueHolder<Base, ........ =.+[12468]{1,2}
return: 0
END
@ -354,7 +360,7 @@ END
TEST "inline val/ref wrapper" ItemWrapper_test <<END
out: ItemWrapper: sizeof\( .+ItemWrapper.+ ) =
out: ItemWrapper: sizeof\( wrapper::ItemWrapper<.+ = .
END
@ -479,9 +485,10 @@ END
TEST "Symbol_test" Symbol_test <<END
out: one
out: sizeof.+lib.Literal.+ = (4|8)
out: Ss
out: one\.\.\.\.one
out: sizeof. Literal.+ = (4|8)
out-lit: string
out-lit: string
out-lit: one....one
return: 0
END
@ -509,7 +516,7 @@ END
TEST "integer scale wrapping utility" UtilFloorwrap_test <<END
out-lit: --------i--------12/4
out-lit: --------int--------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)
@ -535,7 +542,7 @@ 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: --------int--------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)
@ -561,7 +568,7 @@ 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: --------long--------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)
@ -587,7 +594,7 @@ 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: --------long--------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)
@ -628,10 +635,10 @@ END
TEST "typesafe Variant record" Variant_test <<END
out: Variant.«bool».0
out: Variant.«bool».false
out: Variant.«int».11
out: Variant.«std::string».lololo
out: Variant.«lib::time::Time».0:00:00.000
out: Variant.«string».lololo
out: Variant.«Time».0:00:00.000
return: 0
END

View file

@ -37,11 +37,11 @@ out-lit: nullary(). --->Binding[nullary/0()]
out-lit: nullary( ) --->Binding[nullary/0()]
out-lit: nullary . --->Binding[nullary/0()]
out-lit: predicate( with-argument ) --->Binding[predicate/1(with-argument)]
out-lit: Binding[advice.type.n7lumiera6advice4test12_GLOBAL__N_111DummyAdviceE/0(), one/0(), three/1(four), two/0()]
out-lit: Binding[advice.type.dummyAdvice/0(), one/0(), three/1(four), two/0()]
out-lit: b0==Binding[]
out-lit: b1==Binding[cat1/0(), cat2/0()]
out-lit: b2==Binding[cat1/0(), cat2/0()]
out-lit: b2==Binding[advice.type.n3lib4time4TimeE/0(), cat1/0(), cat2/0(), cat3/1(zzz)]
out-lit: b2==Binding[advice.type.time/0(), cat1/0(), cat2/0(), cat3/1(zzz)]
return: 0
END
@ -123,21 +123,21 @@ END
TEST "Life changing time specifications with feedback" TimeControl_test <<END
out: Test-Case. Target=.+time.Duration. <--feed--- .+time.TimeValue.$
out: Test-Case. Target=.+time.Duration. <--feed--- .+time.Time.$
out: Test-Case. Target=.+time.Duration. <--feed--- .+time.Duration.$
out: Test-Case. Target=.+time.Duration. <--feed--- .+time.TimeSpan.$
out: Test-Case. Target=.+time.Duration. <--feed--- .+time.QuTime.$
out: Test-Case. Target=.+time.TimeSpan. <--feed--- .+time.TimeValue.$
out: Test-Case. Target=.+time.TimeSpan. <--feed--- .+time.Time.$
out: Test-Case. Target=.+time.TimeSpan. <--feed--- .+time.Duration.$
out: Test-Case. Target=.+time.TimeSpan. <--feed--- .+time.TimeSpan.$
out: Test-Case. Target=.+time.TimeSpan. <--feed--- .+time.QuTime.$
out: Test-Case. Target=.+time.QuTime. <--feed--- .+time.TimeValue.$
out: Test-Case. Target=.+time.QuTime. <--feed--- .+time.Time.$
out: Test-Case. Target=.+time.QuTime. <--feed--- .+time.Duration.$
out: Test-Case. Target=.+time.QuTime. <--feed--- .+time.TimeSpan.$
out: Test-Case. Target=.+time.QuTime. <--feed--- .+time.QuTime.$
out-lit: Test-Case. Target=Duration <--feed--- TimeValue
out-lit: Test-Case. Target=Duration <--feed--- Time
out-lit: Test-Case. Target=Duration <--feed--- Duration
out-lit: Test-Case. Target=Duration <--feed--- TimeSpan
out-lit: Test-Case. Target=Duration <--feed--- QuTime
out-lit: Test-Case. Target=TimeSpan <--feed--- TimeValue
out-lit: Test-Case. Target=TimeSpan <--feed--- Time
out-lit: Test-Case. Target=TimeSpan <--feed--- Duration
out-lit: Test-Case. Target=TimeSpan <--feed--- TimeSpan
out-lit: Test-Case. Target=TimeSpan <--feed--- QuTime
out-lit: Test-Case. Target=QuTime <--feed--- TimeValue
out-lit: Test-Case. Target=QuTime <--feed--- Time
out-lit: Test-Case. Target=QuTime <--feed--- Duration
out-lit: Test-Case. Target=QuTime <--feed--- TimeSpan
out-lit: Test-Case. Target=QuTime <--feed--- QuTime
return: 0
END

View file

@ -33,19 +33,6 @@ return: 0
END
TEST "plain entry-ID" EntryID_test <<END
out-lit: ID<Dummy>-Dummy.001
out-lit: ID<Dummy>-strange
out-lit: ID<Dummy>-Dummy.002
out-lit: ID<Fork>-Fork.001
out-lit: ID<Fork>-Fork.002
out-lit: ID<Fork>-special
out: sizeof\( ..lib.idi.EntryID.+mobject.+session.+Fork.+ \) =
out: sizeof\( ..lib.idi.+BareEntryID. \) =
return: 0
END
PLANNED "ID to type association" TypedID_test <<END
return: 0
END

View file

@ -43,42 +43,43 @@ END
TEST "external MObject references" MObjectRef_test <<END
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-1 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-2 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-1 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-2 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.>.+ use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-1 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-1 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: MRef-NIL
out: sizeof\( .+MORef.+session.Clip.+ \) = (32|24)
out: Placement<.+Clip.> .......... use-cnt=4
out: sizeof\( MORef<Clip> \) = (32|24)
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Asset\(VIDEO:lumi.test-2 v1\)
out: Placement<.+Clip.> .......... use-cnt=4
out: Placement<.+Clip.> .......... use-cnt=5
out: Placement<Clip> .................................. use-cnt=4 ID.\w{16}
out: Placement<Clip> .................................. use-cnt=5 ID.\w{16}
out: \(VIDEO:lumi.test-1 v1\)
END
@ -91,35 +92,36 @@ END
TEST "hierarchical placement types" PlacementHierarchy_test <<END
out: sizeof\( .+ \) = [0-9]{2}
out: Placement.+mobject.+test.+TestSubMO1.+. use-cnt=1 .*
out: Placement.+mobject.+test.+TestSubMO2.+. use-cnt=1 .*
out: Placement.+mobject.+test.+TestSubMO21.+ use-cnt=2 .*
out: Placement.+mobject.+session.+Clip.+.... use-cnt=2 .*
out: TestSubMO1\(ID=[0-9]{3}\)
out: TestSubMO2\(ID=[0-9]{3}\)
out: TestSubMO21\(ID=[0-9]{3}\)
out: sizeof\( test::TestPlacement<test::TestSubMO1, test::DummyMO> \) = [0-9]{2}
out: sizeof\( test::TestPlacement<test::TestSubMO2, test::DummyMO> \) = [0-9]{2}
out: sizeof\( test::TestPlacement<test::TestSubMO21, test::TestSubMO2> \) = [0-9]{2}
out: sizeof\( test::TestPlacement<test::DummyMO, test::DummyMO> \) = [0-9]{2}
out: sizeof\( Placement<MObject, MObject> \) = [0-9]{2}
out: Placement<test::TestSubMO1> ...................... use-cnt=1 ID.\w{16}
out: Placement<test::TestSubMO2> ...................... use-cnt=1 ID.\w{16}
out: Placement<test::TestSubMO21> ..................... use-cnt=2 ID.\w{16}
out: Placement<Clip> .................................. use-cnt=2 ID.\w{16}
out: specialAPI()
out: pID\(\w{6,16}\)
END
TEST "PlacementRef_test" PlacementRef_test <<END
out: Placement<.+TestSubMO21.> ..... use-cnt=2
out: Placement<test::TestSubMO21> ..................... use-cnt=2 ID.\w{16}
out: specialAPI()
END
TEST "Placement Index" PlacementIndex_test <<END
out: ^::Placement<.+session.test.TestClip.+ use-cnt=2
out: ^::Placement<.+session.test.TestClip.+ use-cnt=6
out: ^ ::Placement<.+session.test.TestClip.+ use-cnt=6
out: ^ ::Placement<.+session.test.TestClip.+ use-cnt=6
out: ^::Placement<test::TestClip> ........................ use-cnt=2
out: ^::Placement<test::TestClip> ........................ use-cnt=6
out: ^ ::Placement<test::TestClip> ........................ use-cnt=6
out: ^ ::Placement<test::TestClip> ........................ use-cnt=6
out: ^ ...2 elements at Level 2
out: ^ ::Placement<.+session.test.TestClip.+ use-cnt=6
out: ^ ::Placement<test::TestClip> ........................ use-cnt=6
out: ^ ...3 elements at Level 1
out: ^::Placement<.+session.test.TestClip.+ use-cnt=2
out: ^ ::Placement<.+session.test.TestClip.+ use-cnt=1
out: ^::Placement<test::TestClip> ........................ use-cnt=2
out: ^ ::Placement<test::TestClip> ........................ use-cnt=1
out: ^ ...1 elements at Level 1
out: ^...3 elements at Level 0
END
@ -127,69 +129,69 @@ END
TEST "Querying the index" PlacementIndexQuery_test <<END
out: explore contents depth-first...
out: Placement<.+TestSubMO2.> ...... use-cnt=1
out: Placement<.+TestSubMO1.> ...... use-cnt=1
out: Placement<.+DummyMO.> .......... use-cnt=1
out: Placement<.+TestSubMO21.> ..... use-cnt=1
out: path to root starting at Placement<.+TestSubMO1
out: Placement<.+TestSubMO2.> ...... use-cnt=1
out: Placement<.+session.Label.> ......... use-cnt=1
out: Placement<test::TestSubMO2> ...................... use-cnt=1
out: Placement<test::TestSubMO1> ...................... use-cnt=1
out: Placement<test::DummyMO> ......................... use-cnt=1
out: Placement<test::TestSubMO21> ..................... use-cnt=1
out: path to root starting at Placement<test::TestSubMO1> ...................... use-cnt=1
out: Placement<test::TestSubMO2> ...................... use-cnt=1
out: Placement<Label> ................................. use-cnt=1
END
TEST "discovering scopes" ScopeQuery_test <<END
out: --------------------------------Test-1: contents depth-first
out: Placement<.+TestSubMO2.>
out: Placement<.+TestSubMO1.>
out: Placement<.+DummyMO.>
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO2>
out: Placement<test::TestSubMO1>
out: Placement<test::DummyMO>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-2: contents depth-first, filtered to Clip
out: --------------------------------Test-3: contents depth-first, filtered to DummyMO
out: Placement<.+TestSubMO2.>
out: Placement<.+TestSubMO1.>
out: Placement<.+DummyMO.>
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO2>
out: Placement<test::TestSubMO1>
out: Placement<test::DummyMO>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-4: contents depth-first, filtered to TestSubMO1
out: Placement<.+TestSubMO1.>
out: Placement<test::TestSubMO1>
out: --------------------------------Test-5: contents depth-first, filtered to TestSubMO2
out: Placement<.+TestSubMO2.>
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO2>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-6: contents depth-first, custom filtered DummyMO
out: Placement<.+TestSubMO2.>
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO2>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-7: parents of the second TestSubMO2 element found
out: Placement<.+TestSubMO21.>
out: Placement<.+mobject.session.Label.>
out: Placement<test::TestSubMO21>
out: Placement<Label>
out: --------------------------------Test-8: children of the this TestSubMO2 element
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-9: path from there to root
out: Placement<.+TestSubMO21.>
out: Placement<.+mobject.session.Label.>
out: Placement<test::TestSubMO21>
out: Placement<Label>
out: --------------------------------Test-10: same path, but filtered to TestSubMO2
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO21>
out: --------------------------------Test-11: continue exploring partially used TestSubMO2 iterator
out: Placement<.+TestSubMO21.>
out: Placement<test::TestSubMO21>
return: 0
END
TEST "Placement search scope" PlacementScope_test <<END
out: Scope: \[Label\.[0-9]{3}\]
out: Placement<.+TestSubMO2.>
out: Scope: \[DummyMO\.[0-9]{3}\]
out: Placement<.+TestSubMO1.>
out: Scope: \[Label\.[0-9]{3}\]
out: Placement<.+DummyMO.>
out: Scope: \[Label\.[0-9]{3}\]
out: Placement<.+TestSubMO21.>
out: Scope: \[DummyMO\.[0-9]{3}\]
out: Placement<.+TestSubMO21.>
out: Scope: \[DummyMO\.[0-9]{3}\]
out: Placement<.+TestSubMO21.>
out: Scope: \[DummyMO\.[0-9]{3}\]
out: Placement<.+TestSubMO21.>
out: Scope: \[DummyMO\.[0-9]{3}\]
out: Placement<.+TestSubMO21.>
out: Scope: \[Label.[0-9]{3}\]
out: Placement<test::TestSubMO2>
out: Scope: \[DummyMO.[0-9]{3}\]
out: Placement<test::TestSubMO1>
out: Scope: \[Label.[0-9]{3}\]
out: Placement<test::DummyMO>
out: Scope: \[Label.[0-9]{3}\]
out: Placement<test::TestSubMO21>
out: Scope: \[DummyMO.[0-9]{3}\]
out: Placement<test::TestSubMO21>
out: Scope: \[DummyMO.[0-9]{3}\]
out: Placement<test::TestSubMO21>
out: Scope: \[DummyMO.[0-9]{3}\]
out: Placement<test::TestSubMO21>
out: Scope: \[DummyMO.[0-9]{3}\]
out: Placement<test::TestSubMO21>
return: 0
END
@ -206,7 +208,7 @@ END
TEST "issuing typed queries" QueryResolver_test <<END
out: Query-Results: sizeof\( .+IterAdapter.+Cursor.+shared_ptr.+Resolution
out: Query-Results: sizeof\( IterAdapter<Query<int>::Cursor, shared_ptr<Resolution> >
out: ^6
out: ^5
out: ^4
@ -214,7 +216,7 @@ out: ^3
out: ^2
out: ^1
out: ^0
out: Query-Results: sizeof\( .+IterAdapter.+Cursor.+shared_ptr.+Resolution
out: Query-Results: sizeof\( IterAdapter<Query<string>::Cursor, shared_ptr<Resolution> >
out: ^a
out: ^ra
out: ^era

View file

@ -18,7 +18,7 @@ out: would be serialised.....Command-State. arguments=Closure\(\), ·noUNDO·.
out: would be serialised.....Command-State. arguments=Closure\(.\), ·noUNDO·.
out: would be serialised.....Command-State. arguments=Closure\(.,.+s.*\), ·noUNDO·.
out: would be serialised.....Command-State. arguments=Closure\(.+s.*,glorious,..\), <mem: destruction>.
out: sizeof\( .+control1.ArgumentHolder.+ \) = .+
out: sizeof\( control::ArgumentHolder<void \(Tracker<TimeVar>, Tracker<string>, int\), Tracker<string> > \) = [0-9]{2,3}
out: Command-State. arguments=Closure\(.+s.*,Lumiera rocks,..\), ·noUNDO·.
out: capture state...
out: captured state: START...Lumiera rocks
@ -36,8 +36,8 @@ END
TEST "build argument accepting function" ArgumentTupleAccept_test <<END
out: sizeof\( .+control.+TestClass.+ \) = 1
out: sizeof\( .+control.+TestClass.+lib.time.TimeVar.+ \) = (12|16)
out: sizeof\( TestClass<void \(\)> \) = 1
out: sizeof\( TestClass<int \(TimeVar, int\)> \) = (12|16)
out: .+s
return: 0
END

View file

@ -262,8 +262,15 @@ namespace test {
index.clear (e1321);
CHECK (!index.contains (e1321));
CHECK (!index.contains (e13211));
CHECK (!index.contains (e13212));
CHECK (!index.contains (e13213));
CHECK (!index.contains (e132131));
CHECK (!index.contains (e132132));
CHECK (!index.contains (e132133));
CHECK (!index.contains (e132134));
CHECK (!index.contains (e132141));
CHECK (!index.contains (e132142));
CHECK (!index.contains (e132143));
CHECK (!index.contains (e132144));
CHECK (siz == index.size());
CHECK (index.isValid());
@ -275,6 +282,14 @@ namespace test {
/** @test drill down into the tree-like structure
* and enumerate the contents of each element, if any
* @note at this point, our test index holds 9 Placements,
* which actually refer to 3 distinct TestClip objects
* - two where installed into root scope in `checkSimpleAccess()`
* - one was installed below one of the above in `checkTypedAccess()`
* - `checkScopeHandling()` left back 6 instances, all pointing
* to the same TestClip.
* This can be verified in the test output (look at the
* `use-cnt` and the actual address of the pointee
*/
void
checkContentsEnumeration (Idx index)

View file

@ -215,7 +215,7 @@ namespace test{
symbolReference()
{
GenNode ham = MakeRec().type("spam").attrib("τ", Time(23,42)).genNode("egg bacon sausage and spam");
GenNode::ID hamID(ham);
CHECK (hamID == ham.idi);
CHECK (hamID.getSym() == ham.idi.getSym());
@ -286,7 +286,7 @@ namespace test{
CHECK (2 == iter.level()); // delve into the contents,
CHECK ("hasSpam" == iter->idi.getSym()); // ...starting with the attribute(s)
CHECK (true == iter->data.get<bool>());
CHECK ("GenNode-ID(\"hasSpam\")-DataCap|«bool»|1" == string(*iter));
CHECK ("GenNode-ID(\"hasSpam\")-DataCap|«bool»|true" == string(*iter));
++iter;
CHECK (!iter->isNamed()); // contents of the object's scope
@ -318,7 +318,7 @@ namespace test{
++iter;
CHECK (2 == iter.level()); // decreasing level indicates we left nested scope
CHECK (!iter->isNamed()); // next item in the enclosing scope
CHECK ("0:00:00.000[920ms]" == string(iter->data.get<TimeSpan>()));
CHECK ("0:00:00.000≺920ms≻" == string(iter->data.get<TimeSpan>()));
++iter;
CHECK (!iter->isNamed());
CHECK (42 == iter->data.get<int64_t>());

View file

@ -104,8 +104,7 @@ namespace test{
void
verify_fullTypeID()
{
//////TODO this should be a identifier with only letters, numbers and underscores. Need to extend the util::sanitise
CHECK("lib::idi::test::(anonymous_namespace)::Somelib::idi::test::(anonymous_namespace)::Thing" == typeFullID<SomeThing>());
CHECK("Some_Thing" == typeFullID<SomeThing>());
}

View file

@ -72,6 +72,7 @@ namespace test {
ostream& operator<< (ostream& s, const B& b) { return s << "B{} adr="<<&b; }
ostream& operator<< (ostream& s, const D& d) { return s << "D{} adr="<<&d; }
ostream& operator<< (ostream& s, const E& e) { return s << "E{} adr="<<&e; }
ostream& operator<< (ostream& s, const F& f) { return s << "F{} adr="<<&f; }
}//(End)Test fixture
@ -141,6 +142,8 @@ namespace test {
cout << "can_use_conversion<D*&,D*&> = " << can_use_conversion<D*&,D*&>::value <<endl;
cout << "can_use_conversion<D*,E*> = " << can_use_conversion<D*,E*>::value <<endl;
cout << "can_use_dynamic_downcast<D*&,E*> = " << can_use_dynamic_downcast<D*&,E*>::value <<endl;
cout << "can_use_conversion<E*,F*> = " << can_use_conversion<E*,F*>::value <<endl;
cout << "can_use_dynamic_downcast<E*,F*> = " << can_use_dynamic_downcast<E*,F*>::value <<endl;
@ -172,14 +175,14 @@ namespace test {
// AccessCasted<D&&>::access(pD); // should not move away a value accessed through a pointer, there might be other users
cout << "=== const correctness ==="<<endl;
cout << "Access(D as D const&) --->" << AccessCasted<D const&>::access(d) <<endl;
cout << "Access(D& as D const&) --->" << AccessCasted<D const&>::access(rD) <<endl;
cout << "Access(D as const D) --->" << AccessCasted<const D>::access(d) <<endl;
cout << "Access(D& as const D) --->" << AccessCasted<const D>::access(rD) <<endl;
cout << "Access(D as const D*) --->" << AccessCasted<const D*>::access(d) <<endl;
cout << "Access(D& as const D*) --->" << AccessCasted<const D*>::access(rD) <<endl;
cout << "Access(D* as D const&) --->" << AccessCasted<D const&>::access(pD) <<endl;
cout << "Access(D* as const D) --->" << AccessCasted<const D>::access(pD) <<endl;
cout << "Access(D as D const&) --->" << AccessCasted<D const&>::access(d) <<endl;
cout << "Access(D& as D const&) --->" << AccessCasted<D const&>::access(rD) <<endl;
cout << "Access(D as const D) --->" << AccessCasted<const D>::access(d) <<endl;
cout << "Access(D& as const D) --->" << AccessCasted<const D>::access(rD) <<endl;
cout << "Access(D as const D*) --->" << AccessCasted<const D*>::access(d) <<endl;
cout << "Access(D& as const D*) --->" << AccessCasted<const D*>::access(rD) <<endl;
cout << "Access(D* as D const&) --->" << AccessCasted<D const&>::access(pD) <<endl;
cout << "Access(D* as const D) --->" << AccessCasted<const D>::access(pD) <<endl;
const D cD(d);
D const& rcD(d);
const D* pcD(&cD);
@ -204,14 +207,14 @@ namespace test {
// AccessCasted<D*>::access(move(cD)); // and same for taking pointer from a moved value.
cout << "=== work cases: actual conversions ==="<<endl;
cout << "Access(B& as B&) --->" << AccessCasted<B&>::access(rB) <<endl;
cout << "Access(D& as B&) --->" << AccessCasted<B&>::access(rD) <<endl;
cout << "Access(B* as B*) --->" << AccessCasted<B*>::access(pB) <<endl;
cout << "Access(D* as B*) --->" << AccessCasted<B*>::access(pD) <<endl;
cout << "Access(D& as B*) --->" << AccessCasted<B*>::access(rD) <<endl;
cout << "Access(D* as B&) --->" << AccessCasted<B&>::access(pD) <<endl;
cout << "Access(B*& as B*&) --->" << AccessCasted<B*&>::access(rpB) <<endl;
cout << "Access(D*& as D*&) --->" << AccessCasted<D*&>::access(rpD) <<endl;
cout << "Access(B& as B&) --->" << AccessCasted<B&>::access(rB) <<endl;
cout << "Access(D& as B&) --->" << AccessCasted<B&>::access(rD) <<endl;
cout << "Access(B* as B*) --->" << AccessCasted<B*>::access(pB) <<endl;
cout << "Access(D* as B*) --->" << AccessCasted<B*>::access(pD) <<endl;
cout << "Access(D& as B*) --->" << AccessCasted<B*>::access(rD) <<endl;
cout << "Access(D* as B&) --->" << AccessCasted<B&>::access(pD) <<endl;
cout << "Access(B*& as B*&) --->" << AccessCasted<B*&>::access(rpB) <<endl;
cout << "Access(D*& as D*&) --->" << AccessCasted<D*&>::access(rpD) <<endl;
cout << "Access(D& as const B*) --->" << AccessCasted<const B*>::access(rD) <<endl;
cout << "Access(D* as B const&) --->" << AccessCasted<B const&>::access(pD) <<endl;
cout << "Access(D const& as const B*) --->" << AccessCasted<const B*>::access(rcD) <<endl;
@ -226,13 +229,14 @@ namespace test {
// AccessCasted<E*>::access(pDE); // same here, since E has RTTI but D hasn't, we have no way to find out the real type
VERIFY_ERROR (WRONG_TYPE, AccessCasted<F&>::access(rE)); // allowed by typing, but fails at runtime since it isn't an F-object
cout << "Access(E(F)& as F&) --->" << AccessCasted<F&>::access(rEF) <<endl;
cout << "Access(E(F)* as F*) --->" << AccessCasted<F*>::access(pEF) <<endl;
cout << "Access(E(F)* as F&) --->" << AccessCasted<F&>::access(pEF) <<endl;
cout << "Access(E(F)& as F*) --->" << AccessCasted<F*>::access(pEF) <<endl;
cout << "Access(F* as X*) --->" << AccessCasted<X*>::access(pF) <<endl; // upcast to the other mixin is OK
cout << "Access(X(F)* as X*) --->" << AccessCasted<X*>::access(pXF) <<endl; // (and note: address adjustment due to mixin layout)
cout << "Access(F* as B*) --->" << AccessCasted<B*>::access(pF) <<endl; // upcast to base
cout << "Access(E(F)& as F&) --->" << AccessCasted<F&>::access(rEF) <<endl;
cout << "Access(E(F)* as F*) --->" << AccessCasted<F*>::access(pEF) <<endl;
cout << "Access(E(F)* as F&) --->" << AccessCasted<F&>::access(pEF) <<endl;
cout << "Access(E(F)& as F*) --->" << AccessCasted<F*>::access(pEF) <<endl;
cout << "Access(F* as X*) --->" << AccessCasted<X*>::access(pF) <<endl; // upcast to the other mixin is OK
cout << "Access(X(F)* as X*) --->" << AccessCasted<X*>::access(pXF) <<endl; // (and note: address adjustment due to mixin layout)
cout << "Access(F* as B&) --->" << AccessCasted<B&>::access(pF) <<endl; // upcast to base
cout << "Access(F* as E&) --->" << AccessCasted<E&>::access(pF) <<endl; // upcast to parent (retaining the RTTI)
// AccessCasted<X*>::access(pEF); // cross-cast not supported (to complicated to implement)
// AccessCasted<F*>::access(pXF); // downcast not possible, since X does not provide RTTI

View file

@ -102,6 +102,7 @@ namespace test{
cout << showSizeof(size_t(42),
string{"Universe"}) << endl;
// all the following ways to refer to an object are equivalent...
Wrmpf1 *p1 = &rmpf1;
Wrmpf1 *p2 = 0;
cout << showSizeof(p1) << endl;

View file

@ -100,7 +100,7 @@ namespace test{
CHECK (contains (string(v0), "Variant"));
CHECK (contains (string(v0), "bool"));
CHECK (contains (string(v0), "0"));
CHECK (contains (string(v0), "false"));
CHECK (contains (string(v1), "Variant"));
CHECK (contains (string(v1), "int"));
@ -111,7 +111,7 @@ namespace test{
CHECK (contains (string(v2), "lololo"));
CHECK (contains (string(v3), "Variant"));
CHECK (contains (string(v3), "lib::time::Time"));
CHECK (contains (string(v3), "Time"));
CHECK (contains (string(v3), "0:00:00.000"));
}