Jlm
Loading...
Searching...
No Matches
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
10static void
12{
13 std::cout << "{";
14 for (auto & member : set)
15 std::cout << member << " ";
16 std::cout << "}";
17}
18
19static void
21{
22 for (auto & set : djset)
23 print(set);
24
25 std::cout << "\n";
26}
27
28TEST(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)