⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tplex.cc

📁 早期freebsd实现
💻 CC
字号:
/*  test of Plexes*/#include <stream.h>#include <assert.h>#include "iPlex.h"#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \                       else _assert(#ex, __FILE__,__LINE__); }void printplex(intPlex& a){  cout << "[";  int maxprint = 20;  int k = 0;  for (int i = a.low(); i < a.fence() && k < maxprint; ++i, ++k)    cout << a[i] << " ";  if (i < a.fence()) cout << "]\n";  else cout << "...]\n";}#include "iFPlex.h"void FPtest () {  intFPlex p(50);  assert(p.OK());  assert (p.empty());  p.add_high (1000);  Pix px = p.index_to_Pix(0);  assert (p.length() == 1);  assert(p.owns(px));  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 0);  p.reset_low (10);  assert (p.length() == 1);  assert (p.low() == 10);  assert (p[10] == 1000);  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 10);  assert(p.index_to_Pix(10) == px);  assert(p.OK());  int h = p.high_element();  int l = p.low_element();  assert ( (h==l) && (h==1000));  p.fill(222);  assert(p(px) == 222);  p.del_high();     assert(p.empty());  assert(!p.owns(px));  intFPlex q(10, -50);  q.add_low (-1000);  assert (q[9] == -1000);  q[9] = 21;  assert(!q.valid(10));  assert(q.OK());  q.del_low();  assert (q.empty());  p.reset_low (0);  q.reset_low (0);  for (int i = 0; i < 50; i++)   {    if (i % 2 == 0)     {       p.add_high (i);      assert (p.high() == i/2);      p[i/2] = p[i/4];      assert (p.high_element() == i/4);      p[i/2] = i/2;    }     else     {      q.add_low (-i);      int ii = - (i/2) -1;      assert (q.low() == ii);      q.low_element() = ii;      assert (q[ii] == ii);    }  }  cout << "q:"; printplex(q);  assert (p.length() == 25);  assert (q.length() == 25);  assert(p.valid(0));  assert(p.owns(px));    px = p.first();  i = 0;  for (int it1 = p.low(); it1 < p.fence(); p.next(it1))  {    assert (p[it1] == it1);    assert(p(px) == p[it1]);    p.next(px);    ++i;  }  assert(px == 0);  px = q.last();  for (it1 = q.high(); it1 > q.ecnef(); q.prev(it1))  {    assert (q[it1] == it1);    assert(p(px) == q[it1]);    q.prev(px);    ++i;  }  assert(i == 50);  q.reset_low (0);    assert (p.high() == q.high());  assert(p.low() == 0);    intFPlex p1 = p;  intFPlex p2 (p);  intFPlex p3 = p2;  assert (p1.length() == 25);  assert (p1.high() == 24);  assert(p1.low() == 0);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  i = 0;  for (int it5 = p.low(); it5 < p.fence(); p.next(it5))   {    assert(p1.low() == it5);    p1.del_low();    assert(!p1.valid(it5));    p2.del_high ();    p3 [it5] = -it5;    ++i;  }  assert(i == 25);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  assert (p1.empty());  assert (p2.empty());  p3.append (p);  assert(p3.OK());  p1.prepend (p);  p2.append (p);  assert(p1.length() == p.length());  assert(p1.length() == p2.length());  assert(p1.OK());  assert(p2.OK());  p2.clear();  assert(p2.OK());  assert(p2.empty());  p2 = p1;  assert(p2.OK());  p1 = p;  assert(p1.OK());  p1.reset_low (p1.low_element());  for (int it6 = p1.low(); it6 < p1.fence(); it6++)  {    assert (p1[it6] == it6);  }  p1[13] = 1313;  p1[7] = -7777;  p1[24] = 24242424;  assert(!p1.valid(25));  assert(!p1.valid(-1));  assert(p1.OK());}#include "iXPlex.h"void XPtest () {  intXPlex p(3);  assert(p.OK());  assert (p.empty());  p.add_high (1000);  Pix px = p.index_to_Pix(0);  assert(p.Pix_to_index(px) == 0);  assert (p.length() == 1);  assert(p.owns(px));  assert(p(px) == 1000);  p.reset_low(10);  assert (p.length() == 1);  assert (p.low() == 10);  assert (p[10] == 1000);  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 10);  assert(p.index_to_Pix(10) == px);  assert(p.OK());  int h = p.high_element();  int l = p.low_element();  assert ( (h==l) && (h==1000));  p.fill(222);  assert(p(px) == 222);  p.del_high();     assert(p.empty());  assert(!p.owns(px));  p.add_low(-1000);  assert (p[9] == -1000);  p[9] = 21;  assert(!p.valid(10));  assert(p.OK());  p.del_low();  assert (p.empty());  p.reset_low (0);  for (int i = 0; i < 50; i++)   {    if (i % 2 == 0)     {       p.add_high (i);      assert (p.high() == i/2);      p[i/2] = p[i/4];      assert (p.high_element() == i/4);      p[i/2] = i/2;    }     else     {      p.add_low (-i);      int ii = - (i/2) -1;      assert (p.low() == ii);      p.low_element() = ii;      assert (p[ii] == ii);    }  }  assert (p.length() == 50);  cout << "p:"; printplex(p);  assert(p.valid(0));  assert(p.owns(px));  px = p.first();  i = 0;  for (int it1 = p.low(); it1 < p.fence(); p.next(it1))  {    assert (p[it1] == it1);    assert(p(px) == p[it1]);    p.next(px);    ++i;  }  assert(i == 50);  assert(px == 0);  p.reset_low (0);    assert (p.high() == 49);  assert(p.low() == 0);    i = 0;  for (int it2 = p.high(); it2 > p.ecnef(); p.prev(it2))  {    assert ( p[it2] == it2-25 );    ++i;  }  assert(i == 50);  assert(p.OK());    intXPlex p1 = p;  intXPlex p2 (p);  intXPlex p3 = p2;  assert (p1.length() == 50);  assert (p1.high() == 49);  assert(p1.low() == 0);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  i = 0;  for (int it5 = p.low(); it5 < p.fence(); p.next(it5))   {    assert(p1.low() == it5);    p1.del_low();    assert(!p1.valid(it5));    p2.del_high ();    p3 [it5] = -it5;    ++i;  }  assert(i == 50);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  assert (p1.empty());  assert (p2.empty());  p3.append (p);  assert(p3.OK());  p1.prepend (p);  p2.append (p);  assert(p1.length() == p.length());  assert(p1.length() == p2.length());  assert(p1.OK());  assert(p2.OK());  p2.clear();  assert(p2.OK());  assert(p2.empty());  p2 = p1;  assert(p2.OK());  p1 = p;  assert(p1.OK());  p1.reset_low(p1.low_element());  p1 [13] = 1313;  p1 [-7] = -7777;  p1 [-25] = -252525;  p1 [24] = 24242424;  assert(!p1.valid(25));  assert(!p1.valid(-26));  assert(p1.OK());  p1 = p;  p1.reset_low (p1.low_element());  for (int it6 = p1.low(); it6 < p1.fence(); it6++)  {    assert (p1[it6] == it6);  }  p1.reverse();  i = p1.high();  for (it6 = p1.low(); it6 < p1.fence(); it6++)  {    assert (p1[it6] == i);    --i;  }  assert(p1.OK());}#include "iMPlex.h"void MPtest () {  intMPlex p(3);  assert(p.OK());  assert (p.empty());  p.add_high (1000);  Pix px = p.index_to_Pix(0);  assert (p.length() == 1);  assert(p.owns(px));  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 0);  p.reset_low (10);  assert (p.length() == 1);  assert (p.low() == 10);  assert (p[10] == 1000);  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 10);  assert(p.index_to_Pix(10) == px);  assert(p.OK());  int h = p.high_element();  int l = p.low_element();  assert ( (h==l) && (h==1000));  p.fill(222);  assert(p(px) == 222);  p.del_high();     assert(p.empty());  assert(!p.owns(px));  p.add_low (-1000);  assert (p[9] == -1000);  p[9] = 21;  assert(!p.valid(10));  assert(p.OK());  p.del_low();  assert (p.empty());  p.reset_low (0);  for (int i = 0; i < 50; i++)   {    if (i % 2 == 0)     {       p.add_high (i);      assert (p.high() == i/2);      p[i/2] = p[i/4];      assert (p.high_element() == i/4);      p[i/2] = i/2;    }     else     {      p.add_low (-i);      int ii = - (i/2) -1;      assert (p.low() == ii);      p.low_element() = ii;      assert (p[ii] == ii);    }  }  cout << "p:"; printplex(p);  assert (p.length() == 50);  assert (p.count() == 50);  assert(p.available() == 0);  assert(p.valid(0));  px = &p[0];  assert(p.owns(px));  p.del_index(0);  assert(p.count() == 49);  assert(p.available() == 1);  assert(p.unused_index() == 0);  assert(!p.valid(0));  assert(!p.owns(px));  p.undel_index(0);  p[0] = 0;  assert(p.count() == 50);  assert(p.available() == 0);  assert(p.valid(0));  assert(p.owns(px));  assert(p.OK());  p.del_index(0);    px = p.first();  i = 0;  for (int it1 = p.low(); it1 < p.fence(); p.next(it1))  {    assert (p[it1] == it1);    assert(p(px) == p[it1]);    p.next(px);    ++i;  }  assert(i == 49);  assert(px == 0);  p.reset_low (0);    assert (p.high() == 49);  assert(p.low() == 0);    i = 0;  for (int it2 = p.high(); it2 > p.ecnef();  p.prev(it2))  {    assert ( p[it2] == it2-25 );    assert(px != &p[it2]);    ++i;  }  assert(i == 49);  assert(p.OK());    p.del_index(1);  p.del_index(2);  assert (p.OK());  assert (p.count() == 47);  intMPlex p1 = p;  intMPlex p2 (p);  intMPlex p3 = p2;  assert (p1.length() == 50);  assert (p1.count() == 47);  assert (p1.high() == 49);  assert(p1.low() == 0);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  i = 0;  for (int it5 = p.low(); it5 < p.fence(); p.next(it5))   {    assert(p1.low() == it5);    p1.del_low();    assert(!p1.valid(it5));    p2.del_high ();    p3 [it5] = -it5;    ++i;  }  assert(i == 47);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  assert (p1.empty());  assert (p2.empty());  p3.append (p);  assert(p3.OK());  p1.prepend (p);  p2.append (p);  assert(p1.count() == p.count());  assert(p1.count() == p2.count());  assert(p1.OK());  assert(p2.OK());  p2.clear();  assert(p2.OK());  assert(p2.empty());  p2 = p1;  assert(p2.OK());  p1 = p;  p1.del_index(3);  p1.del_index(4);  p1.del_index(5);  p1.del_index(6);  p1.del_index(7);  p1.del_index(8);  p1.undel_index(6);  p1[6] = 6666;  p1[9] = 9999;  p1[0] = 0;  assert(p1[6] == 6666);  assert(!p1.valid(5));  assert(!p1.valid(7));  p1.del_low();  assert(p1.low() == 6);  assert(p1.OK());}#include "iRPlex.h"void RPtest () {  intRPlex p(3);  assert(p.OK());  assert (p.empty());  p.add_high (1000);  Pix px = p.index_to_Pix(0);  assert(p.Pix_to_index(px) == 0);  assert (p.length() == 1);  assert(p.owns(px));  assert(p(px) == 1000);  p.reset_low(10);  assert (p.length() == 1);  assert (p.low() == 10);  assert (p[10] == 1000);  assert(p(px) == 1000);  assert(p.Pix_to_index(px) == 10);  assert(p.index_to_Pix(10) == px);  assert(p.OK());  int h = p.high_element();  int l = p.low_element();  assert ( (h==l) && (h==1000));  p.fill(222);  assert(p(px) == 222);  p.del_high();     assert(p.empty());  assert(!p.owns(px));  p.add_low(-1000);  assert (p[9] == -1000);  p[9] = 21;  assert(!p.valid(10));  assert(p.OK());  p.del_low();  assert (p.empty());  p.reset_low (0);  for (int i = 0; i < 50; i++)   {    if (i % 2 == 0)     {       p.add_high (i);      assert (p.high() == i/2);      p[i/2] = p[i/4];      assert (p.high_element() == i/4);      p[i/2] = i/2;    }     else     {      p.add_low (-i);      int ii = - (i/2) -1;      assert (p.low() == ii);      p.low_element() = ii;      assert (p[ii] == ii);    }  }  assert (p.length() == 50);  cout << "p:"; printplex(p);  assert(p.valid(0));  assert(p.owns(px));  px = p.first();  i = 0;  for (int it1 = p.low(); it1 < p.fence(); p.next(it1))  {    assert (p[it1] == it1);    assert(p(px) == p[it1]);    p.next(px);    ++i;  }  assert(i == 50);  assert(px == 0);  p.reset_low (0);    assert (p.high() == 49);  assert(p.low() == 0);    i = 0;  for (int it2 = p.high(); it2 > p.ecnef(); p.prev(it2))  {    assert ( p[it2] == it2-25 );    ++i;  }  assert(i == 50);  assert(p.OK());    intRPlex p1 = p;  intRPlex p2 (p);  intRPlex p3 = p2;  assert (p1.length() == 50);  assert (p1.high() == 49);  assert(p1.low() == 0);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  i = 0;  for (int it5 = p.low(); it5 < p.fence(); p.next(it5))   {    assert(p1.low() == it5);    p1.del_low();    assert(!p1.valid(it5));    p2.del_high ();    p3 [it5] = -it5;    ++i;  }  assert(i == 50);  assert(p.OK());  assert(p1.OK());  assert(p2.OK());  assert(p3.OK());  assert (p1.empty());  assert (p2.empty());  p3.append (p);  assert(p3.OK());  p1.prepend (p);  p2.append (p);  assert(p1.length() == p.length());  assert(p1.length() == p2.length());  assert(p1.OK());  assert(p2.OK());  p2.clear();  assert(p2.OK());  assert(p2.empty());  p2 = p1;  assert(p2.OK());  p1 = p;  assert(p1.OK());  p1.reset_low(p1.low_element());  p1 [13] = 1313;  p1 [-7] = -7777;  p1 [-25] = -252525;  p1 [24] = 24242424;  assert(!p1.valid(25));  assert(!p1.valid(-26));  assert(p1.OK());  p1 = p;  p1.reset_low (p1.low_element());  for (int it6 = p1.low(); it6 < p1.fence(); it6++)  {    assert (p1[it6] == it6);  }  p1.reverse();  i = p1.high();  for (it6 = p1.low(); it6 < p1.fence(); it6++)  {    assert (p1[it6] == i);    --i;  }  assert(p1.OK());}main(){  cout << "FPtest\n"; FPtest();  cout << "XPtest\n"; XPtest();  cout << "MPtest\n"; MPtest();  cout << "RPtest\n"; RPtest();  cout << "\nend of tests\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -