Post-classifier-using-Machine-Learning / src / Map_compile_check.cpp
Map_compile_check.cpp
Raw
#include <string>
#include <iostream>
#include "Map.h"

using namespace std;

class Duck {
public:
  Duck() : wealth(0) {} // tree requires default-constructible
  Duck(int wealth_in) : wealth(wealth_in) {}
  int getWealth() const { return wealth; }

private:
  int wealth;

};

class DuckWealthLess {
public:
  bool operator() (const Duck &d1, const Duck &d2) const {
    return d1.getWealth() < d2.getWealth();
  }

};

ostream &operator<<(ostream &os, const Duck &duck) {
  return os << "Duck: $" << duck.getWealth();
}

int main() {
  cout << "This test doesn't do anything interesting." << endl;
  cout << "It is just here to check for compilation issues." << endl;

  Map<string, int> map;
  const Map<string, int> &const_map = map;

  Map<Duck, string, DuckWealthLess> duck_map;
  const Map<Duck, string, DuckWealthLess> &const_duck_map = duck_map;

  // Dummy variables
  bool b;
  size_t st;

  // Dummy iterators - should be default constructible as end iterator
  Map<string, int>::Iterator it;
  Map<Duck, string, DuckWealthLess>::Iterator duck_it;

  // Big Three
  auto map_copy(const_map);
  auto duck_map_copy(const_duck_map);

  map_copy = const_map;
  duck_map_copy = const_duck_map;

  // destructor tested implicitly at end of function



  // Functions that can be applied to a const map
  b = const_map.empty();
  b = const_duck_map.empty();

  st = const_map.size();
  st = const_duck_map.size();

  it = const_map.begin();
  duck_it = const_duck_map.begin();

  it = const_map.end();
  duck_it = const_duck_map.end();

  it = const_map.find("");
  duck_it = const_duck_map.find(Duck());



  // Functions that can't be called on a const tree
  it = map.insert({"", 1}).first;
  b = map.insert({"quack", 2}).second;
  duck_it = duck_map.insert({Duck(), "Donald"}).first;
  b = duck_map.insert({Duck(1000000), "Scrooge"}).second;

  int &x = map["wat"];
  cout << x << endl;
  string &x2 = duck_map[Duck(-200)];
  cout << x2 << endl;

  // Using iterators

  it = map.begin();
  duck_it = duck_map.begin();

  (*it).second = 200;
  (*duck_it).second = "another duck name";

  ++++it;
  ++++duck_it;

  it = it++;
  duck_it = duck_it++;

  b = map.end() == map.end();
  b = duck_map.end() == duck_map.end();

  b = map.end() != map.end();
  b = duck_map.end() != duck_map.end();

  const auto &const_it = it;
  const auto &const_duck_it = duck_it;

  Map<string, int>::Iterator it_copy(const_it);
  Map<Duck, string, DuckWealthLess>::Iterator duck_it_copy(const_duck_it);

  cout << (*it_copy).first << (*duck_it_copy).second << endl;

  cout << b << st << endl;

}