mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-17 22:03:07 -06:00
Creating the *real* autotest nest
git-svn-id: svn://ultimatepp.org/upp/trunk@7141 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
dc9a464a45
commit
6d3aa8ba61
230 changed files with 9963 additions and 73 deletions
203
autotest/InArray/InArray.cpp
Normal file
203
autotest/InArray/InArray.cpp
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
#include <Core/Core.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
template <class C1, class C2>
|
||||
void Compare(C1& a, C2& b)
|
||||
{
|
||||
ASSERT(a.GetCount() == b.GetCount());
|
||||
|
||||
for(int i = 0; i < a.GetCount(); i++)
|
||||
ASSERT(a[i] == b[i]);
|
||||
|
||||
typename C1::Iterator ia = a.Begin();
|
||||
typename C2::Iterator ib = b.Begin();
|
||||
while(ib != b.End()) {
|
||||
ASSERT(*ia == *ib);
|
||||
ia++;
|
||||
ib++;
|
||||
}
|
||||
}
|
||||
|
||||
void InArrayTest()
|
||||
{
|
||||
SeedRandom();
|
||||
Vector<int> q;
|
||||
InArray<int> iv;
|
||||
Compare(q, iv);
|
||||
iv.Insert(0) = 0;
|
||||
q.Insert(0) = 0;
|
||||
iv.Insert(1) = -1;
|
||||
q.Insert(1) = -1;
|
||||
for(int j = 0; j < 10000; j++) {
|
||||
if(j % 1000 == 0)
|
||||
LOG(j);
|
||||
int i = Random(iv.GetCount());
|
||||
iv.Insert(i) = i;
|
||||
q.Insert(i) = i;
|
||||
Compare(q, iv);
|
||||
ASSERT(iv.End() - iv.Begin() == iv.GetCount());
|
||||
}
|
||||
|
||||
for(int i = 0; i < 100; i++) {
|
||||
int n = Random(100) + 20;
|
||||
InArray<int>::Iterator it2, it = iv.Begin();
|
||||
it += n;
|
||||
ASSERT(it - iv.Begin() == n);
|
||||
it2 = it;
|
||||
for(int j = 0; j < 10; j++) {
|
||||
ASSERT(it2 - iv.Begin() == n + j);
|
||||
++it2;
|
||||
}
|
||||
it2 = it;
|
||||
for(int j = 0; j < 10; j++) {
|
||||
ASSERT(it2 - iv.Begin() == n - j);
|
||||
--it2;
|
||||
}
|
||||
}
|
||||
|
||||
StableSort(q);
|
||||
StableSort(iv);
|
||||
Compare(q, iv);
|
||||
}
|
||||
|
||||
void TestUpperBound()
|
||||
{
|
||||
{
|
||||
InArray<int> v;
|
||||
for(int i = 0; i < 3000; i++) {
|
||||
if(i % 1000 == 0)
|
||||
LOG(i);
|
||||
v.Insert(i) = i;
|
||||
ASSERT(v.FindUpperBound(i) == i + 1);
|
||||
for(int j = 0; j < i; j++)
|
||||
ASSERT(v.FindUpperBound(j) == j + 1);
|
||||
}
|
||||
}
|
||||
{
|
||||
InArray<int> v;
|
||||
for(int i = 0; i < 3000; i++) {
|
||||
if(i % 1000 == 0)
|
||||
LOG(i);
|
||||
for(int j = 0; j < 7; j++)
|
||||
v.Insert(7 * i) = i;
|
||||
ASSERT(v.FindUpperBound(i) == 7 * i + 7);
|
||||
for(int j = 0; j < i; j++)
|
||||
ASSERT(v.FindUpperBound(j) == 7 * j + 7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TestLowerBound()
|
||||
{
|
||||
{
|
||||
InArray<int> v;
|
||||
for(int i = 0; i < 3000; i++) {
|
||||
if(i % 1000 == 0)
|
||||
LOG(i);
|
||||
v.Insert(i) = i;
|
||||
ASSERT(v.FindLowerBound(i) == i);
|
||||
for(int j = 0; j < i; j++)
|
||||
ASSERT(v.FindLowerBound(j) == j);
|
||||
}
|
||||
}
|
||||
{
|
||||
InArray<int> v;
|
||||
for(int i = 0; i < 3000; i++) {
|
||||
if(i % 1000 == 0)
|
||||
LOG(i);
|
||||
for(int j = 0; j < 7; j++)
|
||||
v.Insert(7 * i) = i;
|
||||
ASSERT(v.FindLowerBound(i) == 7 * i);
|
||||
for(int j = 0; j < i; j++)
|
||||
ASSERT(v.FindLowerBound(j) == 7 * j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetTest()
|
||||
{
|
||||
for(int j = 0; j < 100; j++) {
|
||||
LOG(j);
|
||||
Vector<int> va;
|
||||
InArray<int> ia;
|
||||
for(int i = 0; i < 1000; i++) {
|
||||
int q = Random(100);
|
||||
int ii = FindUpperBound(va, q);
|
||||
va.Insert(ii) = q;
|
||||
ia.InsertUpperBound(q);
|
||||
Compare(va, ia);
|
||||
|
||||
ii = ia.Find(q);
|
||||
ASSERT(ia[ii] == q);
|
||||
ASSERT(ia.Find(200) < 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveTest()
|
||||
{
|
||||
SeedRandom();
|
||||
Vector<int> q;
|
||||
InArray<int> iv;
|
||||
Compare(q, iv);
|
||||
iv.Insert(0) = 0;
|
||||
q.Insert(0) = 0;
|
||||
iv.Insert(1) = -1;
|
||||
q.Insert(1) = -1;
|
||||
for(int j = 0; j < 10000000; j++) {
|
||||
if(j % 1000 == 0)
|
||||
LOG(j);
|
||||
if(iv.GetCount() > 200 && Random(4) == 1) {
|
||||
int i = Random(iv.GetCount() - 21);
|
||||
int n = Random(20);
|
||||
iv.Remove(i, n);
|
||||
q.Remove(i, n);
|
||||
}
|
||||
else {
|
||||
int i = Random(iv.GetCount());
|
||||
iv.Insert(i) = i;
|
||||
q.Insert(i) = i;
|
||||
}
|
||||
Compare(q, iv);
|
||||
ASSERT(iv.End() - iv.Begin() == iv.GetCount());
|
||||
}
|
||||
}
|
||||
|
||||
void InsertNTest()
|
||||
{
|
||||
SeedRandom();
|
||||
Vector<int> av;
|
||||
InArray<int> iv;
|
||||
for(int i = 0; i < 100000; i++) {
|
||||
if(i % 1000 == 0)
|
||||
LOG(i);
|
||||
if(av.GetCount() > 2000) {
|
||||
av.Clear();
|
||||
iv.Clear();
|
||||
}
|
||||
int pos = av.GetCount() ? Random(av.GetCount()) : 0;
|
||||
int n = Random(30);
|
||||
av.InsertN(pos, n);
|
||||
iv.InsertN(pos, n);
|
||||
for(int j = 0; j < n; j++) {
|
||||
int r = Random();
|
||||
av[pos + j] = r;
|
||||
iv[pos + j] = r;
|
||||
}
|
||||
Compare(av, iv);
|
||||
}
|
||||
}
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
StdLogSetup(LOG_FILE|LOG_COUT);
|
||||
SeedRandom();
|
||||
|
||||
RemoveTest();
|
||||
InsertNTest();
|
||||
SetTest();
|
||||
TestLowerBound();
|
||||
TestUpperBound();
|
||||
InArrayTest();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue