00001 #include <iostream> 00002 #include <ctime> 00003 00004 #include <TRandom2.h> 00005 #include <TMath.h> 00006 00007 using namespace std; 00008 00009 const int n = 20; 00010 const int maxint = 10; 00011 const int except = 8; 00012 00013 template <typename T> void testBinarySearch() 00014 { 00015 T k[n]; 00016 00017 TRandom2 r( time( 0 ) ); 00018 for ( Int_t i = 0; i < n; i++) { 00019 T number = (T) r.Integer( maxint ); 00020 while ( number == except ) 00021 number = (T) r.Integer( maxint ); 00022 k[i] = number; 00023 } 00024 00025 std::sort(k, k+n); 00026 00027 for ( Int_t i = 0; i < n; i++) { 00028 cout << k[i] << ' '; 00029 } 00030 cout << endl; 00031 00032 00033 for ( T elem = -1; elem <= maxint; ++elem ) { 00034 Long_t index = TMath::BinarySearch((Long_t) 20, k, elem); 00035 00036 T* pind; 00037 pind = std::lower_bound(k, k+20, elem); 00038 Long_t index2 = ((*pind == elem)? (pind - k): ( pind - k - 1)); 00039 00040 pind = std::upper_bound(k, k+20, elem); 00041 Long_t index3 = ((*pind == elem)? (pind - k): ( pind - k - 1)); 00042 00043 cout << " ELEM = " << elem 00044 << " [TMATH] [i:" << index << " k[i]:" << k[index] << ']' 00045 << " [LOWER] [i:" << index2 << " k[i]:" << k[index2] << ']' 00046 << " [UPPER] [i:" << index3 << " k[i]:" << k[index3] << ']' 00047 << endl; 00048 00049 } 00050 } 00051 00052 void testBinarySearch() 00053 { 00054 testBinarySearch<Double_t>(); 00055 00056 cout << "Test done!" << endl; 00057 } 00058 00059 int main() 00060 { 00061 testBinarySearch(); 00062 00063 return 0; 00064 }