QuickUnion_RootFunctionsTest.ixx
QuickUnion_RootFunctionsTest.ixx
Download source code for Visual Studio 2022 from Github
QuickUnion_RootFunctionsTest.ixx
#include "pch.h"
#include <iostream>
#include <crtdbg.h>
#include <span>
#include<tuple>
import unionfind;
import nodes;
import utilitytest;
import unionfindtest;
enum { index_node, parent_node };
class QuickUnion_RootFunctionsTest : public ::testing::Test {
protected:
OneBasedArray oneBasedArray;
ZeroBasedArray zeroBasedArray;
public:
virtual void SetUp() override{}
virtual void TearDown() override {}
};
void assignParent(Nodes &nodes, std::initializer_list<std::tuple<int, int>> listOfPairIndexAndParent)
{
nodes.resize(listOfPairIndexAndParent.size() );
for (auto pip : listOfPairIndexAndParent)
{
nodes.set(get<index_node>(pip), get<parent_node>(pip));
}
}
void assertSinglePass(Nodes& nodes, int value, int expected)
{
ASSERT_EQ(expected, QuickUnion::RootFunctions::pathCompressionWithSinglePass(nodes, value));
}
void assertDoublePass(Nodes& nodes, int value, int expected)
{
ASSERT_EQ(expected, QuickUnion::RootFunctions::pathCompressionWithDoublePass(nodes, value));
}
TEST_F(QuickUnion_RootFunctionsTest, testRootFunctionsOnPathCompression_With2nodes)
{
MemoryLeakDetector leakDetector;
Nodes nodes{ zeroBasedArray };
assignParent(nodes, { { 0,0 }, {1, 1} });
assertSinglePass(nodes, 0, 0);
assertSinglePass(nodes, 1, 1);
}
TEST_F(QuickUnion_RootFunctionsTest, testRootFunctionsOnPathCompression_3nodesWithSameParent)
{
MemoryLeakDetector leakDetector;
Nodes nodes{ oneBasedArray };
int root = 1;
assignParent(nodes, { {1,root},{2,root}, {3, root} });
assertSinglePass(nodes, 1, root);
assertSinglePass(nodes, 2, root);
assertSinglePass(nodes, 3, root);
}
TEST_F(QuickUnion_RootFunctionsTest, testRootFunctionsOnPathCompression_WithGrandGrandParent)
{
MemoryLeakDetector leakDetector;
Nodes nodes{ oneBasedArray };
assignParent(nodes, {{1,1},{2,1},{3,1},{4,1}});
int root = 1;
assertSinglePass(nodes, 1, root);
assertSinglePass(nodes, 2, root);
assertSinglePass(nodes, 3, root);
assertSinglePass(nodes, 4, root);
}
TEST_F(QuickUnion_RootFunctionsTest, testRootFunctionsOnPathCompression_WithDoublePass)
{
MemoryLeakDetector leakDetector;
Nodes nodes{ zeroBasedArray };
assignParent(nodes, { {0, 0}, {1, 0}, {2,0}, {3, 1},{4, 1}, {5, 1}, {6, 3}, {7, 3}, {8, 6}, {9, 6}, {10, 8},{11,9},{12, 9 } });
int root = 0;
assertDoublePass(nodes, 12, root);
}