1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass BsearchTest : public CPPUNIT_NS::TestCase 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(BsearchTest); 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(bsearch1); 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(bsearch2); 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void bsearch1(); 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void bsearch2(); 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static bool str_compare(const char* a_, const char* b_); 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(BsearchTest); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid BsearchTest::bsearch1() 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int vector[100]; 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(int i = 0; i < 100; i++) 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector[i] = i; 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(binary_search(vector, vector + 100, 42)); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid BsearchTest::bsearch2() 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const* labels[] = { "aa", "dd", "ff", "jj", "ss", "zz" }; 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned count = sizeof(labels) / sizeof(labels[0]); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // DEC C++ generates incorrect template instatiation code 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // for "ff" so must cast 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(binary_search(labels, labels + count, (const char *)"ff", str_compare)); 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool BsearchTest::str_compare(const char* a_, const char* b_) 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return strcmp(a_, b_) < 0 ? 1 : 0; 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 50