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