/* -*- C++ -*- */ /************************************************************************* * Copyright(c) 1995~2005 Masaharu Goto (root-cint@cern.ch) * * For the licensing terms see the file COPYING * ************************************************************************/ // // cint test of global function template // #include #if (defined(G__MSC_VER)&&(G__MSC_VER<=1200)) || (defined(_MSC_VER)&&(_MSC_VER<=1200)) #else #define TEST #endif /////////////////////////////////////////////////////////////////////// // test3 /////////////////////////////////////////////////////////////////////// template class B { public: B(T in=0) { b = in; } T b; }; template int compare3(B a,B b) { return( a.b==0 ? a.b==b.b : (((a.b-b.b)/a.b) < 1e-4) ); } void test3() { int i; B b1,b2(0.02); for(i=0;i<5;i++) { b1.b = i/100.0; printf("%d=compare3(%g,%g)\n",compare3(b1,b2),b1.b,b2.b); } } /////////////////////////////////////////////////////////////////////// // test1 /////////////////////////////////////////////////////////////////////// template int compare(T a,T b) { if(a==b) return(1); else return(0); } class A { public: A(int in=0) { a = in ; } int a; }; int operator==(A a,A b) { return( a.a==0 ? a.a==b.a : (((a.a-b.a)/a.a)<1e-4)); } void test1() { int i; int i1,i2=2; double d1,d2=0.2; A a1,a2(20); for(i=0;i<5;i++) { i1=i; d1 = i/10.0; a1.a=i*10; //printf("%d=compare(%d,%d) %d=compare(%g,%g)\n" //,compare(i1,i2),i1,i2 ,compare(d1,d2),d1,d2); printf("%d=compare(%d,%d) %d=compare(%g,%g) %d=compare(%d,%d)\n" ,compare(i1,i2),i1,i2 ,compare(d1,d2),d1,d2 ,compare(a1,a2),a1.a,a2.a); } } /////////////////////////////////////////////////////////////////////// // test2 /////////////////////////////////////////////////////////////////////// template int compare2(T a,E b) { if(a==b) return(1); else return(0); } void test2() { int i; A a(2); for(i=0;i<5;i++) { printf("%d=compare2(%d,%d)\n",compare2(i,a),i,a.a); } for(i=0;i<5;i++) { printf("%d=compare2(%d,%d)\n",compare2(a,i),a.a,i); } } /////////////////////////////////////////////////////////////////////// // test4 /////////////////////////////////////////////////////////////////////// #ifdef TEST template class E> int cmp(E a,E b) { return(a.b==b.b); } #endif void test4() { #ifdef TEST int i; B b1,b2(200); for(i=0;i<5;i++) { b1.b = i*100; printf("%d=cmp(%d,%d)\n",cmp(b1,b2),b1.b,b2.b); } #endif } /////////////////////////////////////////////////////////////////////// // test5 /////////////////////////////////////////////////////////////////////// template class ary { public: ary() { size = SIZE; } T a[SIZE]; size_t size; }; const size_t sz=5; void test5() { ary > a; printf("a.size=%d\n",(int)a.size); } /////////////////////////////////////////////////////////////////////// // main /////////////////////////////////////////////////////////////////////// int main() { test5(); test4(); test3(); test2(); test1(); return 0; }