annotate unittests/ADT/EquivalenceClassesTest.cpp @ 148:63bd29f05246

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 19:46:37 +0900
parents c2174574ed3a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
1 //=== llvm/unittest/ADT/EquivalenceClassesTest.cpp - the structure tests --===//
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
2 //
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
134
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
6 //
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
8
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
9 #include "llvm/ADT/EquivalenceClasses.h"
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
10 #include "gtest/gtest.h"
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
11
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
12 using namespace llvm;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
13
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
14 namespace llvm {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
15
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
16 TEST(EquivalenceClassesTest, NoMerges) {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
17 EquivalenceClasses<int> EqClasses;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
18 // Until we merged any sets, check that every element is only equivalent to
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
19 // itself.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
20 for (int i = 0; i < 3; i++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
21 for (int j = 0; j < 3; j++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
22 if (i == j)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
23 EXPECT_TRUE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
24 else
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
25 EXPECT_FALSE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
26 }
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
27
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
28 TEST(EquivalenceClassesTest, SimpleMerge1) {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
29 EquivalenceClasses<int> EqClasses;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
30 // Check that once we merge (A, B), (B, C), (C, D), then all elements belong
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
31 // to one set.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
32 EqClasses.unionSets(0, 1);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
33 EqClasses.unionSets(1, 2);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
34 EqClasses.unionSets(2, 3);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
35 for (int i = 0; i < 4; ++i)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
36 for (int j = 0; j < 4; ++j)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
37 EXPECT_TRUE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
38 }
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
39
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
40 TEST(EquivalenceClassesTest, SimpleMerge2) {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
41 EquivalenceClasses<int> EqClasses;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
42 // Check that once we merge (A, B), (C, D), (A, C), then all elements belong
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
43 // to one set.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
44 EqClasses.unionSets(0, 1);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
45 EqClasses.unionSets(2, 3);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
46 EqClasses.unionSets(0, 2);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
47 for (int i = 0; i < 4; ++i)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
48 for (int j = 0; j < 4; ++j)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
49 EXPECT_TRUE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
50 }
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
51
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
52 TEST(EquivalenceClassesTest, TwoSets) {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
53 EquivalenceClasses<int> EqClasses;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
54 // Form sets of odd and even numbers, check that we split them into these
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
55 // two sets correcrly.
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
56 for (int i = 0; i < 30; i += 2)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
57 EqClasses.unionSets(0, i);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
58 for (int i = 1; i < 30; i += 2)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
59 EqClasses.unionSets(1, i);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
60
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
61 for (int i = 0; i < 30; i++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
62 for (int j = 0; j < 30; j++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
63 if (i % 2 == j % 2)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
64 EXPECT_TRUE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
65 else
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
66 EXPECT_FALSE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
67 }
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
68
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
69 TEST(EquivalenceClassesTest, MultipleSets) {
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
70 EquivalenceClasses<int> EqClasses;
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
71 // Split numbers from [0, 100) into sets so that values in the same set have
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
72 // equal remainders (mod 17).
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
73 for (int i = 0; i < 100; i++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
74 EqClasses.unionSets(i % 17, i);
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
75
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
76 for (int i = 0; i < 100; i++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
77 for (int j = 0; j < 100; j++)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
78 if (i % 17 == j % 17)
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
79 EXPECT_TRUE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
80 else
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
81 EXPECT_FALSE(EqClasses.isEquivalent(i, j));
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
82 }
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
83
3a76565eade5 update 5.0.1
mir3636
parents:
diff changeset
84 } // llvm