Jlm
DisjointSetTests.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2020 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
9 
10 static void
12 {
13  std::cout << "{";
14  for (auto & member : set)
15  std::cout << member << " ";
16  std::cout << "}";
17 }
18 
19 static void
21 {
22  for (auto & set : djset)
23  print(set);
24 
25  std::cout << "\n";
26 }
27 
28 TEST(DisjointSetTests, test)
29 {
30  using namespace jlm;
31 
32  jlm::util::DisjointSet<int> djset({ 1, 2, 3, 4, 5 });
33  print(djset);
34  assert(djset.nvalues() == 5 && djset.nsets() == 5);
35 
36  auto s1 = djset.find_or_insert(6);
37  auto s2 = djset.find(6);
38  print(djset);
39  EXPECT_EQ(s1, s2);
40  EXPECT_EQ(djset.nvalues(), 6u);
41  EXPECT_EQ(djset.nsets(), 6u);
42 
43  auto root = djset.merge(1, 2);
44  print(djset);
45  EXPECT_TRUE(root->is_root());
46  EXPECT_EQ(root->nmembers(), 2u);
47  EXPECT_EQ(djset.nvalues(), 6u);
48  EXPECT_EQ(djset.nsets(), 5u);
49 
50  root = djset.merge(6, 5);
51  print(djset);
52  EXPECT_TRUE(root->is_root());
53  EXPECT_EQ(root->nmembers(), 2u);
54  EXPECT_EQ(djset.nvalues(), 6u);
55  EXPECT_EQ(djset.nsets(), 4u);
56 
57  root = djset.merge(1, 6);
58  print(djset);
59  EXPECT_TRUE(root->is_root());
60  EXPECT_EQ(root->nmembers(), 4u);
61  EXPECT_EQ(djset.nvalues(), 6u);
62  EXPECT_EQ(djset.nsets(), 3u);
63  EXPECT_EQ(djset.find(2), djset.find(5));
64 
65  djset.clear();
66  print(djset);
67  EXPECT_EQ(djset.nvalues(), 0u);
68  EXPECT_EQ(djset.nsets(), 0u);
69 }
static void print(const jlm::util::DisjointSet< int >::Set &set)
TEST(DisjointSetTests, test)