Files Classes Functions Hierarchy
00001 #include <cassert> 00002 #include <iostream> 00003 #include <vector> 00004 #include <algorithm> 00005 using namespace std; 00006 00007 #include <print.h> 00008 #include <aclock.h> 00009 00010 00011 #include <dumbarray.h> 00012 00013 #include <dumbarraytest.h> 00014 00015 00016 00017 void dumbarraytest01() 00018 { 00019 cout << "Testing the dumb array class" << endl; 00020 double a = 3.0; 00021 double b = 5.0; 00022 double c = 7.0; 00023 00024 cout << SHOW(a) << endl; 00025 cout << SHOW(b) << endl; 00026 cout << SHOW(c) << endl; 00027 00028 double ** v = new double * [3]; 00029 00030 dumbarray<double> vi(v,3,false); 00031 00032 cout << "Set the pointers" << endl; 00033 vi(0) = & a; 00034 vi(1) = & b; 00035 vi(2) = & c; 00036 00037 cout << SHOW(vi[0]) << endl; 00038 cout << SHOW(vi[1]) << endl; 00039 cout << SHOW(vi[2]) << endl; 00040 00041 cout << SHOW((vi[1]=7.2)) << endl; 00042 00043 cout << SHOW(b) << endl; 00044 00045 cout << "Now have a second pointer v2 but without ownership." << endl; 00046 dumbarray<double> v2(vi); 00047 00048 cout << SHOW(v2[1]) << endl; 00049 00050 cout << "If this crashes on program termination there is a bug." << endl; 00051 cout << "ie I am testing that memory was not double deleted." << endl; 00052 00053 delete[] v; 00054 } 00055 00056 00057 void dumbarraytest02() 00058 { 00059 cout << "Testing dumbarray 2." << endl; 00060 cout << "This time have dumbarray own the pointer array." << endl; 00061 00062 double a = 3.0; 00063 double b = 5.0; 00064 double c = 7.0; 00065 00066 cout << SHOW(a) << endl; 00067 cout << SHOW(b) << endl; 00068 cout << SHOW(c) << endl; 00069 00070 dumbarray<double> vi(3); 00071 vi(0) = &a; 00072 vi(1) = &b; 00073 vi(2) = &c; 00074 00075 cout << SHOW(vi[0]) << endl; 00076 cout << SHOW(vi[1]) << endl; 00077 cout << SHOW(vi[2]) << endl; 00078 } 00079 00080 00081 void sumintarray( int & sum, int * v, uintc n) 00082 { 00083 sum = 0; 00084 for (uint i=0; i<n; ++i) 00085 { 00086 sum += v[i]; 00087 } 00088 } 00089 00090 00091 template< typename T > 00092 void sumintarray( int & sum, T & v, uintc n, uintc n2) 00093 { 00094 sum = 0; 00095 00096 for (uint k=0; k<n2; ++k) 00097 { 00098 for (uint i=0; i<n; ++i) 00099 { 00100 sum += v[i]; 00101 } 00102 } 00103 } 00104 00105 00106 void dumbarraytest03() 00107 { 00108 cout << "Testing the timmes for accessing with a dumbarray rather" << endl; 00109 cout << " than a contiguous pointer." << endl; 00110 00111 cout << "For optimized code I got dumbarray taking twice as long as " << endl; 00112 cout << " vector<int> and int* access. " << endl; 00113 00114 uint N=1000; 00115 //uintc N=10000; 00116 00117 00118 vector< int * > v1(N); 00119 00120 vector<int> v2(N); 00121 00122 for (uint i=0; i<N; ++i) 00123 { 00124 v2[i] = i; 00125 00126 v1[i] = & v2[i]; 00127 } 00128 00129 random_shuffle(v1.begin(),v1.end()); 00130 00131 dumbarray<int> v3(& v1[0],N,false); 00132 00133 00134 aclock ac; 00135 00136 int sum; 00137 ac.measure(); 00138 sumintarray(sum,v2,N,N); 00139 ac.measure(); 00140 cout << "vector<int>" << endl; 00141 cout << SHOW(sum) << endl; 00142 cout << SHOW(ac.diff_ms()) << endl; 00143 00144 00145 ac.measure(); 00146 sumintarray(sum,v3,N,N); 00147 ac.measure(); 00148 cout << "dumbarray<int>" << endl; 00149 cout << SHOW(sum) << endl; 00150 cout << SHOW(ac.diff_ms()) << endl; 00151 00152 int * v4 = & v2[0]; 00153 ac.measure(); 00154 sumintarray(sum,v4,N,N); 00155 ac.measure(); 00156 cout << "int *" << endl; 00157 cout << SHOW(sum) << endl; 00158 cout << SHOW(ac.diff_ms()) << endl; 00159 } 00160 00161 00162
1.5.8