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

📄 tbag.cc

📁 早期freebsd实现
💻 CC
字号:
/* a test file for Bags*/#ifdef PTIMESconst int ptimes = 1;#elseconst int ptimes = 0;#endif#include <stream.h>#include <assert.h>#include <builtin.h>#define tassert(ex) { cerr << #ex; \                       if ((ex)) cerr << " OK\n"; \                       else cerr << " Fail\n"; }#include "iBag.h"unsigned int hash(int x) { return multiplicativehash(x) ; }int SIZE;int *nums;int *odds;int *dups;void add(int x[], intBag& a){  for (int i = 0; i < SIZE; ++i) a.add(x[i]);}#include <MLCG.h>MLCG randgen;void permute(int x[]){  for (int i = 1; i < SIZE; ++i)  {    int j = randgen.asLong() % (i + 1);    int tmp = x[i]; x[i] = x[j]; x[j] = tmp;  }}void makenums(){  for (int i = 0; i < SIZE; ++i) nums[i] = i + 1;}void makeodds(){  for (int i = 0; i < SIZE; ++i) odds[i] = 2 * i + 1;  permute(odds);}void makedups(){  for (int i = 0; i < SIZE; i += 2) dups[i] = dups[i+1] = i/2 + 1;  permute(dups);}void printBag(intBag& a){  int maxprint = 20;  cout << "[";  int k = 0;  for (Pix i = a.first(); i != 0 && k < maxprint; a.next(i),++k)     cout << a(i) << " ";  if (i != 0) cout << "...]\n";  else cout << "]\n";}void generictest(intBag& a, intBag& b, intBag& c){  c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());}#include "iXPBag.h"void XPtest(){  intXPBag a(SIZE);  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intXPBag b(SIZE);  add(odds, b);  assert(b.length() == SIZE);  intXPBag c(SIZE);  add(dups, c);   assert(c.length() == SIZE);  intXPBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iSLBag.h"void SLtest(){  intSLBag a;  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intSLBag b;  add(odds, b);  assert(b.length() == SIZE);  intSLBag c;  add(dups, c);   assert(c.length() == SIZE);  intSLBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iVHBag.h"void VHtest(){  intVHBag a(SIZE);  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intVHBag b(SIZE);  add(odds, b);  assert(b.length() == SIZE);  intVHBag c(SIZE);  add(dups, c);   assert(c.length() == SIZE);  intVHBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iCHBag.h"void CHtest(){  intCHBag a(SIZE);  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intCHBag b(SIZE);  add(odds, b);  assert(b.length() == SIZE);  intCHBag c(SIZE);  add(dups, c);   assert(c.length() == SIZE);  intCHBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iOXPBag.h"void OXPtest(){  intOXPBag a(SIZE);  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intOXPBag b(SIZE);  add(odds, b);  assert(b.length() == SIZE);  intOXPBag c(SIZE);  add(dups, c);   assert(c.length() == SIZE);  intOXPBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iOSLBag.h"void OSLtest(){  intOSLBag a;  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intOSLBag b;  add(odds, b);  assert(b.length() == SIZE);  intOSLBag c;  add(dups, c);   assert(c.length() == SIZE);  intOSLBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}#include "iSplayBag.h"void Splaytest(){  intSplayBag a;  add(nums, a);  assert(a.length() == SIZE);  for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));  intSplayBag b;  add(odds, b);  assert(b.length() == SIZE);  intSplayBag c;  add(dups, c);   assert(c.length() == SIZE);  intSplayBag d(a);  add(nums, d);  assert(d.length() == SIZE*2);  cout << "a: "; printBag(a);  cout << "b: "; printBag(b);  cout << "c: "; printBag(c);  cout << "d: "; printBag(d);  for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);  d.del(1);  assert(d.nof(1) == 1);  d.del(1);  assert(d.nof(1) == 0);  d.remove(2);  assert(!d.contains(2));  for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));  assert(d.length() == SIZE);    c.clear();  assert(c.empty());  for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));  for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));  c.del(a(a.first()));  Pix i = a.first();  assert(!c.contains(a(i)));  for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));  c.add(a(a.first()));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = b.first(); k != 0; b.next(k)) c.add(b(k));  for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));  for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));  for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));  for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));  for (i = b.first(); i != 0; b.next(i)) c.del(b(i));  assert(c.empty());  assert(a.OK());  assert(b.OK());  assert(c.OK());  generictest(a, b, c);}double return_elapsed_time ( double );double start_timer ( void );main(int argv, char** argc){  if (argv > 1)  {    SIZE = abs(atoi(argc[1]));    SIZE &= ~1;  }  else    SIZE = 100;  nums = new int[SIZE];  odds = new int[SIZE];  dups = new int[SIZE];  makenums();  makeodds();  makedups();  start_timer();  cout << "VHtest\n"; VHtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "CHtest\n"; CHtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "SLtest\n"; SLtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "XPtest\n"; XPtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "Splaytest\n"; Splaytest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "OSLtest\n"; OSLtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";  start_timer();  cout << "OXPtest\n"; OXPtest();  if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";}

⌨️ 快捷键说明

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