IntEqClassesTest.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //===---- ADT/IntEqClassesTest.cpp - IntEqClasses unit tests ----*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "llvm/ADT/IntEqClasses.h"
  10. #include "gtest/gtest.h"
  11. using namespace llvm;
  12. namespace {
  13. TEST(IntEqClasses, Simple) {
  14. IntEqClasses ec(10);
  15. ec.join(0, 1);
  16. ec.join(3, 2);
  17. ec.join(4, 5);
  18. ec.join(7, 6);
  19. EXPECT_EQ(0u, ec.findLeader(0));
  20. EXPECT_EQ(0u, ec.findLeader(1));
  21. EXPECT_EQ(2u, ec.findLeader(2));
  22. EXPECT_EQ(2u, ec.findLeader(3));
  23. EXPECT_EQ(4u, ec.findLeader(4));
  24. EXPECT_EQ(4u, ec.findLeader(5));
  25. EXPECT_EQ(6u, ec.findLeader(6));
  26. EXPECT_EQ(6u, ec.findLeader(7));
  27. EXPECT_EQ(8u, ec.findLeader(8));
  28. EXPECT_EQ(9u, ec.findLeader(9));
  29. // join two non-leaders.
  30. ec.join(1, 3);
  31. EXPECT_EQ(0u, ec.findLeader(0));
  32. EXPECT_EQ(0u, ec.findLeader(1));
  33. EXPECT_EQ(0u, ec.findLeader(2));
  34. EXPECT_EQ(0u, ec.findLeader(3));
  35. EXPECT_EQ(4u, ec.findLeader(4));
  36. EXPECT_EQ(4u, ec.findLeader(5));
  37. EXPECT_EQ(6u, ec.findLeader(6));
  38. EXPECT_EQ(6u, ec.findLeader(7));
  39. EXPECT_EQ(8u, ec.findLeader(8));
  40. EXPECT_EQ(9u, ec.findLeader(9));
  41. // join two leaders.
  42. ec.join(4, 8);
  43. EXPECT_EQ(0u, ec.findLeader(0));
  44. EXPECT_EQ(0u, ec.findLeader(1));
  45. EXPECT_EQ(0u, ec.findLeader(2));
  46. EXPECT_EQ(0u, ec.findLeader(3));
  47. EXPECT_EQ(4u, ec.findLeader(4));
  48. EXPECT_EQ(4u, ec.findLeader(5));
  49. EXPECT_EQ(6u, ec.findLeader(6));
  50. EXPECT_EQ(6u, ec.findLeader(7));
  51. EXPECT_EQ(4u, ec.findLeader(8));
  52. EXPECT_EQ(9u, ec.findLeader(9));
  53. // join mixed.
  54. ec.join(9, 1);
  55. EXPECT_EQ(0u, ec.findLeader(0));
  56. EXPECT_EQ(0u, ec.findLeader(1));
  57. EXPECT_EQ(0u, ec.findLeader(2));
  58. EXPECT_EQ(0u, ec.findLeader(3));
  59. EXPECT_EQ(4u, ec.findLeader(4));
  60. EXPECT_EQ(4u, ec.findLeader(5));
  61. EXPECT_EQ(6u, ec.findLeader(6));
  62. EXPECT_EQ(6u, ec.findLeader(7));
  63. EXPECT_EQ(4u, ec.findLeader(8));
  64. EXPECT_EQ(0u, ec.findLeader(9));
  65. // compressed map.
  66. ec.compress();
  67. EXPECT_EQ(3u, ec.getNumClasses());
  68. EXPECT_EQ(0u, ec[0]);
  69. EXPECT_EQ(0u, ec[1]);
  70. EXPECT_EQ(0u, ec[2]);
  71. EXPECT_EQ(0u, ec[3]);
  72. EXPECT_EQ(1u, ec[4]);
  73. EXPECT_EQ(1u, ec[5]);
  74. EXPECT_EQ(2u, ec[6]);
  75. EXPECT_EQ(2u, ec[7]);
  76. EXPECT_EQ(1u, ec[8]);
  77. EXPECT_EQ(0u, ec[9]);
  78. // uncompressed map.
  79. ec.uncompress();
  80. EXPECT_EQ(0u, ec.findLeader(0));
  81. EXPECT_EQ(0u, ec.findLeader(1));
  82. EXPECT_EQ(0u, ec.findLeader(2));
  83. EXPECT_EQ(0u, ec.findLeader(3));
  84. EXPECT_EQ(4u, ec.findLeader(4));
  85. EXPECT_EQ(4u, ec.findLeader(5));
  86. EXPECT_EQ(6u, ec.findLeader(6));
  87. EXPECT_EQ(6u, ec.findLeader(7));
  88. EXPECT_EQ(4u, ec.findLeader(8));
  89. EXPECT_EQ(0u, ec.findLeader(9));
  90. }
  91. } // end anonymous namespace