/** * Copyright 2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include "utils/ordered_set.h" #include "common/common_test.h" using std::cout; using std::endl; using std::string; namespace mindspore { class TestOrderedSet : public UT::Common { public: TestOrderedSet() { std::shared_ptr e; for (int i = 1; i <= 10; i++) { e = std::make_shared(i); osa.add(e); } for (int i = 11; i <= 20; i++) { e = std::make_shared(i); osa.add(e); osb.add(e); } for (int i = 21; i <= 30; i++) { e = std::make_shared(i); osb.add(e); osc.add(e); } } public: OrderedSet> osa; OrderedSet> osb; OrderedSet> osc; }; TEST_F(TestOrderedSet, test_constructor) { OrderedSet> osa_copy = osa; ASSERT_EQ(osa_copy.size(), osa.size()); std::shared_ptr e = std::make_shared(1); OrderedSet> se; se.add(std::make_shared(10)); se.add(std::make_shared(20)); OrderedSet> order_se(se); ASSERT_EQ(order_se.size(), 2); } TEST_F(TestOrderedSet, test_add_remove_clear) { OrderedSet> res; res.add(std::make_shared(1)); std::shared_ptr e = std::make_shared(2); std::shared_ptr e2 = std::make_shared(10); res.add(e); ASSERT_EQ(res.size(), 2); ASSERT_EQ(res.count(e), 1); auto elem = res.back(); ASSERT_EQ(elem, e); res.erase(e); ASSERT_EQ(res.size(), 1); res.clear(); ASSERT_EQ(res.size(), 0); } TEST_F(TestOrderedSet, test_add_remove_first) { OrderedSet a; a.add(1); a.add(2); a.add(3); a.erase(1); auto first = a.pop(); // 1 removed, 2 3 followd, 2 should be the poped one, remaining size = 1 ASSERT_EQ(first, 2); ASSERT_EQ(a.size(), 1); } TEST_F(TestOrderedSet, test_compare) { OrderedSet> c1; OrderedSet> c2; std::shared_ptr e1 = std::make_shared(10); std::shared_ptr e2 = std::make_shared(20); c1.add(e1); c1.add(e2); c2.add(e1); c2.add(e2); ASSERT_EQ(c1, c2); } TEST_F(TestOrderedSet, test_pop) { OrderedSet> oset; oset.add(std::make_shared(10)); oset.add(std::make_shared(20)); oset.add(std::make_shared(30)); std::shared_ptr ele = oset.pop(); int pop_size = 0; pop_size++; while (oset.size() != 0) { ele = oset.pop(); pop_size++; } ASSERT_EQ(pop_size, 3); ASSERT_EQ(oset.size(), 0); } TEST_F(TestOrderedSet, test_operation) { ASSERT_TRUE(osc.is_disjoint(osa)); ASSERT_TRUE(!osb.is_disjoint(osa)); ASSERT_TRUE(osc.is_subset(osb)); ASSERT_TRUE(!osc.is_subset(osa)); OrderedSet> res_inter = osa | osb; ASSERT_EQ(res_inter.size(), 30); OrderedSet> res_union = osa & osb; ASSERT_EQ(res_union.size(), 10); OrderedSet> res_diff = osa - osb; ASSERT_EQ(res_diff.size(), 10); OrderedSet> res_symdiff = osa ^ osb; ASSERT_EQ(res_symdiff.size(), 20); } TEST_F(TestOrderedSet, test_contains) { OrderedSet> res; std::shared_ptr e1 = std::make_shared(10); std::shared_ptr e2 = std::make_shared(20); res.add(e1); ASSERT_TRUE(res.contains(e1)); ASSERT_TRUE(!res.contains(e2)); } } // namespace mindspore