forked from swiftlang/swift
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTreeScopedHashTableTests.cpp
128 lines (100 loc) · 3.11 KB
/
TreeScopedHashTableTests.cpp
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "swift/Basic/TreeScopedHashTable.h"
#include "gtest/gtest.h"
using namespace swift;
TEST(TreeScopedHashTableTest, T1) {
using HashtableTy = TreeScopedHashTable<unsigned, unsigned>;
using ScopeTy = HashtableTy::ScopeTy;
HashtableTy HT;
auto S1 = new ScopeTy(HT, 0);
HT.insertIntoScope(*S1, 1, 1001);
HT.insertIntoScope(*S1, 2, 1002);
auto S2 = new ScopeTy(HT, S1);
HT.insertIntoScope(*S2, 3, 2003);
HT.insertIntoScope(*S2, 4, 2004);
EXPECT_EQ(1001U, HT.lookup(*S1, 1));
EXPECT_EQ(1002U, HT.lookup(*S1, 2));
EXPECT_EQ(0U, HT.lookup(*S1, 3));
EXPECT_EQ(0U, HT.lookup(*S1, 4));
EXPECT_EQ(1001U, HT.lookup(*S2, 1));
EXPECT_EQ(1002U, HT.lookup(*S2, 2));
EXPECT_EQ(2003U, HT.lookup(*S2, 3));
EXPECT_EQ(2004U, HT.lookup(*S2, 4));
delete S2;
delete S1;
}
TEST(TreeScopedHashTableTest, T2) {
using HashtableTy = TreeScopedHashTable<unsigned, unsigned>;
using ScopeTy = HashtableTy::ScopeTy;
HashtableTy HT;
auto S1 = new ScopeTy(HT, 0);
HT.insertIntoScope(*S1, 1, 1001);
HT.insertIntoScope(*S1, 2, 1002);
auto S2 = new ScopeTy(HT, S1);
HT.insertIntoScope(*S2, 3, 2003);
HT.insertIntoScope(*S2, 4, 2004);
auto S3 = new ScopeTy(HT, S1);
HT.insertIntoScope(*S3, 1, 3001);
HT.insertIntoScope(*S3, 4, 3004);
EXPECT_EQ(1001U, HT.lookup(*S1, 1));
EXPECT_EQ(1002U, HT.lookup(*S1, 2));
EXPECT_EQ(0U, HT.lookup(*S1, 3));
EXPECT_EQ(0U, HT.lookup(*S1, 4));
EXPECT_EQ(1001U, HT.lookup(*S2, 1));
EXPECT_EQ(1002U, HT.lookup(*S2, 2));
EXPECT_EQ(2003U, HT.lookup(*S2, 3));
EXPECT_EQ(2004U, HT.lookup(*S2, 4));
EXPECT_EQ(3001U, HT.lookup(*S3, 1));
EXPECT_EQ(1002U, HT.lookup(*S3, 2));
EXPECT_EQ(0U, HT.lookup(*S3, 3));
EXPECT_EQ(3004U, HT.lookup(*S3, 4));
EXPECT_EQ(true, HT.count(*S3, 1));
EXPECT_EQ(true, HT.count(*S3, 2));
EXPECT_EQ(false, HT.count(*S3, 3));
EXPECT_EQ(true, HT.count(*S3, 4));
delete S2;
EXPECT_EQ(1001U, HT.lookup(*S1, 1));
EXPECT_EQ(1002U, HT.lookup(*S1, 2));
EXPECT_EQ(0U, HT.lookup(*S1, 3));
EXPECT_EQ(0U, HT.lookup(*S1, 4));
EXPECT_EQ(3001U, HT.lookup(*S3, 1));
EXPECT_EQ(1002U, HT.lookup(*S3, 2));
EXPECT_EQ(0U, HT.lookup(*S3, 3));
EXPECT_EQ(3004U, HT.lookup(*S3, 4));
delete S3;
EXPECT_EQ(1001U, HT.lookup(*S1, 1));
EXPECT_EQ(1002U, HT.lookup(*S1, 2));
EXPECT_EQ(0U, HT.lookup(*S1, 3));
EXPECT_EQ(0U, HT.lookup(*S1, 4));
delete S1;
}
TEST(TreeScopedHashTableTest, IteratorTest) {
using HashtableTy = TreeScopedHashTable<unsigned, int>;
using ScopeTy = HashtableTy::ScopeTy;
HashtableTy HT;
auto S1 = new ScopeTy(HT, 0);
HT.insertIntoScope(*S1, 1, 1001);
HT.insertIntoScope(*S1, 2, 1002);
auto S2 = new ScopeTy(HT, S1);
HT.insertIntoScope(*S2, 1, 2001);
HT.insertIntoScope(*S2, 4, 2004);
auto S3 = new ScopeTy(HT, S1);
HT.insertIntoScope(*S3, 1, 3001);
HT.insertIntoScope(*S3, 4, 3004);
{
auto I = HT.begin(*S1, 1);
EXPECT_EQ(1001, *I);
I++;
EXPECT_EQ(HT.end(), I);
}
{
auto I = HT.begin(*S3, 1);
EXPECT_EQ(3001, *I);
I++;
EXPECT_EQ(1001, *I);
I++;
EXPECT_EQ(HT.end(), I);
}
delete S3;
delete S2;
delete S1;
}