#include <iostream>
#include "../MString.h"

int main(int argc, char **argv) {

   // Literal string assignment tests. 
   coreutils::MString test1 = "this is an assignment test.";
   std::cout << "char * operator=: [" << test1 << "]." << std::endl;
   test1 = "new value.";
   std::cout << "char * operator=: [" << test1 << "]." << std::endl;
   std::string test11 = "this is a test";
   coreutils::MString test12 = test11;
   std::cout << "assign from std::string: [" << test12 << "]." << std::endl;   

   coreutils::MString test2("this is another test.");
   std::cout << "assign on constructor: [" << test2 << "]." << std::endl;   

   // Character assignment tests.
   coreutils::MString test3;
   test3 = 'a';
   std::cout << "char operator=: [" << test3 << "]." << std::endl;   

   coreutils::ZString test7("zstring data");
   coreutils::MString test4;
   test4 << "this is a test." << test7;
   std::cout << "char* operator<<: [" << test4 << "]." << std::endl;   
   test4 << "another test " << 75;
   std::cout << "char* operator<<: [" << test4 << "]." << std::endl;   

   // Stream assignment capabilities.
   coreutils::MString test6;
   int number = 75;
   test6 << "Will this work? " << number << test4 << " See how this works.";
   std::cout << "streaming: [" << test6 << "]." << std::endl;
   std::string test13 = "stream from string test";
   coreutils::MString test14;
   test14 << test13;
   std::cout << "streaming from std::string: [" << test14 << "]." << std::endl;

   coreutils::MString test9("XXXXXXXXXYYYYYYYYYY");
   std::cout << "test insert: " << test9 << std::endl;      
   coreutils::MString test8("zzz");
   test9.insert(test8, 9);
   test9.insert("aaaaa", 9);
   std::cout << "inserting: " << test9 << std::endl;
   test9.remove(10, 7);
   std::cout << "removing: " << test9 << std::endl;

   // Reassignments.

   coreutils::MString test10;
   test10 = "";
   std::cout << test10 << std::endl;
   
   return 0;
}

