12a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//===---- ADT/IntEqClassesTest.cpp - IntEqClasses unit tests ----*- C++ -*-===//
22a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//
32a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//                     The LLVM Compiler Infrastructure
42a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//
52a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen// This file is distributed under the University of Illinois Open Source
62a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen// License. See LICENSE.TXT for details.
72a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//
82a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen//===----------------------------------------------------------------------===//
92a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
102a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen#include "llvm/ADT/IntEqClasses.h"
112a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen#include "gtest/gtest.h"
122a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
132a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesenusing namespace llvm;
142a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
152a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesennamespace {
162a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
172a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund OlesenTEST(IntEqClasses, Simple) {
182a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  IntEqClasses ec(10);
192a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
202a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(0, 1);
212a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(3, 2);
222a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(4, 5);
232a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(7, 6);
242a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
252a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(0));
262a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(1));
272a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(2u, ec.findLeader(2));
282a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(2u, ec.findLeader(3));
292a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(4));
302a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(5));
312a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(6));
322a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(7));
332a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(8u, ec.findLeader(8));
342a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(9u, ec.findLeader(9));
352a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
362a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  // join two non-leaders.
372a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(1, 3);
382a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
392a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(0));
402a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(1));
412a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(2));
422a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(3));
432a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(4));
442a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(5));
452a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(6));
462a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(7));
472a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(8u, ec.findLeader(8));
482a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(9u, ec.findLeader(9));
492a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
502a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  // join two leaders.
512a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(4, 8);
522a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
532a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(0));
542a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(1));
552a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(2));
562a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(3));
572a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(4));
582a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(5));
592a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(6));
602a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(7));
612a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(8));
622a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(9u, ec.findLeader(9));
632a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
642a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  // join mixed.
652a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.join(9, 1);
662a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
672a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(0));
682a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(1));
692a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(2));
702a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(3));
712a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(4));
722a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(5));
732a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(6));
742a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(7));
752a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(8));
762a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(9));
772a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
782a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  // compressed map.
792a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.compress();
802a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(3u, ec.getNumClasses());
812a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
822a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec[0]);
832a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec[1]);
842a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec[2]);
852a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec[3]);
862a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(1u, ec[4]);
872a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(1u, ec[5]);
882a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(2u, ec[6]);
892a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(2u, ec[7]);
902a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(1u, ec[8]);
912a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec[9]);
922a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
932a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  // uncompressed map.
942a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  ec.uncompress();
952a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(0));
962a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(1));
972a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(2));
982a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(3));
992a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(4));
1002a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(5));
1012a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(6));
1022a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(6u, ec.findLeader(7));
1032a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(4u, ec.findLeader(8));
1042a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen  EXPECT_EQ(0u, ec.findLeader(9));
1052a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen}
1062a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen
1072a6899c5391a9aada02686dee29f9b56218ed1d3Jakob Stoklund Olesen} // end anonymous namespace
108