| Karby | 
			02-06-2004 08:57 AM | 
		 
		 
		 
		
			help...test driver with operators   
		
		
		we were given an assgnment to write test drivers for our two previous assgnments: class'Can' and class'Array', where we have to test each function in the program and show all the results and error messages going to a file, and the messages "Command number x completed" and "Testing completed" outputted to the screen. The 'Can' part was pretty easy because it just had a  different functions with different names and we only had to test one operator: the input extraction, plus the copy constructor was easy to figure out: 
	PHP Code: 
	
		 
		
		
			
// Test driver
 
 #include <iostream>
 #include <fstream>
 #include <string>
 #include <cstdlib>
 #include "Can.h"
 using namespace std;
 
 int main()
 {
 
     int numCommands;
 
 
     ifstream ins;
     ofstream outs;
 
     string inName;
     string outName;
 
     string label;
     string command;
 
     can cannis;
     
     cout << "Enter the name of input file; press return.\n";
     cin >> inName;
     ins.open(inName.c_str());
 
     cout << "Enter the name of output file; press return.\n";
     cin >> outName;
     outs.open(outName.c_str());
 
     cout << "Enter the name of the test run; press return.\n";
     cin >> label;
     outs << label << endl;
 
     
     numCommands = 0;
     ins >> command;
     
     while (command != "Quit")
     {
 
         if (command == "operator")
         {
             float wt, rad, ht;
             numCommands++;
             ins >> wt >> rad >> ht;
             if ( wt > 0 && rad > 0 && ht > 0)
             {
                 outs << "\nOperator is good" << endl;
             
                 outs <<  wt << rad << ht << endl;
             }
             else
             { 
                 outs << "File contains one or more values of invalid data \n";
             }
             cout << "Command number " << numCommands << " completed.\n";
         }
 
         else if (command == "can")
         {
             ins >> cannis;
             cannis.getWeight();
             cannis.getHeight();
             cannis.getRadius();
                 
             
                 outs <<    cannis.getWeight() << endl;
                 
             outs <<    cannis.getHeight() << endl;
                         outs <<    cannis.getRadius() << endl;
         }
 
         else if (command == "gramsProduct")
         {
             int productVol;
             numCommands ++;
             
             ins >> productVol;
             cannis.gramsProduct(productVol);
             if (productVol < 0 )
 
                 outs << "Invalid data in file\n";
             else
             
                 outs << productVol << endl;
                          
             cout << "Command number " << numCommands << " completed.\n";
 
         }
             
         else if (command == "getWeight")
         {
             numCommands ++;
             outs <<    cannis.getWeight() << endl;
             
             
             cout << "Command number " << numCommands << " completed.\n";
         }
                 
         else if (command == "getRadius")
         {
             
         outs <<    cannis.getRadius() << endl;
         
             numCommands ++;
             cout << "Command number " << numCommands << " completed.\n";
         }    
         
         else if (command == "getHeight")
         {
             
         outs <<    cannis.getHeight() << endl;
             numCommands ++;
             cout << "Command number " << numCommands << " completed.\n";
         }    
         
         else if (command == "volume")
         {
         
         outs <<    cannis.volume() << endl;
             numCommands ++;
             cout << "Command number " << numCommands << " completed.\n";
         }    
 
 
         ins >> command;
     }
 
     outs << "Testing completed.\n";
     ins.close();
     outs.close();
 
 
 
     return 0;
 } 
 
		 
		
		 
	 
 
	PHP Code: 
	
		 
		
		
			
 // input file:
 operator
 6 9 3 
 
 can
 6 9 3
 
 gramsProduct
 -4
 getWeight
 
 getRadius
 
 getHeight
 
 volume
 
 operator
 6 9 -3
 
 Quit 
 
		 
		
		 
	 
 but the 'Array' program has a lot of different operators, and even though they do different things, they basically all have the same names. not only that, i can't test the Array copy constructor the way i did in Can because of all the operators...or at least...i thin k that's the problem:
 
	PHP Code: 
	
		 
		
		
			
#include <iostream>
 #include <iomanip>
 #include <fstream>
 using namespace std;
 
 #include <cassert>
 #include <cstdlib>
 #include "array.h"
 //
 //  Default constructor
 //
 Array::Array()
 {
     size = 0;
 }
 
 //
 //  Copy constructor
 //
 Array::Array( const Array& a )
 {
     for (int j = 0;  j < a.size;  ++j)
         data[j] = a.data[j];
     size = a.size;
 }
 
 //
 //  Assignment operator
 //
 Array& Array:: operator = (const Array& a)
 {
     for (int j = 0;  j < a.size;  ++j)
         data[j] = a.data[j];
     size = a.size;
     return *this;
 }
 
 //
 //  Equality operator
 //
 bool Array:: operator == (const Array& a) const
 {
     bool equal = size == a.size;
     int j = 0;
 
     while (j < size  &&  equal)
         if (data[j] != a.data[j])
             equal = false;
         else
             ++j;
     return equal;
 }
 
 //
 //  Subscript operator with range checking
 //
 Element& Array:: operator [] (int index) 
 {
     assert( index >= 0  &&  index < size );
     return data[index];
 }
 
 // Multiplication operator
 
 Element Array:: operator * (const Array& a)
 {
     Element product = 0;
     assert(size == a.size);
 
     for (int i = 0; i < size; i++)
         product += data[i] * a.data[i];
 
     return product;
 }
 
 //
 //  Revised Input extraction operator
 //
 istream& operator >> (istream& in, Array& a)
 {
       a.size = MaxArraySize;
 
     int i = 0;
     in >> a.data[i];
     i++;
     while ( i < a.size && !in.fail() && !in.eof())
     {
         in >> a.data[i];
          ++i;
     }
     if(!in.fail() || !in.eof())
     {
         in >> a.data[i];
         if(!in.fail())
         {
             in.setstate(ios::failbit);
             a.size = 0;
         }
     }
     else if(in.eof())
     {
         in.clear();
         a.size = i - 1;
     }
     else
         a.size = 0;
             
     return in;
 }
 
 //
 //  Output insertion operator
 //
 ostream& operator << (ostream& out, const Array& a)
 {
     for (int i = 0; i < a.size; ++i)
         out << setw( 4 ) << a.data[i];
     out << endl;
     return out;
 } 
 
		 
		
		 
	 
 i can't do: 
if (command == " operator") 
because they all say operator.
 
and i can't say: 
"operator  
operator 
operator 
etc." 
in the input file...
 
and i have no idea how to test the copy constructor with all those operators...i need help
 i hope i'm saying all of this right
i think i gave all the info that i needed to...but if you think i left anything out...then i can show everything else  
	 |