|
//file : p013.cpp //author: AOU //date : 07/21/2004 /* Project #11 07/22/2004 CArray operator -(const CArray &a2) const; empty ta for each x from *this if (x is not in a2) and (x is not in ta) add x to ta a1 = a2-a3 a1 should have distinct values Project #10 07/21/2004 bool operator <= (const CArray &a2) const; CArray operator ||(const CArray &a2) const; CArray operator &&(const CArray &a2) const; Project #9 07/20/2004 CArray operator +(const CArray &a2) const; friend ostream & operator << (ostream &bob , const CArray &a) Project #8 07/19/2004 bool deleteAtPos(int index); int purgeDupes(void); Project #7 07/15/2004 bool isEqualTo(const CArray &a2) const; bool operator ==(const CArray &a2) const; bool operator !=(const CArray &a2) const; Project #6 07/14/2004 friend bool isEqualTo(const CArray &a1, const CArray &a2); CArray(const CArray &second); and identify contstant functions Project #5 07/13/2004 void shuffle(void); friend void shuffle(CArray &a1); Project #4 07/12/2004 bool has(int x); bool hasDistinctValues(void); */ #include <iostream.h> #include <stdlib.h> #include <time.h> const int ARRAY_SIZE = 10; const int MIN_VALUE = 0; const int MAX_VALUE = 6; const int TEST_COUNT = 20; void testAll(void); void test_populate(void); void test_sortBubble(void); void test_isSorted(void); void test_constructor_n(void); void test_constructor_r(void); void test_constructor_s(void); void test_constructor_d(void); void test_has(void); void test_hasDistinctValues(void); void test_shuffle(void); void test_shuffle_friend(void); void test_isEqualTo_friend(void); void test_constructor_copy(void); void test_isEqualTo_member(void); void test_isEqualTo_operator(void); void test_isNotEqualTo_operator(void); void test_deleteAtPos(void); void test_purgeDupes(void); void test_operator_plus(void); void test_operator_subset(void); void test_operator_intersection(void); void test_operator_union(void); class CArray { private: int a[ARRAY_SIZE]; int n; public: CArray(void); void populate(void); void display(void) const; void sortBubble(void); bool isSorted(void) const; void display(int m) const; CArray(int n); CArray(char ch); bool has(int x) const; // myArray.has(x) bool hasDistinctValues(void) const; void shuffle(void); friend void shuffle(CArray &a1); friend bool isEqualTo(const CArray &a1, const CArray &a2); CArray(const CArray &second); bool isEqualTo(const CArray &a2) const; bool operator ==(const CArray &a2) const; bool operator !=(const CArray &a2) const; bool deleteAtPos(int index); int purgeDupes(void); CArray operator +(const CArray &a2) const; friend ostream & operator << (ostream &bob , const CArray &a); bool operator <= (const CArray &a2) const; CArray operator ||(const CArray &a2) const; CArray operator &&(const CArray &a2) const; }; void main(void) { //srand(time(NULL)); //test_populate(); //test_sortBubble(); //test_isSorted(); //test_constructor_n(); //test_constructor_r(); //test_constructor_s(); //test_constructor_d(); //test_has(); //test_hasDistinctValues(); //test_shuffle(); //test_shuffle_friend(); //test_isEqualTo_friend(); //test_constructor_copy(); //test_isEqualTo_member(); //test_isEqualTo_operator(); //test_isNotEqualTo_operator(); //test_deleteAtPos(); //test_purgeDupes(); //test_operator_plus(); //test_operator_subset(); test_operator_intersection(); //test_operator_union(); //testAll(); } ///////////////////////////////////////////////// ///////////////////////////////////////////////// void testAll(void) { test_populate(); test_sortBubble(); test_isSorted(); test_constructor_n(); test_constructor_r(); test_constructor_s(); test_constructor_d(); test_has(); test_hasDistinctValues(); test_shuffle(); test_shuffle_friend(); test_isEqualTo_friend(); test_constructor_copy(); test_isEqualTo_member(); test_isEqualTo_operator(); test_isNotEqualTo_operator(); test_deleteAtPos(); test_purgeDupes(); test_operator_plus(); test_operator_subset(); test_operator_intersection(); test_operator_union(); } ///////////////////////////////////////////////// // CArray CArray::operator ||(const CArray &a2) const ///////////////////////////////////////////////// /* Algorithm: create empty ta for each x in *this do the following if ta does not have x then add it to ta for each x in a2 do the following if ta does not have x then add it to ta */ CArray CArray::operator ||(const CArray &a2) const { CArray ta; int x, i; for (i=0; i<=this->n-1; i++) { x = this->a[i]; if (!ta.has(x)) ta.a[ta.n++] = x; } for (i=0; i<=a2.n-1; i++) { x = a2.a[i]; if (!ta.has(x)) ta.a[ta.n++] = x; } return ta; } ///////////////////////////////////////////////// // void test_operator_union(void) ///////////////////////////////////////////////// void test_operator_union(void) { /* create a1(M/2), a2(M/2), a3(M/2) display a1, a2, a3 a1 = a2 || a3; display some message display a1, a2, a3 check if a1 has distinct values */ cout << "+++++++++++++++++++\n"; cout << "test_operator_union\n"; cout << "+++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'), a3('r'); cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; a1 = a2 || a3; cout << "After a1 = a2 || a3;\n"; cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; if (a1.hasDistinctValues()) cout << "a1 has distinct values\n"; else cout << "a1 NHAS distinct values\n"; if (a2 <= a1) cout << "a2 is a subset of a1\n"; else cout << "a2 is NOT a subset of a1\n"; if (a3 <= a1) cout << "a3 is a subset of a1\n"; else cout << "a3 is NOT a subset of a1\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // CArray CArray::operator &&(const CArray &a2) const ///////////////////////////////////////////////// /* Algorithm: create empty ta for each x in *this do the following if a2 has x and ta nas x then add x to ta */ CArray CArray::operator &&(const CArray &a2) const { CArray ta; int x; for (int i=0; i<=this->n-1; i++) { x = this->a[i]; if (a2.has(x) && !ta.has(x)) ta.a[ta.n++] = x; } return ta; } ///////////////////////////////////////////////// // void test_operator_intersection(void) ///////////////////////////////////////////////// /* create a1(r), a2(r), a3(r) display a1, a2, a3 a1 = a2 && a3; display some message display a1, a2, a3 check if a1 has distinct values visually check if a1<=a2 visually check if a1<=a3 */ void test_operator_intersection(void) { cout << "++++++++++++++++++++++++++\n"; cout << "test_operator_intersection\n"; cout << "++++++++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'), a3('r'); cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; a1 = a2 && a3; cout << "After a1 = a2 && a3;\n"; cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; if (a1.hasDistinctValues()) cout << "a1 has distinct values\n"; else cout << "a1 NHAS distinct values\n"; if (a1 <= a2) cout << "a1 is a subset of a2\n"; else cout << "a1 is NOT a subset of a2\n"; if (a1 <= a3) cout << "a1 is a subset of a3\n"; else cout << "a1 is NOT a subset of a3\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::operator <= (const CArray &a2) const ///////////////////////////////////////////////// /* check if all the values in *this are in a2 for each x in *this do the following if a2 nhas x then return false return true */ bool CArray::operator <= (const CArray &a2) const { for (int i=0; i<=this->n-1; i++) if (!a2.has(this->a[i])) return false; return true; } ///////////////////////////////////////////////// // void test_operator_subset(void) ///////////////////////////////////////////////// void test_operator_subset(void) { cout << "++++++++++++++++++++\n"; cout << "test_operator_subset\n"; cout << "++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'); cout << "a1 = " << a1; cout << "a2 = " << a2; if (a1 <= a2) cout << "a1 is a subset of a2\n"; else cout << "a1 is NOT a subset of a2\n"; if (a2 <= a1) cout << "a2 is a subset of a1\n"; else cout << "a2 is NOT a subset of a1\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // ostream & operator << (ostream &bob , const CArray &a) ///////////////////////////////////////////////// ostream & operator << (ostream &bob , const CArray &a) { bob << "a[" << a.n << "] = "; for (int i=0; i<=a.n-1; i++) bob << a.a[i] << ' '; bob << endl; return bob; } ///////////////////////////////////////////////// // CArray CArray::operator +(const CArray &a2) const ///////////////////////////////////////////////// CArray CArray::operator +(const CArray &a2) const { //copy create *this elements into ta CArray ta(*this); //add elements of a2 to ta for (int i=0; i<=a2.n-1; i++) { ta.a[ta.n] = a2.a[i]; ta.n++; } return ta; } ///////////////////////////////////////////////// // void test_operator_plus(void) ///////////////////////////////////////////////// void test_operator_plus(void) { cout << "++++++++++++++++++\n"; cout << "test_operator_plus\n"; cout << "++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2(ARRAY_SIZE/2), a3(ARRAY_SIZE/2); cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; a1 = a2 + a3; cout << "After a1 = a2 + a3;\n"; cout << "a1 = " << a1; cout << "a2 = " << a2; cout << "a3 = " << a3; cout << "----------------\n"; } } ///////////////////////////////////////////////// // int CArray::purgeDupes(void) ///////////////////////////////////////////////// /* if n <2 then return 0 left=0 while (left <=n-2) { right = left+1 while(right<=n-1) { if a[left]=a[right] then shoot a[right] or deleteAtPos(right) right++ } left++ } */ int CArray::purgeDupes(void) { if (n < 2) return 0; int deleted=0, left=0, right; while (left <=n-2) { right = left+1; while(right<=n-1) if (a[left]==a[right]) deleteAtPos(right), deleted++; else right++; left++; } return deleted; } ///////////////////////////////////////////////// // void test_purgeDupes(void) ///////////////////////////////////////////////// void test_purgeDupes(void) { cout << "+++++++++++++++\n"; cout << "test_purgeDupes\n"; cout << "+++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); a1.display(); a1.purgeDupes(); cout << "After a1.purgeDupes();\n"; a1.display(); if(a1.hasDistinctValues()) cout << "List has distinct values\n"; else cout << "List does NOT have distinct values\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::deleteAtPos(int index) ///////////////////////////////////////////////// /* Examples index=3, list=[n=6,{6,3,6,2,9,8}] =>list=[n=5,{6,3,6,9,8}] Algorithm: if index <0 or >=n return false else if n=1 n=0, return true {index = 0 at this point} else for i=index to n-2 a[i] = a{i+1] n-- return true */ bool CArray::deleteAtPos(int index) { if (index <0 || index>=n) return false; else if (1==n) { n=0; return true;// {index = 0 at this point} } else { for (int i=index; i<=n-2; i++) a[i] = a[i+1]; n--; return true; } } ///////////////////////////////////////////////// // void test_deleteAtPos(void) ///////////////////////////////////////////////// void test_deleteAtPos(void) { cout << "++++++++++++++++\n"; cout << "test_deleteAtPos\n"; cout << "++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); a1.display(); int index = rand()%ARRAY_SIZE - 2; cout << "Deleting value at " << index << endl; if(a1.deleteAtPos(index)) cout << "Deletion was a success\n"; else cout << "Deletion was NOT a success\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::operator !=(const CArray &a2) const ///////////////////////////////////////////////// bool CArray::operator !=(const CArray &a2) const { return !(*this == a2); //return !(::isEqualTo(*this, a2)); //return !(this->isEqualTo(a2)); /* if (*this == a2) return false; else return true; */ /* if (this->n != a2.n) return true; for (int i=0; i<=this->n-1; i++) if (this->a[i] != a2.a[i]) return true; return false; */ } ///////////////////////////////////////////////// // test_isNotEqualTo_operator ///////////////////////////////////////////////// void test_isNotEqualTo_operator(void) { cout << "++++++++++++++++++++++++++\n"; cout << "test_isNotEqualTo_operator\n"; cout << "++++++++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'); cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1 != a2) cout << "a1 is NOT equal to a2\n"; else cout << "a1 is equal to a2\n"; if (a1 != a1) cout << "a1 is NOT equal to a1\n"; else cout << "a1 is equal to a1\n"; a1 = a2; //??? assigning a2 to a1 cout << "After a1 = a2;\n"; cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1 != a2) cout << "a1 is NOT equal to a2\n"; else cout << "a1 is equal to a2\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::operator ==(const CArray &a2) const ///////////////////////////////////////////////// bool CArray::operator ==(const CArray &a2) const { if (this->n != a2.n) return false; for (int i=0; i<=this->n-1; i++) if (this->a[i] != a2.a[i]) return false; return true; } ///////////////////////////////////////////////// // test_isEqualTo_operator ///////////////////////////////////////////////// void test_isEqualTo_operator(void) { cout << "+++++++++++++++++++++++\n"; cout << "test_isEqualTo_operator\n"; cout << "+++++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'); cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1 == a2) //if (a1.operator ==(a2)) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; if (a1 == a1) cout << "a1 is equal to a1\n"; else cout << "a1 is NOT equal to a1\n"; a1 = a2; //??? assigning a2 to a1 cout << "After a1 = a2;\n"; cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1 == a2) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::isEqualTo(const CArray &a2) const ///////////////////////////////////////////////// bool CArray::isEqualTo(const CArray &a2) const { if (this->n != a2.n) return false; for (int i=0; i<=this->n-1; i++) if (this->a[i] != a2.a[i]) return false; return true; } ///////////////////////////////////////////////// // test_isEqualTo_member ///////////////////////////////////////////////// void test_isEqualTo_member(void) { cout << "+++++++++++++++++++++\n"; cout << "test_isEqualTo_member\n"; cout << "+++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'); cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1.isEqualTo(a2)) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; if (a1.isEqualTo(a1)) cout << "a1 is equal to a1\n"; else cout << "a1 is NOT equal to a1\n"; a1 = a2; //??? assigning a2 to a1 cout << "After a1 = a2;\n"; cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (a1.isEqualTo(a2)) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // CArray::CArray(const CArray &second) ///////////////////////////////////////////////// CArray::CArray(const CArray &second) { cout << "Copy constructor CArray(CArray &second) was called\n"; this->n = second.n; for (int i=0; i<=second.n-1; i++) this->a[i] = second.a[i]; } ///////////////////////////////////////////////// // test_constructor_copy ///////////////////////////////////////////////// void test_constructor_copy(void) { cout << "+++++++++++++++++++++\n"; cout << "test_constructor_copy\n"; cout << "+++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); cout << "a1="; a1.display(); CArray a2(a1); cout << "a2="; a2.display(); cout << "a1="; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool isEqualTo(const CArray &a1, const CArray &a2) ///////////////////////////////////////////////// bool isEqualTo(const CArray &a1, const CArray &a2) { //a1.n =a2.n = 0; protected by const gun if (a1.n != a2.n) return false; for (int i=0; i<=a1.n-1; i++) if (a1.a[i] != a2.a[i]) return false; return true; } ///////////////////////////////////////////////// // test_isEqualTo_friend ///////////////////////////////////////////////// void test_isEqualTo_friend(void) { cout << "+++++++++++++++++++++\n"; cout << "test_isEqualTo_friend\n"; cout << "+++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'), a2('r'); cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (isEqualTo(a1, a2)) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; if (isEqualTo(a1, a1)) cout << "a1 is equal to a1\n"; else cout << "a1 is NOT equal to a1\n"; a1 = a2; //??? assigning a2 to a1 cout << "After a1 = a2;\n"; cout << "a1="; a1.display(); cout << "a2="; a2.display(); if (isEqualTo(a1, a2)) cout << "a1 is equal to a2\n"; else cout << "a1 is NOT equal to a2\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // void shuffle(CArray &a1) ///////////////////////////////////////////////// void shuffle(CArray &a1) { for (int i=1; i<=a1.n*a1.n*a1.n; i++) { int k47 = rand()%a1.n; int temp = a1.a[0]; a1.a[0] = a1.a[k47]; a1.a[k47] = temp; } } ///////////////////////////////////////////////// // void test_shuffle_friend(void) ///////////////////////////////////////////////// void test_shuffle_friend(void) { cout << "+++++++++++++++++++\n"; cout << "test_shuffle_friend\n"; cout << "+++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('s'); a1.display(); shuffle(a1); cout << "After shuffle\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void CArray::shuffle(void) ///////////////////////////////////////////////// /* do the following n*n times swap a random value with the first value */ void CArray::shuffle(void) { for (int i=1; i<=n*n*n; i++) { int k47 = rand()%n; int temp = a[0]; a[0] = a[k47]; a[k47] = temp; } } ///////////////////////////////////////////////// // void test_shuffle(void) ///////////////////////////////////////////////// void test_shuffle(void) { cout << "++++++++++++\n"; cout << "test_shuffle\n"; cout << "++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('s'); a1.display(); a1.shuffle(); cout << "After shuffle\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::hasDistinctValues(void) const ///////////////////////////////////////////////// bool CArray::hasDistinctValues(void) const { if (n<2) return true; int left, right; for (left = 0; left<=n-2; left++) for (right=left+1; right<=n-1; right++) if(a[left] == a[right]) return false; return true; } ///////////////////////////////////////////////// // void test_hasDistinctValues(void) ///////////////////////////////////////////////// void test_hasDistinctValues(void) { cout << "++++++++++++++++++++++\n"; cout << "test_hasDistinctValues\n"; cout << "++++++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); a1.display(); if (a1.hasDistinctValues()) cout << "list has distinct values\n"; else cout << "list does NOT have distinct values\n"; CArray a2('d'); a2.display(); if (a2.hasDistinctValues()) cout << "list has distinct values\n"; else cout << "list does NOT have distinct values\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // bool CArray::has(int x) const ///////////////////////////////////////////////// bool CArray::has(int x) const // myArray.has(x) // possibilities // n=0 and n>0 // n=0 =>false // n>0 =>false or true /* Algorithm: if n is 0 then return false else if x matches with any element in a[] return true else return false */ { if (0==n) return false; else { for (int j=0; j<=n-1; j++) if (x==a[j]) return true; return false; } } ///////////////////////////////////////////////// // void test_has(void) ///////////////////////////////////////////////// void test_has(void) { cout << "++++++++\n"; cout << "test_has\n"; cout << "++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); a1.display(); int x = MIN_VALUE + rand()%(MAX_VALUE-MIN_VALUE+1); cout << "Searching for " << x << endl; if (a1.has(x)) cout << x << " is in the list\n"; else cout << x << " is in NOT the list\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // CArray::CArray(void) ///////////////////////////////////////////////// CArray::CArray(void) { cout << "Constructor CArray(void) was called\n"; n = 0; for (int i=0; i<ARRAY_SIZE; i++) a[i] = 0; } ///////////////////////////////////////////////// // void CArray::display(void) const ///////////////////////////////////////////////// void CArray::display(void) const { cout << "a[" << n << "] = "; for (int i=0; i<=n-1; i++) cout << a[i] << ' '; cout << endl; } ///////////////////////////////////////////////// // void CArray::populate(void) ///////////////////////////////////////////////// void CArray::populate(void) { n = rand()%(ARRAY_SIZE+1); for (int i=0; i<=n-1; i++) a[i] = MIN_VALUE + rand()%(MAX_VALUE-MIN_VALUE+1); } ///////////////////////////////////////////////// // void CArray::sortBubble(void) ///////////////////////////////////////////////// void CArray::sortBubble(void) { int swapCount; do { swapCount = 0; for (int i=0; i<=n-2; i++) { if (a[i] > a[i+1]) { int temp = a[i]; a[i]=a[i+1]; a[i+1] = temp; swapCount++; } } } while (swapCount>0); } ///////////////////////////////////////////////// // bool CArray::isSorted(void) const ///////////////////////////////////////////////// bool CArray::isSorted(void) const { for (int i=0; i<=n-2; i++) if (a[i] > a[i+1]) return false; return true; } ///////////////////////////////////////////////// // void CArray::display(int m) const ///////////////////////////////////////////////// void CArray::display(int m) const { while (m-- > 0) { //display(); //CArray::display(); //(*this).display(); this->display(); } } ///////////////////////////////////////////////// // CArray::CArray(int n) ///////////////////////////////////////////////// CArray::CArray(int n) { cout << "Constructor CArray(int n) was called\n"; if (n > ARRAY_SIZE) n = ARRAY_SIZE; this->n = n; //CArray::n = n; //(*this).n = n; for (int i=0; i<n; i++) a[i] = MIN_VALUE + rand()%(MAX_VALUE-MIN_VALUE+1); } ///////////////////////////////////////////////// // CArray::CArray(char ch) ///////////////////////////////////////////////// CArray::CArray(char ch) { cout << "Constructor CArray(char ch) was called\n"; if ('r' == ch || 'R' == ch) this->populate(); else if ('s' == ch || 'S' == ch) { this->populate(); this->sortBubble(); } else if ('d' == ch || 'D' == ch) { n = 0; int times = rand()%(ARRAY_SIZE+1); for (int i=1; i<=times; i++) { int x = MIN_VALUE + rand()%(MAX_VALUE-MIN_VALUE+1); if (!this->has(x)) a[n++] = x; } } else n = 0; } ///////////////////////////////////////////////// // void test_constructor_r(void) ///////////////////////////////////////////////// void test_constructor_r(void) { cout << "++++++++++++++++++\n"; cout << "test_constructor_r\n"; cout << "++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('r'); cout << "After CArray a1('r');\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_constructor_s(void) ///////////////////////////////////////////////// void test_constructor_s(void) { cout << "++++++++++++++++++\n"; cout << "test_constructor_s\n"; cout << "++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('s'); cout << "After CArray a1('s');\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_constructor_d(void) ///////////////////////////////////////////////// void test_constructor_d(void) { cout << "++++++++++++++++++\n"; cout << "test_constructor_d\n"; cout << "++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1('d'); cout << "After CArray a1('d');\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_populate(void) ///////////////////////////////////////////////// void test_populate(void) { cout << "+++++++++++++\n"; cout << "test_populate\n"; cout << "+++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1; a1.display(); a1.populate(); a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_sortBubble(void) ///////////////////////////////////////////////// void test_sortBubble(void) { cout << "+++++++++++++++\n"; cout << "test_sortBubble\n"; cout << "+++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1; a1.populate(); a1.display(); a1.sortBubble(); cout << "After sortBubble()\n"; a1.display(); cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_isSorted(void) ///////////////////////////////////////////////// void test_isSorted(void) { cout << "+++++++++++++\n"; cout << "test_isSorted\n"; cout << "+++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { CArray a1; a1.populate(); a1.display(); a1.sortBubble(); cout << "After sortBubble()\n"; a1.display(); if (a1.isSorted()) cout << "SORT successful\n"; else cout << "SORT NOT successful\n"; cout << "----------------\n"; } } ///////////////////////////////////////////////// // void test_constructor_n(void) ///////////////////////////////////////////////// void test_constructor_n(void) { cout << "++++++++++++++++++\n"; cout << "test_constructor_n\n"; cout << "++++++++++++++++++\n"; for (int i=1; i<=TEST_COUNT; i++) { int n = rand()%(ARRAY_SIZE*2); CArray a1(n); cout << "After CArray a1(" << n << ");\n"; a1.display(); cout << "----------------\n"; } } |