| //===---- ADT/IntEqClassesTest.cpp - IntEqClasses unit tests ----*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ADT/IntEqClasses.h" |
| #include "gtest/gtest.h" |
| |
| using namespace llvm; |
| |
| namespace { |
| |
| TEST(IntEqClasses, Simple) { |
| IntEqClasses ec(10); |
| |
| ec.join(0, 1); |
| ec.join(3, 2); |
| ec.join(4, 5); |
| ec.join(7, 6); |
| |
| EXPECT_EQ(0u, ec.findLeader(0)); |
| EXPECT_EQ(0u, ec.findLeader(1)); |
| EXPECT_EQ(2u, ec.findLeader(2)); |
| EXPECT_EQ(2u, ec.findLeader(3)); |
| EXPECT_EQ(4u, ec.findLeader(4)); |
| EXPECT_EQ(4u, ec.findLeader(5)); |
| EXPECT_EQ(6u, ec.findLeader(6)); |
| EXPECT_EQ(6u, ec.findLeader(7)); |
| EXPECT_EQ(8u, ec.findLeader(8)); |
| EXPECT_EQ(9u, ec.findLeader(9)); |
| |
| // join two non-leaders. |
| ec.join(1, 3); |
| |
| EXPECT_EQ(0u, ec.findLeader(0)); |
| EXPECT_EQ(0u, ec.findLeader(1)); |
| EXPECT_EQ(0u, ec.findLeader(2)); |
| EXPECT_EQ(0u, ec.findLeader(3)); |
| EXPECT_EQ(4u, ec.findLeader(4)); |
| EXPECT_EQ(4u, ec.findLeader(5)); |
| EXPECT_EQ(6u, ec.findLeader(6)); |
| EXPECT_EQ(6u, ec.findLeader(7)); |
| EXPECT_EQ(8u, ec.findLeader(8)); |
| EXPECT_EQ(9u, ec.findLeader(9)); |
| |
| // join two leaders. |
| ec.join(4, 8); |
| |
| EXPECT_EQ(0u, ec.findLeader(0)); |
| EXPECT_EQ(0u, ec.findLeader(1)); |
| EXPECT_EQ(0u, ec.findLeader(2)); |
| EXPECT_EQ(0u, ec.findLeader(3)); |
| EXPECT_EQ(4u, ec.findLeader(4)); |
| EXPECT_EQ(4u, ec.findLeader(5)); |
| EXPECT_EQ(6u, ec.findLeader(6)); |
| EXPECT_EQ(6u, ec.findLeader(7)); |
| EXPECT_EQ(4u, ec.findLeader(8)); |
| EXPECT_EQ(9u, ec.findLeader(9)); |
| |
| // join mixed. |
| ec.join(9, 1); |
| |
| EXPECT_EQ(0u, ec.findLeader(0)); |
| EXPECT_EQ(0u, ec.findLeader(1)); |
| EXPECT_EQ(0u, ec.findLeader(2)); |
| EXPECT_EQ(0u, ec.findLeader(3)); |
| EXPECT_EQ(4u, ec.findLeader(4)); |
| EXPECT_EQ(4u, ec.findLeader(5)); |
| EXPECT_EQ(6u, ec.findLeader(6)); |
| EXPECT_EQ(6u, ec.findLeader(7)); |
| EXPECT_EQ(4u, ec.findLeader(8)); |
| EXPECT_EQ(0u, ec.findLeader(9)); |
| |
| // compressed map. |
| ec.compress(); |
| EXPECT_EQ(3u, ec.getNumClasses()); |
| |
| EXPECT_EQ(0u, ec[0]); |
| EXPECT_EQ(0u, ec[1]); |
| EXPECT_EQ(0u, ec[2]); |
| EXPECT_EQ(0u, ec[3]); |
| EXPECT_EQ(1u, ec[4]); |
| EXPECT_EQ(1u, ec[5]); |
| EXPECT_EQ(2u, ec[6]); |
| EXPECT_EQ(2u, ec[7]); |
| EXPECT_EQ(1u, ec[8]); |
| EXPECT_EQ(0u, ec[9]); |
| |
| // uncompressed map. |
| ec.uncompress(); |
| EXPECT_EQ(0u, ec.findLeader(0)); |
| EXPECT_EQ(0u, ec.findLeader(1)); |
| EXPECT_EQ(0u, ec.findLeader(2)); |
| EXPECT_EQ(0u, ec.findLeader(3)); |
| EXPECT_EQ(4u, ec.findLeader(4)); |
| EXPECT_EQ(4u, ec.findLeader(5)); |
| EXPECT_EQ(6u, ec.findLeader(6)); |
| EXPECT_EQ(6u, ec.findLeader(7)); |
| EXPECT_EQ(4u, ec.findLeader(8)); |
| EXPECT_EQ(0u, ec.findLeader(9)); |
| } |
| |
| } // end anonymous namespace |