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.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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 "common/common_test.h"
  22. using std::cout;
  23. using std::endl;
  24. using std::string;
  25. namespace mindspore {
  26. class TestOrderedSet : public UT::Common {
  27. public:
  28. TestOrderedSet() {
  29. std::shared_ptr<int> e;
  30. for (int i = 1; i <= 10; i++) {
  31. e = std::make_shared<int>(i);
  32. osa.add(e);
  33. }
  34. for (int i = 11; i <= 20; i++) {
  35. e = std::make_shared<int>(i);
  36. osa.add(e);
  37. osb.add(e);
  38. }
  39. for (int i = 21; i <= 30; i++) {
  40. e = std::make_shared<int>(i);
  41. osb.add(e);
  42. osc.add(e);
  43. }
  44. }
  45. public:
  46. OrderedSet<std::shared_ptr<int>> osa;
  47. OrderedSet<std::shared_ptr<int>> osb;
  48. OrderedSet<std::shared_ptr<int>> osc;
  49. };
  50. TEST_F(TestOrderedSet, test_constructor) {
  51. OrderedSet<std::shared_ptr<int>> osa_copy = osa;
  52. ASSERT_EQ(osa_copy.size(), osa.size());
  53. std::shared_ptr<int> e = std::make_shared<int>(1);
  54. OrderedSet<std::shared_ptr<int>> se;
  55. se.add(std::make_shared<int>(10));
  56. se.add(std::make_shared<int>(20));
  57. OrderedSet<std::shared_ptr<int>> order_se(se);
  58. ASSERT_EQ(order_se.size(), 2);
  59. }
  60. TEST_F(TestOrderedSet, test_add_remove_clear) {
  61. OrderedSet<std::shared_ptr<int>> res;
  62. res.add(std::make_shared<int>(1));
  63. std::shared_ptr<int> e = std::make_shared<int>(2);
  64. std::shared_ptr<int> e2 = std::make_shared<int>(10);
  65. res.add(e);
  66. ASSERT_EQ(res.size(), 2);
  67. ASSERT_EQ(res.count(e), 1);
  68. auto elem = res.back();
  69. ASSERT_EQ(elem, e);
  70. res.erase(e);
  71. ASSERT_EQ(res.size(), 1);
  72. res.clear();
  73. ASSERT_EQ(res.size(), 0);
  74. }
  75. TEST_F(TestOrderedSet, test_add_remove_first) {
  76. OrderedSet<int> a;
  77. a.add(1);
  78. a.add(2);
  79. a.add(3);
  80. a.erase(1);
  81. auto first = a.pop();
  82. // 1 removed, 2 3 followd, 2 should be the poped one, remaining size = 1
  83. ASSERT_EQ(first, 2);
  84. ASSERT_EQ(a.size(), 1);
  85. }
  86. TEST_F(TestOrderedSet, test_compare) {
  87. OrderedSet<std::shared_ptr<int>> c1;
  88. OrderedSet<std::shared_ptr<int>> c2;
  89. std::shared_ptr<int> e1 = std::make_shared<int>(10);
  90. std::shared_ptr<int> e2 = std::make_shared<int>(20);
  91. c1.add(e1);
  92. c1.add(e2);
  93. c2.add(e1);
  94. c2.add(e2);
  95. ASSERT_EQ(c1, c2);
  96. }
  97. TEST_F(TestOrderedSet, test_pop) {
  98. OrderedSet<std::shared_ptr<int>> oset;
  99. oset.add(std::make_shared<int>(10));
  100. oset.add(std::make_shared<int>(20));
  101. oset.add(std::make_shared<int>(30));
  102. std::shared_ptr<int> ele = oset.pop();
  103. int pop_size = 0;
  104. pop_size++;
  105. while (oset.size() != 0) {
  106. ele = oset.pop();
  107. pop_size++;
  108. }
  109. ASSERT_EQ(pop_size, 3);
  110. ASSERT_EQ(oset.size(), 0);
  111. }
  112. TEST_F(TestOrderedSet, test_operation) {
  113. ASSERT_TRUE(osc.is_disjoint(osa));
  114. ASSERT_TRUE(!osb.is_disjoint(osa));
  115. ASSERT_TRUE(osc.is_subset(osb));
  116. ASSERT_TRUE(!osc.is_subset(osa));
  117. OrderedSet<std::shared_ptr<int>> res_inter = osa | osb;
  118. ASSERT_EQ(res_inter.size(), 30);
  119. OrderedSet<std::shared_ptr<int>> res_union = osa & osb;
  120. ASSERT_EQ(res_union.size(), 10);
  121. OrderedSet<std::shared_ptr<int>> res_diff = osa - osb;
  122. ASSERT_EQ(res_diff.size(), 10);
  123. OrderedSet<std::shared_ptr<int>> res_symdiff = osa ^ osb;
  124. ASSERT_EQ(res_symdiff.size(), 20);
  125. }
  126. TEST_F(TestOrderedSet, test_contains) {
  127. OrderedSet<std::shared_ptr<int>> res;
  128. std::shared_ptr<int> e1 = std::make_shared<int>(10);
  129. std::shared_ptr<int> e2 = std::make_shared<int>(20);
  130. res.add(e1);
  131. ASSERT_TRUE(res.contains(e1));
  132. ASSERT_TRUE(!res.contains(e2));
  133. }
  134. } // namespace mindspore