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

📄 avltest.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// avltest.h --- test program for avl maps and sets//// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.com>// Maintainer: LPS//// This file is part of the SC Toolkit.//// The SC Toolkit is free software; you can redistribute it and/or modify// it under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.//// The SC Toolkit is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Library General Public License for more details.//// You should have received a copy of the GNU Library General Public License// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//// The U.S. Government is granted a limited license as per AL 91-7.//#include <iostream>#include <math.h>#include <stdlib.h>#ifdef HAVE_CONFIG_H#include <scconfig.h>#endif#include <util/container/eavlmmap.h>#include <util/container/avlmap.h>#include <util/container/avlset.h>using namespace std;using sc::AVLMap;using sc::AVLSet;using sc::EAVLMMap;using sc::EAVLMMapNode;using sc::compare;class Data {  public:    EAVLMMapNode<int,Data> map1;    EAVLMMapNode<int,Data> map2;  public:    Data(int k1, int k2 = 0): map1(k1), map2(k2) {};    void print(int indent = 0);    void change1(int val) { map1.key = val; }};voidData::print(int indent){  for (int i=0; i<indent; i++) cout << " ";  cout << map1.key;}#define TEST1 1#define TEST2 1#define TEST3 1#define TEST4 1#define TEST5 1#define TEST6 1#define TEST7 1#define TEST8 0#define TEST9 0static int Ni = 0;static int Nr = 0;static int Nf = 0;voidtestmap(EAVLMMap<int, Data>& map, Data** data, int n){  for (int i=0; i<n; i++) {      for (int j=0; j<n; j++) {          map.insert(data[j]);          Ni++;        }#if 0      if (i==0) {          cout << "--------------------------------------------" << endl;          map.check();          map.print2();        }      cout << "............................. removing ";      data[i]->print();      cout << endl;#endif      map.remove(data[i]);      Nr++;#if 0      map.print2();#endif      map.check();      map.clear_without_delete();    }}voidrantest(EAVLMMap<int, Data>&map1, Data** data, int n){  int i;  for (i=0; i<n; i++) {      Data* d = data[i];      d->change1(random());      map1.insert(d);      Ni++;    }  map1.check();  for (i=0; i<n; i++) {      map1.find(i);      Nf++;    }  for (i=0; i<n; i++) {      Data* d = data[i];      map1.remove(d);      Nr++;    }  map1.check();  map1.clear_without_delete();}intmain(){  int i;  const int maxkey = 9;  EAVLMMap<int,Data> map1(&Data::map1);  Data* data[maxkey][maxkey];  Data* currentdata[maxkey];  for (i=0; i<maxkey; i++) {      for (int j=0; j<maxkey; j++) {          data[i][j] = new Data(j);        }    }  int max;  const int unique = 1;  cout << "emmap:" << endl;  EAVLMMap<int,Data> emap(&Data::map1);  for (i=0; i<maxkey; i++) {      emap.insert(new Data(i/2,i));      emap.check();    }  for (EAVLMMap<int,Data>::iterator im=emap.begin(); im!=emap.end(); im++) {      cout << " " << im.key() << " " << im->map2.key << endl;    }  cout << "map:" << endl;  AVLMap<int, char> icmap;  for (i=0; i<maxkey; i++) {      int d = random();      icmap.insert(d, i+'a');      icmap.insert(d, i+'a');      icmap.check();    }  icmap.print();  for (AVLMap<int,char>::iterator ic=icmap.begin(); ic!=icmap.end(); ic++) {      cout << " " << ic.key() << " " << ic.data() << endl;    }  cout << "set:" << endl;  AVLSet<int> iset;  for (i=0; i<10; i++) {      iset.insert(i);    }  if (iset.length() != 10) abort();  iset.remove(100);  if (iset.length() != 10) abort();  if (!iset.contains(3)) abort();  iset.remove(3);  if (iset.contains(3)) abort();  if (iset.length() != 9) abort();  for (i=0; i<10; i++) iset.remove(i);  if (iset.length() != 0) abort();  if (iset.contains(3)) abort();  if (iset.length() != 0) abort();  iset.clear();  for (i=0; i<maxkey; i++) {      int d = random();      iset.insert(d);      iset.insert(d);      iset.check();    }  iset.print();  for (AVLSet<int>::iterator is=iset.begin(); is!=iset.end(); is++) {      cout << " " << is.key() << endl;    }#if TEST1  cout << "=================================================" << endl;  max = 1;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      testmap(map1, currentdata, max);    }#endif#if TEST2  cout << "=================================================" << endl;  max = 2;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;          currentdata[1] = data[0][j];          testmap(map1, currentdata, max);        }    }#endif#if TEST3  cout << "=================================================" << endl;  max = 3;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;          currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;              currentdata[2] = data[0][k];              testmap(map1, currentdata, max);            }        }    }#endif#if TEST4  cout << "=================================================" << endl;  max = 4;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;          currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;              currentdata[2] = data[0][k];              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;                  currentdata[3] = data[0][l];                  testmap(map1, currentdata, max);                }            }        }    }#endif#if TEST5  cout << "=================================================" << endl;  max = 5;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;          currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;              currentdata[2] = data[0][k];              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;                  currentdata[3] = data[0][l];                  for (int m=0; m<max; m++) {                  if (unique && m==i || m==j || m==k || m==l) continue;                  currentdata[4] = data[0][m];                  testmap(map1, currentdata, max);                  }                }            }        }    }#endif#if TEST6  cout << "=================================================" << endl;  max = 6;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;          currentdata[1] = data[0][j];          cout << "6: i = " << i << " j = " << j << endl;          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;      currentdata[2] = data[0][k];              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;      currentdata[3] = data[0][l];                  for (int m=0; m<max; m++) {                  if (unique && m==i || m==j || m==k || m==l) continue;      currentdata[4] = data[0][m];                  for (int n=0; n<max; n++) {                  if (unique && n==i || n==j || n==k || n==l || n==m) continue;      currentdata[5] = data[0][n];                  testmap(map1, currentdata, max);                }                }                }            }        }    }#endif#if TEST7  cout << "=================================================" << endl;  max = 7;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;      currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;              currentdata[2] = data[0][k];              cout << "7: i = " << i << " j = " << j << " k = " << k << endl;              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;      currentdata[3] = data[0][l];                  for (int m=0; m<max; m++) {                  if (unique && m==i || m==j || m==k || m==l) continue;      currentdata[4] = data[0][m];                  for (int n=0; n<max; n++) {                  if (unique && n==i || n==j || n==k || n==l || n==m) continue;      currentdata[5] = data[0][n];                  for (int o=0; o<max; o++) {                  if (unique && o==i || o==j || o==k || o==l || o==m || o==n) continue;      currentdata[6] = data[0][o];                  testmap(map1, currentdata, max);                }                }                }                }            }        }    }#endif#if TEST8  cout << "=================================================" << endl;  max = 8;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;      currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;      currentdata[2] = data[0][k];              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;      currentdata[3] = data[0][l];                  cout << "7: i = " << i << " j = " << j << " k = " << k                       << " l = " << l << endl;                  for (int m=0; m<max; m++) {                  if (unique && m==i || m==j || m==k || m==l) continue;      currentdata[4] = data[0][m];                  for (int n=0; n<max; n++) {                  if (unique && n==i || n==j || n==k || n==l || n==m) continue;      currentdata[5] = data[0][n];                  for (int o=0; o<max; o++) {                  if (unique && o==i || o==j || o==k || o==l || o==m || o==n) continue;      currentdata[6] = data[0][o];                  for (int p=0; p<max; p++) {                  if (unique && p==i||p==j||p==k||p==l||p==m||p==n||p==o) continue;      currentdata[7] = data[0][p];                  testmap(map1, currentdata, max);                }                }                }                }                }            }        }    }#endif#if TEST9  cout << "=================================================" << endl;  max = 9;  for (i=0; i<max; i++) {      currentdata[0] = data[0][i];      for (int j=0; j<max; j++) {          if (unique && i == j) continue;      currentdata[1] = data[0][j];          for (int k=0; k<max; k++) {              if (unique && k==i || k==j) continue;      currentdata[2] = data[0][k];              for (int l=0; l<max; l++) {                  if (unique && l==i || l==j || l==k) continue;      currentdata[3] = data[0][l];                  for (int m=0; m<max; m++) {                  if (unique && m==i || m==j || m==k || m==l) continue;      currentdata[4] = data[0][m];                  cout << "7: i = " << i << " j = " << j << " k = " << k                       << " l = " << l << " m = " << m << endl;                  for (int n=0; n<max; n++) {                  if (unique && n==i || n==j || n==k || n==l || n==m) continue;      currentdata[5] = data[0][n];                  for (int o=0; o<max; o++) {                  if (unique && o==i || o==j || o==k || o==l || o==m || o==n) continue;      currentdata[6] = data[0][o];                  for (int p=0; p<max; p++) {                  if (unique && p==i||p==j||p==k||p==l||p==m||p==n||p==o) continue;      currentdata[7] = data[0][p];                  for (int q=0; q<max; q++) {                  if (unique && q==i||q==j||q==k||q==l||q==m||q==n||q==o||q==p) continue;      currentdata[8] = data[0][q];                  testmap(map1, currentdata, max);                }                }                }                }                }                }            }        }    }#endif  cout << "Ni = " << Ni << ", Nr = " << Nr << ", N = " << Ni+Nr << endl;  const int maxdat2 = 2000;  Data * data2[maxdat2];  for (i=0; i<maxdat2; i++) {      data2[i] = new Data(i);    }  for (i=0; i<maxdat2; i++) {      if (i%100 == 0) cout << "-";    }  cout << endl;  for (i=0; i<maxdat2; i++) {      if (i%100 == 0) {          cout << ".";        }      rantest(map1, data2, i);    }  cout << endl;  cout << "Ni = " << Ni << ", Nr = " << Nr << ", Nf = " << Nf       << ", N = " << Ni+Nr << endl;  return 0;}#ifdef EXPLICIT_TEMPLATE_INSTANTIATIONtemplate class AVLMapNode<int, char>;template class EAVLMMap<int,AVLMapNode<int, char> >;template class AVLMapNode<int, int>;template class EAVLMMap<int,AVLMapNode<int, int> >;template class EAVLMMap<int, Data >;#endif/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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