diff --git a/upptst/SvoValue/Checks.cpp b/upptst/SvoValue/Checks.cpp new file mode 100644 index 000000000..2cc90b781 --- /dev/null +++ b/upptst/SvoValue/Checks.cpp @@ -0,0 +1,153 @@ +#include "SvoValue.h" + +void DumpNumber(const Value& v) +{ + RDUMP((int)v); + RDUMP((double)v); + RDUMP((int64)v); + RDUMP((bool)v); +} + +int xx; + +Value Opt0(); + +void Opt() { + Value v = Opt0(); + xx = v; +} + +void CheckString() +{ + Value v = "ahoj"; + for(int i = 0; i < 2; i++) { + String s = v; + RDUMP(s); + ASSERT(s == "ahoj"); + WString ws = v; + RDUMP(ws); + ASSERT(ws == WString("ahoj")); + v = ws; + } + v = String("ahoj"); + Value w = WString("ahoj"); + ASSERT(v == w); + RDUMP(GetHashValue(v)); + RDUMP(GetHashValue(w)); + ASSERT(GetHashValue(v) == GetHashValue(w)); +} + +void CheckDateTime() +{ + Time tm = GetSysTime(); + Date dt = tm; + + Value c; + Value v = tm; + RDUMP(v); + ASSERT(v == dt); + Date xx = v; + ASSERT(xx == dt); + c = v; + RDUMP(c); + ASSERT(c == dt); + Value cv = v; + RDUMP(cv); + ASSERT(cv == dt); + + Value v2 = tm; + RDUMP(v2); + ASSERT(v2 == v); + c = v; + RDUMP(c); + ASSERT(c == dt); + ASSERT(c == tm); + + v = dt; + v2 = ToTime(v); + + ASSERT(v == v2); + ASSERT(GetHashValue(v) == GetHashValue(v2)); +} + +void CheckValueMap() +{ + RLOG("------------------------------"); + RLOG("CheckValueMap"); + Value x = 123; + Value y = x; + ValueMap h; + h.Add("0", 123); + RDUMP(h["0"]); + h.Add("1", Date(2001, 12, 1)); + h.Add("2", "test"); + + Value v = h; + ASSERT(v.GetCount() == 3); + RDUMP(v["0"]); + ASSERT(v["0"] == 123); + ASSERT(v["1"] == Date(2001, 12, 1)); + ASSERT(v["2"] == "test"); + + ValueMap hh = v; + ASSERT(hh == h); +} + +void OtherChecks() +{ + Value c; + + ASSERT(c.IsVoid()); + RDUMP(c.IsVoid()); + + Value x = "Ahoj"; + String xx = x; + RDUMP(xx); + ASSERT(xx == "Ahoj"); + + Value xw = WString("Ahoj"); + RDUMP(xw); + RDUMP(xw == x); + + Value xc = x; + RDUMP(xc); + c = xc; + RDUMP(c); + + Value y = 123; + int yy = y; + RDUMP(yy); + + Value xn = (int)Null; + RDUMP(IsNull(xn)); + RDUMP(IsNull(yy)); + + Value yc = y; + RDUMP(y); + + c = y; + RDUMP(c); + + Value v2 = 123.0; + Value v3 = 123; + Value v4 = 125; + + RDUMP(v2 == y); + RDUMP(v3 == y); + RDUMP(v4 == y); + RDUMP(v4 == v2); + + Value uu = Uuid::Create(); + RDUMP(uu); + Value uuc = uu; + RDUMP(uuc); + + { + Color c = Blue; + Value v = c; + RDUMP(v); + Value v2 = v; + c = v2; + RDUMP(c); + } +} diff --git a/upptst/SvoValue/SvoValue.cpp b/upptst/SvoValue/SvoValue.cpp new file mode 100644 index 000000000..d7a08e6f6 --- /dev/null +++ b/upptst/SvoValue/SvoValue.cpp @@ -0,0 +1,57 @@ +#include "SvoValue.h" + +CONSOLE_APP_MAIN +{ + Value v; + ASSERT(v.IsVoid()); + + CheckType(Value(), true); + CheckType(String("ahoj"), false, true); + CheckType(WString("ahoj")); + CheckType(123); + CheckType(123.0, false, true); + CheckType(true); + CheckType((int64)123); + CheckType(Date(2012, 1, 1)); + CheckType(Time(2012, 1, 1, 15, 30), false, true); + ValueArray va; + va.Add(123); + CheckType(va, false, true); + ValueMap map; + map.Add("1", 1); + map.Add("2", 2); + CheckType(map, false, true); + CheckType(Size(20, 20), false, true); + CheckType(Rect(0, 0, 123, 123), false, true); + CheckType(Blue(), false, true); + CheckType(Uuid::Create(), false, true); + + v = ErrorValue("error"); + CheckType(v, true); + ASSERT(v.IsVoid()); + ASSERT(v.IsError()); + RDUMP(GetErrorText(v)); + ASSERT(GetErrorText(v) == "error"); + + CheckValueMap(); + + CheckNumber(); + CheckNumber(); + CheckNumber(); + CheckNumber(); + + RLOG("------------------------------"); + RLOG("CheckString"); + CheckString(); + + RLOG("------------------------------"); + RLOG("CheckDateTime"); + CheckDateTime(); + + RLOG("------------------------------"); + RLOG("OtherChecks"); + OtherChecks(); + + RLOG("------------------------------"); + RLOG("######## Everything is OK"); +} diff --git a/upptst/SvoValue/SvoValue.h b/upptst/SvoValue/SvoValue.h new file mode 100644 index 000000000..a1ea7d589 --- /dev/null +++ b/upptst/SvoValue/SvoValue.h @@ -0,0 +1,68 @@ +#ifndef _SvoValue_SvoValue_h_ +#define _SvoValue_SvoValue_h_ + +#include + +using namespace Upp; + +void DumpNumber(const Value& v); +Value Opt0(); +void Opt(); +void CheckString(); +void CheckDateTime(); +void CheckValueMap(); +void OtherChecks(); + +template +void CheckNumber() +{ + RLOG("---------------------------"); + RLOG("CheckNumber " << typeid(T).name()); + Value v = (T)123; + Value v2 = (T)0; + Value vn = (T)Null; + Value dv = 123.0; + ASSERT(vn.Is() || GetHashValue(v) == GetHashValue(dv)); + ASSERT(v != v2); + ASSERT(v != vn); + ASSERT(IsNull(vn) || vn.Is()); + DumpNumber(v); + DumpNumber(vn); + Value v1 = v; + RDUMP(v1); + RDUMP(v2); + RDUMP(v1 != v2); + ASSERT(v1 != v2); + v2 = v1; + RDUMP(v1); + RDUMP(v2); + RDUMP(v1 == v2); + ASSERT(v1 == v2); + Opt(); +} + +template +void CheckType(const T& x, bool isvoid = false, bool checkhash = false) +{ + RLOG("---------------------------"); + RLOG("CheckType " << typeid(T).name()); + Value v = x; + RDUMP(v); + ASSERT(isvoid ? v.IsVoid() : v.Is()); + String h = StoreAsString(v); + Value vv; + LoadFromString(vv, h); + RDUMP(vv); + ASSERT(vv == v); + T xx = vv; + RDUMP(xx); + ASSERT(vv == v); + RDUMP(GetHashValue(v)); + RDUMP(GetHashValue(xx)); + ASSERT(!checkhash || GetHashValue(v) == GetHashValue(xx)); + + Value vn = (T)Null; + ASSERT(IsNull(vn) || vn.Is()); +} + +#endif diff --git a/upptst/SvoValue/SvoValue.upp b/upptst/SvoValue/SvoValue.upp new file mode 100644 index 000000000..b09ca36ff --- /dev/null +++ b/upptst/SvoValue/SvoValue.upp @@ -0,0 +1,16 @@ +description "Value unit testing\377"; + +optimize_speed; + +uses + Core; + +file + SvoValue.h, + SvoValue2.cpp, + Checks.cpp, + SvoValue.cpp optimize_speed; + +mainconfig + "" = "SSE2"; + diff --git a/upptst/SvoValue/SvoValue2.cpp b/upptst/SvoValue/SvoValue2.cpp new file mode 100644 index 000000000..e0b6d186c --- /dev/null +++ b/upptst/SvoValue/SvoValue2.cpp @@ -0,0 +1,7 @@ +#include "SvoValue.h" + +Value Opt0() +{ + return 123; +} + diff --git a/upptst/SvoValue/init b/upptst/SvoValue/init new file mode 100644 index 000000000..3957f4265 --- /dev/null +++ b/upptst/SvoValue/init @@ -0,0 +1,4 @@ +#ifndef _SvoValue_icpp_init_stub +#define _SvoValue_icpp_init_stub +#include "Core/init" +#endif