/* Array1Test.cpp  --  Array class test program */
#include <iostream>
#include "Array1.cpp"

using namespace std;


int main() {
  Array integers1(7);        // seven-element Array
  Array integers2;           // 10-element Array by default

  // Print integers1 size and contents
  cout << "Size of array integers1 is "
       << integers1.getSize()
       << "\nArray after initialization:\n" << integers1;


  // Print integers2 size and contents
  cout << "\nSize of array integers2 is "
       << integers2.getSize()
       << "\nArray after initialization:\n" << integers2;


  // Input and print integers1 and integers2
  cout << "\nInput 17 integers:\n";
  cin >> integers1 >> integers2;

  cout << "\nAfter input, the arrays contain:\n"
       << "integers1:\n" << integers1
       << "integers2:\n" << integers2;


  // Use overloaded inequality (!=) operator
  cout << "\nEvaluating: integers1 != integers2\n";

  if (integers1 != integers2) {
    cout << "integers1 and integers2 are not equal\n";
  }


  // Create array integers3 using integers1 as an
  // initializer; print size and contents
  Array integers3(integers1);  // calls copy constructor

  cout << "\nSize of array integers3 is "
       << integers3.getSize()
       << "\nArray after initialization:\n" << integers3;


  // Use overloaded assignment (=) operator
  cout << "\nAssigning integers2 to integers1:\n";
  integers1 = integers2;     // note target is smaller

  cout << "integers1:\n" << integers1
       << "integers2:\n" << integers2;


  // Use overloaded equality (==) operator
  cout << "\nEvaluating: integers1 == integers2\n";

  if (integers1 == integers2) {
    cout << "integers1 and integers2 are equal\n";
  }


  // Use overloaded subscript operator to create rvalue
  cout << "\nintegers1[5] is " << integers1[5];


  // Use overloaded subscript operator to create lvalue
  cout << "\n\nAssigning 1000 to integers1[5]\n";
  integers1[5] = 1000;
  cout << "integers1:\n" << integers1;


  // Attempt to use out-of-range subscript
  cout << "\nAttempt to assign 1000 to integers1[15]" << endl;
  integers1[15] = 1000;      // ERROR: out of range

  return 0;
}
