1baee655cSJakob Stoklund Olesen //===---- ADT/IntEqClassesTest.cpp - IntEqClasses unit tests ----*- C++ -*-===//
2baee655cSJakob Stoklund Olesen //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6baee655cSJakob Stoklund Olesen //
7baee655cSJakob Stoklund Olesen //===----------------------------------------------------------------------===//
8baee655cSJakob Stoklund Olesen
9baee655cSJakob Stoklund Olesen #include "llvm/ADT/IntEqClasses.h"
10baee655cSJakob Stoklund Olesen #include "gtest/gtest.h"
11baee655cSJakob Stoklund Olesen
12baee655cSJakob Stoklund Olesen using namespace llvm;
13baee655cSJakob Stoklund Olesen
14baee655cSJakob Stoklund Olesen namespace {
15baee655cSJakob Stoklund Olesen
TEST(IntEqClasses,Simple)16baee655cSJakob Stoklund Olesen TEST(IntEqClasses, Simple) {
17baee655cSJakob Stoklund Olesen IntEqClasses ec(10);
18baee655cSJakob Stoklund Olesen
19baee655cSJakob Stoklund Olesen ec.join(0, 1);
20baee655cSJakob Stoklund Olesen ec.join(3, 2);
21baee655cSJakob Stoklund Olesen ec.join(4, 5);
22baee655cSJakob Stoklund Olesen ec.join(7, 6);
23baee655cSJakob Stoklund Olesen
24baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(0));
25baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(1));
26baee655cSJakob Stoklund Olesen EXPECT_EQ(2u, ec.findLeader(2));
27baee655cSJakob Stoklund Olesen EXPECT_EQ(2u, ec.findLeader(3));
28baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(4));
29baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(5));
30baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(6));
31baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(7));
32baee655cSJakob Stoklund Olesen EXPECT_EQ(8u, ec.findLeader(8));
33baee655cSJakob Stoklund Olesen EXPECT_EQ(9u, ec.findLeader(9));
34baee655cSJakob Stoklund Olesen
35baee655cSJakob Stoklund Olesen // join two non-leaders.
36baee655cSJakob Stoklund Olesen ec.join(1, 3);
37baee655cSJakob Stoklund Olesen
38baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(0));
39baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(1));
40baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(2));
41baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(3));
42baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(4));
43baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(5));
44baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(6));
45baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(7));
46baee655cSJakob Stoklund Olesen EXPECT_EQ(8u, ec.findLeader(8));
47baee655cSJakob Stoklund Olesen EXPECT_EQ(9u, ec.findLeader(9));
48baee655cSJakob Stoklund Olesen
49baee655cSJakob Stoklund Olesen // join two leaders.
50baee655cSJakob Stoklund Olesen ec.join(4, 8);
51baee655cSJakob Stoklund Olesen
52baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(0));
53baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(1));
54baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(2));
55baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(3));
56baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(4));
57baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(5));
58baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(6));
59baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(7));
60baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(8));
61baee655cSJakob Stoklund Olesen EXPECT_EQ(9u, ec.findLeader(9));
62baee655cSJakob Stoklund Olesen
63baee655cSJakob Stoklund Olesen // join mixed.
64baee655cSJakob Stoklund Olesen ec.join(9, 1);
65baee655cSJakob Stoklund Olesen
66baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(0));
67baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(1));
68baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(2));
69baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(3));
70baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(4));
71baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(5));
72baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(6));
73baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(7));
74baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(8));
75baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(9));
76baee655cSJakob Stoklund Olesen
77baee655cSJakob Stoklund Olesen // compressed map.
78baee655cSJakob Stoklund Olesen ec.compress();
79baee655cSJakob Stoklund Olesen EXPECT_EQ(3u, ec.getNumClasses());
80baee655cSJakob Stoklund Olesen
81baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec[0]);
82baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec[1]);
83baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec[2]);
84baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec[3]);
85baee655cSJakob Stoklund Olesen EXPECT_EQ(1u, ec[4]);
86baee655cSJakob Stoklund Olesen EXPECT_EQ(1u, ec[5]);
87baee655cSJakob Stoklund Olesen EXPECT_EQ(2u, ec[6]);
88baee655cSJakob Stoklund Olesen EXPECT_EQ(2u, ec[7]);
89baee655cSJakob Stoklund Olesen EXPECT_EQ(1u, ec[8]);
90baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec[9]);
91baee655cSJakob Stoklund Olesen
92baee655cSJakob Stoklund Olesen // uncompressed map.
93baee655cSJakob Stoklund Olesen ec.uncompress();
94baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(0));
95baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(1));
96baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(2));
97baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(3));
98baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(4));
99baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(5));
100baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(6));
101baee655cSJakob Stoklund Olesen EXPECT_EQ(6u, ec.findLeader(7));
102baee655cSJakob Stoklund Olesen EXPECT_EQ(4u, ec.findLeader(8));
103baee655cSJakob Stoklund Olesen EXPECT_EQ(0u, ec.findLeader(9));
104baee655cSJakob Stoklund Olesen }
105baee655cSJakob Stoklund Olesen
106baee655cSJakob Stoklund Olesen } // end anonymous namespace
107