You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

orderedset_test.cc 4.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /**
  2. * Copyright 2020 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include <iostream>
  17. #include <sstream>
  18. #include <memory>
  19. #include <algorithm>
  20. #include "utils/ordered_set.h"
  21. #include "utils/ordered_map.h"
  22. #include "common/common_test.h"
  23. using std::cout;
  24. using std::endl;
  25. using std::string;
  26. namespace mindspore {
  27. class TestOrderedSet : public UT::Common {
  28. public:
  29. TestOrderedSet() {
  30. std::shared_ptr<int> e;
  31. for (int i = 1; i <= 10; i++) {
  32. e = std::make_shared<int>(i);
  33. osa.add(e);
  34. }
  35. for (int i = 11; i <= 20; i++) {
  36. e = std::make_shared<int>(i);
  37. osa.add(e);
  38. osb.add(e);
  39. }
  40. for (int i = 21; i <= 30; i++) {
  41. e = std::make_shared<int>(i);
  42. osb.add(e);
  43. osc.add(e);
  44. }
  45. }
  46. public:
  47. OrderedSet<std::shared_ptr<int>> osa;
  48. OrderedSet<std::shared_ptr<int>> osb;
  49. OrderedSet<std::shared_ptr<int>> osc;
  50. };
  51. TEST_F(TestOrderedSet, test_constructor) {
  52. OrderedSet<std::shared_ptr<int>> osa_copy = osa;
  53. ASSERT_EQ(osa_copy.size(), osa.size());
  54. std::shared_ptr<int> e = std::make_shared<int>(1);
  55. OrderedSet<std::shared_ptr<int>> se;
  56. se.add(std::make_shared<int>(10));
  57. se.add(std::make_shared<int>(20));
  58. OrderedSet<std::shared_ptr<int>> order_se(se);
  59. ASSERT_EQ(order_se.size(), 2);
  60. }
  61. TEST_F(TestOrderedSet, test_add_remove_clear) {
  62. OrderedSet<std::shared_ptr<int>> res;
  63. res.add(std::make_shared<int>(1));
  64. std::shared_ptr<int> e = std::make_shared<int>(2);
  65. std::shared_ptr<int> e2 = std::make_shared<int>(10);
  66. res.add(e);
  67. ASSERT_EQ(res.size(), 2);
  68. ASSERT_EQ(res.count(e), 1);
  69. auto elem = res.back();
  70. ASSERT_EQ(elem, e);
  71. res.erase(e);
  72. ASSERT_EQ(res.size(), 1);
  73. res.clear();
  74. ASSERT_EQ(res.size(), 0);
  75. }
  76. TEST_F(TestOrderedSet, test_add_remove_first) {
  77. OrderedSet<int> a;
  78. a.add(1);
  79. a.add(2);
  80. a.add(3);
  81. a.erase(1);
  82. auto first = a.pop();
  83. // 1 removed, 2 3 followed, 2 should be the popped one, remaining size = 1
  84. ASSERT_EQ(first, 2);
  85. ASSERT_EQ(a.size(), 1);
  86. }
  87. TEST_F(TestOrderedSet, test_compare) {
  88. OrderedSet<std::shared_ptr<int>> c1;
  89. OrderedSet<std::shared_ptr<int>> c2;
  90. std::shared_ptr<int> e1 = std::make_shared<int>(10);
  91. std::shared_ptr<int> e2 = std::make_shared<int>(20);
  92. c1.add(e1);
  93. c1.add(e2);
  94. c2.add(e1);
  95. c2.add(e2);
  96. ASSERT_EQ(c1, c2);
  97. }
  98. TEST_F(TestOrderedSet, test_pop) {
  99. OrderedSet<std::shared_ptr<int>> oset;
  100. oset.add(std::make_shared<int>(10));
  101. oset.add(std::make_shared<int>(20));
  102. oset.add(std::make_shared<int>(30));
  103. std::shared_ptr<int> ele = oset.pop();
  104. int pop_size = 0;
  105. pop_size++;
  106. while (oset.size() != 0) {
  107. ele = oset.pop();
  108. pop_size++;
  109. }
  110. ASSERT_EQ(pop_size, 3);
  111. ASSERT_EQ(oset.size(), 0);
  112. }
  113. TEST_F(TestOrderedSet, test_operation) {
  114. ASSERT_TRUE(osc.is_disjoint(osa));
  115. ASSERT_TRUE(!osb.is_disjoint(osa));
  116. ASSERT_TRUE(osc.is_subset(osb));
  117. ASSERT_TRUE(!osc.is_subset(osa));
  118. OrderedSet<std::shared_ptr<int>> res_inter = osa | osb;
  119. ASSERT_EQ(res_inter.size(), 30);
  120. OrderedSet<std::shared_ptr<int>> res_union = osa & osb;
  121. ASSERT_EQ(res_union.size(), 10);
  122. OrderedSet<std::shared_ptr<int>> res_diff = osa - osb;
  123. ASSERT_EQ(res_diff.size(), 10);
  124. OrderedSet<std::shared_ptr<int>> res_symdiff = osa ^ osb;
  125. ASSERT_EQ(res_symdiff.size(), 20);
  126. }
  127. TEST_F(TestOrderedSet, test_contains) {
  128. OrderedSet<std::shared_ptr<int>> res;
  129. std::shared_ptr<int> e1 = std::make_shared<int>(10);
  130. std::shared_ptr<int> e2 = std::make_shared<int>(20);
  131. res.add(e1);
  132. ASSERT_TRUE(res.contains(e1));
  133. ASSERT_TRUE(!res.contains(e2));
  134. }
  135. TEST_F(TestOrderedSet, test_assign) {
  136. OrderedSet<int> s;
  137. s.add(10);
  138. ASSERT_EQ(s.size(), 1);
  139. OrderedSet<int> s1;
  140. s1.add(20);
  141. s1.add(30);
  142. ASSERT_EQ(s1.size(), 2);
  143. s = s1;
  144. ASSERT_EQ(s.size(), 2);
  145. ASSERT_EQ(s, s1);
  146. }
  147. TEST_F(TestOrderedSet, test_map_assign) {
  148. OrderedMap<int, int> m;
  149. m[10] = 10;
  150. ASSERT_EQ(m.size(), 1);
  151. OrderedMap<int, int> m1;
  152. m1[20] = 20;
  153. m1[30] = 30;
  154. ASSERT_EQ(m1.size(), 2);
  155. m = m1;
  156. ASSERT_EQ(m.size(), 2);
  157. ASSERT_EQ(m[20], m1[20]);
  158. ASSERT_EQ(m[30], m1[30]);
  159. }
  160. } // namespace mindspore