File: VariantTest.cpp

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (77 lines) | stat: -rw-r--r-- 1,518 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#include "Core/Variant.h"

BEGIN_TEST(VariantTest, Core) {
	Engine &e = gEngine();

	{
		Variant empty;
		CHECK(empty.empty());
		CHECK_EQ(::toS(empty), L"<empty>");
	}

	{
		Variant s(new (e) Str(S("Hello!")));
		CHECK(s.any());
		CHECK_EQ(::toS(s), L"Hello!");

		Variant c(s);
		CHECK_EQ(::toS(s), L"Hello!");

		c.deepCopy(new (e) CloneEnv());
		CHECK_EQ(::toS(s), L"Hello!");
	}

	{
		Array<Int> *v = new (e) Array<Int>();
		v->push(1); v->push(2); v->push(3);
		Variant a(v);

		CHECK_EQ(::toS(a), L"[1, 2, 3]");

		a.deepCopy(new (e) CloneEnv());
		CHECK_EQ(::toS(a), L"[1, 2, 3]");
	}

	{
		Variant i(20, e);
		CHECK_EQ(::toS(i), L"20");

		Variant j(i);
		CHECK_EQ(::toS(i), L"20");

		j.deepCopy(new (e) CloneEnv());
		CHECK_EQ(::toS(j), L"20");
	}

	/**
	 * Check the high-level C++ API as well!
	 */

	{
		Variant empty;

		// Should call the pointer overload.
		Variant str(new (e) Str(S("Hello!")), e);
		CHECK_EQ(::toS(str), L"Hello!");

		// Should call the template overload.
		Variant num(Int(100), e);
		CHECK_EQ(::toS(num), L"100");

		// Check contents.
		CHECK(str.has(StormInfo<Str *>::type(e)));
		CHECK(num.has(StormInfo<Int>::type(e)));

		// Extraction.
		CHECK_EQ(::toS(str.get<Str *>()), L"Hello!");
		CHECK_EQ(num.get<Int>(), 100);
		CHECK_EQ(*num.get<Int *>(), 100);
		CHECK_EQ(empty.get<Int *>(), (Int *)null);
		CHECK_EQ(str.get<Int *>(), (Int *)null);

		// Cant easily test this, as it prints.
		// CHECK_ERROR(str.get<Str>(), AssertionException);
	}

} END_TEST