/* $Id: unittest.cc 5149 2010-03-24 23:37:18Z abehm $ Copyright (C) 2010 by The Regents of the University of California Redistribution of this file is permitted under the terms of the BSD license. Date: 05/14/2007 Author: Jiaheng Lu */ #include #include #include #include "listmerger.h" #include "divideskipmerger.h" #include "heapmerger.h" #include "mergeoptmerger.h" #include "mergeskipmerger.h" #include "mergeskipplusmerger.h" #include "scancountmerger.h" #include "mergeskiptest.h" #include "showutil.h" #include "util/array.h" using namespace std; void randomGenerateList(Array *oneList) { unsigned setSize = random() % 100; if(setSize == 0) setSize = 1; set s; for(unsigned i=0;i::iterator ite = s.begin();ite!=s.end();ite++) oneList->append(*ite); } void randomListsGeneration(vector*> &arrays, unsigned seed) { srand(seed); unsigned listsNumber = random() % 120; if(listsNumber == 0) listsNumber = 1; for(unsigned i=0;i *oneList = new Array; randomGenerateList(oneList); unsigned duplicateNumber = random() % 10; if(duplicateNumber == 0) duplicateNumber = 1; for(unsigned j=0;j*> &arrays) { set*> toFree; for(unsigned i = 0; i < arrays.size(); i++) toFree.insert(arrays.at(i)); for(set*>::iterator iter = toFree.begin(); iter != toFree.end(); iter++) delete *iter; } void testRandomMergeAlgorithmsWithDuplicate(unsigned seed) { //srand((unsigned)time(0)); srand(seed); vector*> arrays1; randomListsGeneration(arrays1, seed); vector*> arrays2; randomListsGeneration(arrays2, seed); vector*> arrays3; randomListsGeneration(arrays3, seed); unsigned threshold = random() % 100; if (threshold == 0) threshold = 1; cout<< "Merging threshold is " << threshold << endl; vector result1; vector result2; vector result3; ScanCountMerger<> *mergeLists1 = new ScanCountMerger<>(9999999, false); DivideSkipMerger<> *mergeLists2 = new DivideSkipMerger<>(true); DivideSkipMerger<> *mergeLists3 = new DivideSkipMerger<>(false); mergeLists1->merge(arrays1, threshold, result1); mergeLists2->merge(arrays2, threshold, result2); mergeLists3->merge(arrays3, threshold, result3); cout<