Exemple #1
0
int main()
{
  cout << "Ladies and Gentleman..." << endl;
  cout << "Start of the Assertions..." << endl;

  RationalNumber a (2,3), b (5,3), c(0,1), d(2,3), e(9,3), f(-4,2), g(17,3);

  /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  cout << "RationalNumbers: Add, Sub, Mul, Div" << endl;


  // RationalNumber operation Solutions
  RationalNumber r1 (7,3);
  RationalNumber r2 (-3,3);
  RationalNumber r3 (10,9);
  RationalNumber r4 (2,5);

  assert(r1 == a+b);
  assert(r2 == a-b);
  assert(r3 == a*b);
  assert(r4 == a/b);


  RationalNumber intTrNumPlus (11,3);
  RationalNumber intTrNumMinus (-7,3);
  RationalNumber intTrNumMult (6,3);
  RationalNumber intTrNumDiv (2,9);

  //Assert operator overloading with ints
  assert(a + 3 == intTrNumPlus);
  assert(a - 3 == intTrNumMinus);
  assert(a * 3 == intTrNumMult);
  assert(a / 3 == intTrNumDiv);

  RationalNumber doubleTrNumPlus(75233,18750);
  RationalNumber doubleTrNumMinus (-50233,18750);
  RationalNumber doubleTrNumMult (20911,9375);
  RationalNumber doubleTrNumDiv (12500,62733);

  //Assert operator overloading with doubles
  assert(a + 3.34576 == doubleTrNumPlus);
  assert(a - 3.34576 == doubleTrNumMinus);
  assert(a * 3.34576 == doubleTrNumMult);
  assert(a / 3.34576 == doubleTrNumDiv);

  // Given complex assertions
  RationalNumber solution(40,17);
  assert(c + d * e - f / g == solution);
  RationalNumber z(4, -2);
  assert(-f == z);

  cout << "Success!\n" << endl;
  /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  cout << "RationalNumbers: Conversions Double --> Rnum, Integer --> Rnum" << endl;

  double d_a = 2342.456742;
  RationalNumber rn_converted = rn_converted.decToFrac (d_a);
  cout << "Double representation of number: " << d_a << endl;
  rn_converted.print ();



  cout << "Success!\n" << endl;
  /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  cout << "RationalNumbers: <, >, >=, <=" << endl;
  assert(b > a);
  assert(b >= b);
  assert(b >= a);
  assert(a <= b);
  assert(b <= b);

  cout << "Success!\n" << endl;
  /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  cout << "RationalNumberArray: Create, Copy, Resize, Destroy, Add, Remove, " <<
          "Insert, Delete, Assign, Read/Write Index" << endl;

  // create rna
  cout << "testing whether RationalNumberArray adds RationalNumbers..." << endl;
  RationalNumberArray rna_a (2);
  rna_a.add (a);
  rna_a.add (b);
  rna_a.add (c);
  rna_a.add (d);
  rna_a.print ();
  cout << "Complete\n" << endl;

  cout << "testing whether RationalNumberArray removes RationalNumbers..." << endl;
  rna_a.remove (0,2);
  rna_a.print ();
  cout << "Complete\n" << endl;

  cout << "testing whether RationalNumberArray inserts a RationalNumber..." << endl;
  // Test RationalNumber insert
  rna_a.insert (g,7);
  rna_a.print ();

  cout << "testing copy constructor and destructor..." << endl;
  // Test call Default Constructor...
  RationalNumberArray rna_b (rna_a);
  rna_b.print ();
  cout << "Complete\n" << endl;


  // Test Assignment ops
  RationalNumberArray rna_c;
  rna_c.add (c);
  rna_c.add (d);
  cout << "Before assign" << endl;
  rna_c.print ();

  rna_c = rna_a;
  cout << "After assign" << endl;
  rna_c.print ();
  cout << "Complete\n" << endl;


  // Write rnum to index
  rna_c[0] = d;
  rna_c.print ();

  // Read rnum from index
  rna_c[7].print ();


  // Given stuff
  int i = 5, j = 4;
  RationalNumber aa(1,2), bb(7,3);

  RationalNumber aaa = i * aa, bbb = bb / j;
  RationalNumber ia (i);
  RationalNumber ja = j;
  cout <<"-------" << endl;
  aaa.print();
  bbb.print();
  ia.print();
  ja.print();


  cout << "Success!\n" << endl;
  /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

  //TEst Exceptions

  //rna_a Index out of Bounds --> remove
  try {
    rna_a.remove (1, 1000);
  } catch (Exception ex) {
    cout << ex.getMessage() << endl;
  }

  //rna_a Invalid Seq --> remove
  try {
    rna_a.remove (10, 5);
  } catch (Exception ex) {
    cout << ex.getMessage() << endl;
  }

  //rna_a Index out of Bounds --> index operator overload
  try {
    rna_a[100] = c;
  } catch (Exception ex) {
    cout << ex.getMessage() << endl;
  }


  // double test = (double)a;
  // cout << test << endl;

  //++++++++++++++++++

  cout << "The min value for double epsilon is:  "
       << numeric_limits<double>::epsilon( )
       << endl;
  cout << "The min value for long epsilon is:  "
       << numeric_limits<long>::epsilon( )
       << endl;
  cout << "The maximum value for type long is:  "
       << numeric_limits<long>::max( )
       << endl;
  cout << "The maximum value for type double is:  "
       << numeric_limits<double>::max( )
       << endl;

  //******************

  cout << "Fin" << endl;

  //Should never get here...
  return 0;
}