sl@0: #include <vector>
sl@0: #include <algorithm>
sl@0: #include "fadapter.h"
sl@0: #include "fib.h"
sl@0: 
sl@0: #include "cppunit/cppunit_proxy.h"
sl@0: 
sl@0: #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
sl@0: using namespace std;
sl@0: #endif
sl@0: 
sl@0: //
sl@0: // TestCase class
sl@0: //
sl@0: class GeneratorTest : public CPPUNIT_NS::TestCase
sl@0: {
sl@0:   CPPUNIT_TEST_SUITE(GeneratorTest);
sl@0:   CPPUNIT_TEST(gener1);
sl@0:   CPPUNIT_TEST(gener2);
sl@0:   CPPUNIT_TEST(genern1);
sl@0:   CPPUNIT_TEST(genern2);
sl@0:   CPPUNIT_TEST_SUITE_END();
sl@0: 
sl@0: protected:
sl@0:   void gener1();
sl@0:   void gener2();
sl@0:   void genern1();
sl@0:   void genern2();
sl@0: };
sl@0: 
sl@0: CPPUNIT_TEST_SUITE_REGISTRATION(GeneratorTest);
sl@0: 
sl@0: //
sl@0: // tests implementation
sl@0: //
sl@0: 
sl@0: static  int cxxrand() { return rand();}
sl@0: 
sl@0: void GeneratorTest::gener1()
sl@0: {
sl@0:   int numbers[10];
sl@0: #if defined(__MVS__)
sl@0:   generate(numbers, numbers + 10, ptr_gen(cxxrand));
sl@0: #else
sl@0:   generate(numbers, numbers + 10, cxxrand);
sl@0: #endif
sl@0:   // any suggestions?
sl@0: }
sl@0: void GeneratorTest::gener2()
sl@0: {
sl@0:   vector <int> v1(10);
sl@0:   Fibonacci generator;
sl@0:   generate(v1.begin(), v1.end(), generator);
sl@0: 
sl@0:   CPPUNIT_ASSERT(v1[0]==1);
sl@0:   CPPUNIT_ASSERT(v1[1]==1);
sl@0:   CPPUNIT_ASSERT(v1[2]==2);
sl@0:   CPPUNIT_ASSERT(v1[3]==3);
sl@0:   CPPUNIT_ASSERT(v1[4]==5);
sl@0:   CPPUNIT_ASSERT(v1[5]==8);
sl@0:   CPPUNIT_ASSERT(v1[6]==13);
sl@0:   CPPUNIT_ASSERT(v1[7]==21);
sl@0:   CPPUNIT_ASSERT(v1[8]==34);
sl@0:   CPPUNIT_ASSERT(v1[9]==55);
sl@0: }
sl@0: void GeneratorTest::genern1()
sl@0: {
sl@0: #if !defined (_STLP_MEMBER_POINTER_PARAM_BUG)
sl@0:   //*TY 07/18/98 - added conditional
sl@0:   // since ptr_gen() is not defined under this condition
sl@0:   // (see xfunction.h)
sl@0:   vector <int> v1(10);
sl@0:   generate_n(v1.begin(), v1.size(), ptr_gen(cxxrand));
sl@0: #endif  //_STLP_MEMBER_POINTER_PARAM_BUG  //*TY 07/18/98 - added
sl@0: }
sl@0: void GeneratorTest::genern2()
sl@0: {
sl@0:   vector <int> v1(10);
sl@0:   Fibonacci generator;
sl@0:   generate_n(v1.begin(), v1.size(), generator);
sl@0: 
sl@0:   CPPUNIT_ASSERT(v1[0]==1);
sl@0:   CPPUNIT_ASSERT(v1[1]==1);
sl@0:   CPPUNIT_ASSERT(v1[2]==2);
sl@0:   CPPUNIT_ASSERT(v1[3]==3);
sl@0:   CPPUNIT_ASSERT(v1[4]==5);
sl@0:   CPPUNIT_ASSERT(v1[5]==8);
sl@0:   CPPUNIT_ASSERT(v1[6]==13);
sl@0:   CPPUNIT_ASSERT(v1[7]==21);
sl@0:   CPPUNIT_ASSERT(v1[8]==34);
sl@0:   CPPUNIT_ASSERT(v1[9]==55);
sl@0: }