memgraph/tests/unit/union_find.cpp
Florijan Stamenkovic dee15acd1e data_structures/union_find - minor refactors and tests added
Summary: Minor refactor of the union_find data structure. Testing added for union_find.

Test Plan: Manual

Reviewers: sale, buda

Reviewed By: sale, buda

Subscribers: pullbot, florijan, sale, buda

Differential Revision: https://phabricator.memgraph.io/D42
2017-01-23 15:20:09 +01:00

89 lines
1.9 KiB
C++

#include <stdlib.h>
#include <iostream>
#include "gtest/gtest.h"
#include "data_structures/union_find/union_find.hpp"
void _expect_fully(UnionFind<> &uf, bool connected, int from=0, int to=-1) {
if (to == -1)
to = uf.size();
for (int i = from ; i < to ; i++)
for (int j = from ; j < to ; j++)
if (i != j)
EXPECT_EQ(uf.find(i, j), connected);
}
TEST(UnionFindTest, InitialSizeTest) {
for (int i = 0 ; i < 10 ; i ++) {
UnionFind<> uf(i);
EXPECT_EQ(i, uf.size());
}
}
TEST(UnionFindTest, ModifiedSizeTest) {
UnionFind<> uf(10);
EXPECT_EQ(10, uf.size());
uf.connect(0, 0);
EXPECT_EQ(10, uf.size());
uf.connect(0, 1);
EXPECT_EQ(9, uf.size());
uf.connect(2, 3);
EXPECT_EQ(8, uf.size());
uf.connect(0, 2);
EXPECT_EQ(7, uf.size());
uf.connect(1, 3);
EXPECT_EQ(7, uf.size());
}
TEST(UnionFindTest, Disconectivity) {
UnionFind<> uf(10);
_expect_fully(uf, false);
}
TEST(UnionFindTest, ConnectivityAlongChain) {
UnionFind<> uf(10);
for (unsigned int i = 1 ; i < uf.size() ; i++)
uf.connect(i - 1, i);
_expect_fully(uf, true);
}
TEST(UnionFindTest, ConnectivityOnTree) {
UnionFind<> uf(10);
_expect_fully(uf, false);
uf.connect(0, 1);
uf.connect(0, 2);
_expect_fully(uf, true, 0, 3);
_expect_fully(uf, false, 2);
uf.connect(2, 3);
_expect_fully(uf, true, 0, 4);
_expect_fully(uf, false, 3);
}
TEST(UnionFindTest, DisjointChains) {
UnionFind<> uf(30);
for (int i = 0 ; i < 30 ; i++)
uf.connect(i, i % 10 == 0 ? i : i - 1);
for (int i = 0 ; i < 30 ; i++)
for (int j = 0 ; j < 30 ; j++)
EXPECT_EQ(uf.find(i, j), (j - (j % 10)) == (i - (i % 10)));
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}