#include #include #include #include "Die.h" using namespace std; void MakeData(vector & rolls ); void CheckRolls( vector & rolls); vector RollLoop(Die & die, int rolls); vector FirstRoll( int rolls); vector SecondRoll(int rolls); void RollTest(int rolls); void DefaultFileTest(); void ExceptionTest(); void SeedTest(int rolls, int seed = -1); void SideTest(int sides); int main() { DefaultFileTest(); int i; for(i = 1; i < 1000; ++i) { RollTest(i); } ExceptionTest(); for(i = 10; i < 20; ++i) { SeedTest(i,i); } SideTest(4); SideTest(6); SideTest(8); SideTest(10); SideTest(12); SideTest(20); return 0; } void SideTest(int sides) { map result; map::iterator key; int i; int roll; DieDynamic die(sides); for(i = 0; i < 1'000'000; ++i) { roll = die.Roll(); if (result.contains(roll)) { ++result[roll]; } else { result[roll] = 1; } } for(key = begin(result); key != end(result); ++key) { if (key->first > sides) { cout << "Error: Side Test generated out of range value " << endl; cout << "\tSides: " << sides << endl; cout << "\tvalue: " << key->first << endl; } } } void MakeData(vector & rolls ) { DieDynamic die; die.Record(); for(int i=0; i < 10; i++) { int roll = die.Roll(); rolls.push_back(roll); } return; } void CheckRolls( vector & rolls) { DieStatic die2; for(size_t i =0; i < rolls.size(); i++) { int result = die2.Roll(); if (rolls[i] != result) { cerr << "Error in CheckRolls on reroll number " << i << endl; } } cout << endl; } // notice that this takes a reference, so it can roll with either type of die. vector RollLoop(Die & die, int rolls) { int i; vector result; for(i = 0; i < rolls; ++i) { result.push_back(die.Roll()); } return result; } vector FirstRoll( int rolls, string fileName, int seed = -1) { DieDynamic die(6,seed); if (fileName.size() > 0) { die.Record(fileName); } return RollLoop(die, rolls); } vector SecondRoll(int rolls, string fileName) { DieStatic die(fileName); return RollLoop(die, rolls); } void RollTest(int rolls) { vector r1, r2; r1 = FirstRoll(rolls, "DR.dat"); r2 = SecondRoll(rolls, "DR.dat"); if (r1 != r2) { cerr << "Error in Roll Test when n = " << rolls << endl; } } void SeedTest(int rolls, int seed) { vector r1, r2; r1 = FirstRoll(rolls, "", seed); r2 = FirstRoll(rolls, "", seed); if (r1 != r2) { cerr << "Error: SeedTest failed" << endl; } } void DefaultFileTest() { vector rolls; MakeData(rolls); CheckRolls(rolls); } void ExceptionTest() { bool hadException{false}; FirstRoll(10, "DR.dat"); try { SecondRoll(11, "DR.dat"); } catch (...) { hadException = true; } if (not hadException) { cerr << "Error Did not have an exception at read past EOF" << endl; } hadException = false; try { DieStatic("nofile"); } catch (...) { hadException = true; } if (not hadException) { cerr << "Error Did not have an exception at open non-existant file" << endl; } }