完成avl树的测试

This commit is contained in:
邹晓航
2015-01-15 09:08:44 +08:00
parent dacad38a89
commit 6d4ddb0cd1
3 changed files with 100 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
#include "AVLTreeTest.h"
namespace TinySTL{
namespace AVLTreeTest{
template<class Container1, class Container2>
bool container_equal(const Container1& con1, const Container2& con2){
auto first1 = con1.cbegin(), last1 = con1.cend();
auto first2 = con2.cbegin(), last2 = con2.cend();
for (; first1 != last1 && first2 != last2; ++first1, ++first2){
if (*first1 != *first2)
return false;
}
return (first1 == last1 && first2 == last2);
}
void testCase1(){
tsAVL<std::string> avl;
assert(avl.empty());
assert(avl.size() == 0);
avl.insert("0");
assert(!avl.empty());
assert(avl.size() == 1);
assert(*avl.root() == "0");
}
void testCase2(){
tsAVL<int> avl;
for (auto i = 0; i != 10000; ++i){
avl.insert(i);
}
assert(avl.height() == 14);
}
void testCase3(){
tsAVL<int> avl;
for (auto i = 0; i != 10; ++i){
avl.insert(i);
}
assert(*avl.find(5) == 5);
assert(*avl.find_min() == 0);
assert(*avl.find_max() == 9);
}
void testCase4(){
tsAVL<int> avl;
std::vector<int> v;
std::random_device rd;
for (auto i = 0; i != 100; ++i){
auto r = rd() % 65536;
avl.insert(r);
v.push_back(r);
}
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
assert(container_equal(avl, v));
tsAVL<int> avl1;
avl1.insert(v.begin(), v.end());
assert(container_equal(avl1, v));
}
void testAllCases(){
testCase1();
testCase2();
testCase3();
testCase4();
}
}
}

View File

@@ -0,0 +1,29 @@
#ifndef _AVL_TREE_TEST_H_
#define _AVL_TREE_TEST_H_
#include "TestUtil.h"
#include "../AVLTree.h"
#include <algorithm>
#include <cassert>
#include <random>
#include <string>
#include <vector>
namespace TinySTL{
namespace AVLTreeTest{
template<class T>
using tsAVL = TinySTL::avl_tree < T > ;
void testCase1();
void testCase2();
void testCase3();
void testCase4();
void testAllCases();
}
}
#endif

View File

@@ -4,6 +4,7 @@
#include "Profiler\Profiler.h"
#include "Test\AlgorithmTest.h"
#include "Test\AVLTreeTest.h"
#include "Test\BitmapTest.h"
#include "Test\BinarySearchTreeTest.h"
#include "Test\CircularBufferTest.h"
@@ -22,6 +23,7 @@ using namespace TinySTL::Profiler;
int main(){
TinySTL::AlgorithmTest::testAllCases();
TinySTL::AVLTreeTest::testAllCases();
TinySTL::BitmapTest::testAllCases();
TinySTL::BinarySearchTreeTest::testAllCases();
TinySTL::CircularBufferTest::testAllCases();