aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp.test/src/DisjointSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'meowpp.test/src/DisjointSet.cpp')
-rw-r--r--meowpp.test/src/DisjointSet.cpp82
1 files changed, 0 insertions, 82 deletions
diff --git a/meowpp.test/src/DisjointSet.cpp b/meowpp.test/src/DisjointSet.cpp
deleted file mode 100644
index 4a8750b..0000000
--- a/meowpp.test/src/DisjointSet.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "meowpp/dsa/DisjointSet.h"
-
-#include "dsa.h"
-
-#include <vector>
-
-
-TEST(DisjointSet, "..."){
- int N = 10000000;
- meow::DisjointSet dsj(N);
-
- meow::messagePrintf(1, "merge(0, 1) merge(0, 2) merge(0, 3) ... (N = %d)", N);
- for(int i = 1; i < N; i++){
- dsj.merge(0, i);
- }
- int root = dsj.root(0);
- for(int i = 1; i < N; i++){
- if(root != (int)dsj.root(i)){
- meow::messagePrintf(-1, "fail");
- return false;
- }
- }
- meow::messagePrintf(-1, "ok");
- //
-
- dsj.reset(N);
- meow::messagePrintf(1, "merge(0, 1) merge(1, 2) merge(2, 3) ... (N = %d)", N);
- for(int i = 1; i < N; i++){
- dsj.merge(i - 1, i);
- }
- root = dsj.root(0);
- for(int i = 1; i < N; i++){
- if(root != (int)dsj.root(i)){
- meow::messagePrintf(-1, "fail");
- return false;
- }
- }
- meow::messagePrintf(-1, "ok");
- //
-
- int M = 1000;
- N = 1000000;
- dsj.reset(N);
- std::vector<int> used(N, -1);
- std::vector<std::vector<int> > nums(M);
-
- meow::messagePrintf(1, "random test (N = %d)", N);
- for(int i = 0; i < N / 10; i++){
- int grp = rand() % M;
- int who;
- while(used[who = rand() % N] != -1);
- nums[grp].push_back(who);
- used[who] = grp;
- }
- meow::messagePrintf(0, "data created");
- for(int i = 0; i < M; i++){
- for(int k = 0; k < 100; k++){
- int j1 = rand() % nums[i].size();
- int j2 = rand() % nums[i].size();
- dsj.merge(nums[i][j1], nums[i][j2]);
- }
- for(size_t j = 1; j < nums[i].size(); j++){
- dsj.merge(nums[i][0], nums[i][j]);
- }
- }
- for(int i = 0; i < N; i++){
- bool ok = false;
- if((int)used[i] == -1 && (int)dsj.root(i) == i){
- ok = true;
- }else{
- if(dsj.root(i) == dsj.root(nums[used[i]][0])){
- ok = true;
- }
- }
- if(!ok){
- meow::messagePrintf(-1, "fail");
- return false;
- }
- }
- meow::messagePrintf(-1, "ok");
- return true;
-}