From a08d6ea7a1a4330142c7993ff9d7049fdb1776f2 Mon Sep 17 00:00:00 2001 From: laddbr Date: Mon, 31 Jan 2022 13:40:25 -0800 Subject: [PATCH] Lab 7 completed --- .gitignore | 1 + lab-07/MockAnalysisTool.txt | 20 +++ lab-07/faculty.txt | 4 + lab-07/lab7.exe | Bin 0 -> 290655 bytes lab-07/main.cpp | 307 ++++++++++++++++++++++++++++++++++++ lab-07/students.txt | 18 +++ 6 files changed, 350 insertions(+) create mode 100644 lab-07/MockAnalysisTool.txt create mode 100644 lab-07/faculty.txt create mode 100644 lab-07/lab7.exe create mode 100644 lab-07/main.cpp create mode 100644 lab-07/students.txt diff --git a/.gitignore b/.gitignore index 6ca11bd..bba67c1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ area/area.exe area/test.exe .vscode/ msg.txt +lab07/build.bat diff --git a/lab-07/MockAnalysisTool.txt b/lab-07/MockAnalysisTool.txt new file mode 100644 index 0000000..6f0453e --- /dev/null +++ b/lab-07/MockAnalysisTool.txt @@ -0,0 +1,20 @@ +--filterNames()-- + +Susan Brewer + +Eugene McMannon + +Susan Brewer + +Eugene McMannon + +--sortNames()-- + +Eugene McMannon + +Eugene McMannon + +Susan Brewer + +Susan Brewer + diff --git a/lab-07/faculty.txt b/lab-07/faculty.txt new file mode 100644 index 0000000..50ed0d7 --- /dev/null +++ b/lab-07/faculty.txt @@ -0,0 +1,4 @@ +Foster, James +Aamodt, Larry +Duncan, Jonathan +Carman, Preston diff --git a/lab-07/lab7.exe b/lab-07/lab7.exe new file mode 100644 index 0000000000000000000000000000000000000000..b84542fe10c6be1cc0313dee9733e78e63a46cf0 GIT binary patch literal 290655 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 // std::sort +#include +#include +#include +#include +#include +#include // std::this_thread::sleep_for +#include + +using namespace std; +using namespace std::chrono; + +class Clock { +public: + virtual uint64_t msSinceEpoch() = 0; + virtual void sleepMs(int ms) = 0; +}; + +class SystemClock : public Clock { +public: + uint64_t msSinceEpoch() { + return duration_cast(system_clock::now().time_since_epoch()) + .count(); + } + void sleepMs(int ms) { + std::this_thread::sleep_for(std::chrono::milliseconds(ms)); + } +}; + +// PROBLEM 4 +// The instructions were a little fuzzy on this one, personally, maybe I just didn't understand it. +// Rather than use whatever the system time was, I just had it count up by increments of ten. We can +// assume that it's counting in milliseconds, so "epoch" is in units of ms. +class FakeClock : public Clock { +public: + uint64_t epoch = 0; + uint64_t msSinceEpoch(){ + return epoch; + } + void sleepMs(int ms) { + epoch+=10; + } +}; + +class DataSource { +public: + virtual vector names(int userType) = 0; +}; + +class FileSource : public DataSource { +public: + vector names(int userType); +}; + +// PROBLEM 1 +// Creates an almost identical DataSource that has its own implementation of names(int userType) +class StubbedSource : public DataSource { +public: + vector names(int userType); +}; + +// PROBLEM 1 +// Rather than read from a file, simply pushes random names to the vector +vector StubbedSource::names(int userType) { + vector names; + switch(userType) { + case 1: + names.push_back("Bob Saget"); + names.push_back("Susan Brewer"); + names.push_back("Eugene McMannon"); + case 2: + names.push_back("Bob Saget"); + names.push_back("Susan Brewer"); + names.push_back("Eugene McMannon"); + } + return names; +} + + +vector FileSource::names(int userType) { + string filename; + vector names; + switch (userType) { + case 1: + filename = "students.txt"; + break; + case 2: + filename = "faculty.txt"; + break; + default: + cerr << "Invalid userType: " << userType << endl; + exit(1); + } + ifstream inFS; + inFS.open(filename); + if (!inFS.is_open()) { + cerr << "Could not open \"" << filename << '\"' << endl; + exit(1); + } + while (!inFS.eof()) { + string name; + getline(inFS, name); + if (name.size()) { + names.push_back(name); + } + } + inFS.close(); + return names; +} + +class AnalysisTool { +public: + virtual vector filterNames(vector names) = 0; + virtual vector sortNames(vector names) = 0; + virtual void printNames(vector names) = 0; +}; + +class RealAnalysisTool : public AnalysisTool { +public: + vector filterNames(vector names); + vector sortNames(vector names); + void printNames(vector names); +}; + +vector RealAnalysisTool::filterNames(vector names) { + vector result; + for (int i = 0; i < names.size(); ++i) { + if (names.at(i).at(0) % 2) { + result.push_back(names.at(i)); + } + } + return result; +} + +vector RealAnalysisTool::sortNames(vector names) { + vector result = names; + sort(result.begin(), result.end()); + return result; +} + +void RealAnalysisTool::printNames(vector names) { + for (int i = 0; i < names.size(); ++i) { + cout << i << ": " << names.at(i) << endl; + } +} + +// PROBLEM 3 +// This class runs the same operations that the RealAnalysisTool does, except that on every call, it pushes back the +// name of the function call and the results of the output. +class MockAnalysisTool : public AnalysisTool { +public: + + vector functionNames; + vector filterNames(vector names); + vector sortNames(vector names); + void printNames(vector names); +}; + +vector MockAnalysisTool::filterNames(vector names) { + functionNames.push_back("--filterNames()--"); + vector result; + for (int i = 0; i < names.size(); ++i) { + if (names.at(i).at(0) % 2) { + result.push_back(names.at(i)); + } + } + for (int i = 0; i < result.size(); i++){ + functionNames.push_back(result.at(i)); + } + return result; +} + +vector MockAnalysisTool::sortNames(vector names) { + functionNames.push_back("--sortNames()--"); + vector result = names; + sort(result.begin(), result.end()); + for (int i = 0; i < result.size(); i++){ + functionNames.push_back(result.at(i)); + } + return result; +} + +void MockAnalysisTool::printNames(vector names) { + string filename = "MockAnalysisTool.txt"; + ofstream onFS; + onFS.open(filename); + if(!onFS.is_open()) { + ofstream file(filename); + } + for (int i = 0; i < functionNames.size(); i++){ + onFS << functionNames.at(i) << "\n" << endl; + } + onFS.close(); +} + +class Application { +public: + Application(DataSource *dataSource) { this->dataSource = dataSource; } + int getUserInput(); + vector getNames(int userType); + +private: + DataSource *dataSource; +}; + +int Application::getUserInput() { + while (true) { + int choice; + cout << "Enter user type (1 = student; 2 = faculty): "; + cin >> choice; + if (cin && 1 <= choice && choice <= 2) { + return choice; + } + cerr << "Invalid response!" << endl; + cin.clear(); + cin.ignore(100, '\n'); + } +} + +vector Application::getNames(int userType) { + return dataSource->names(userType); +} + +/* + * Arguments (all optional): + * 1: DataSource subclass name (defaults to FileSource) + * 2: user type (defaults to asking user) + * 3: AnalysisTool subclass name (defaults to RealAnalysisTool) + * 4: Clock subclass name (defaults to SystemClock) + * + */ +int main(int argc, char *argv[]) { + // collect the arguments + vector args(10); + for (int i = 0; i < argc; ++i) { + args.at(i) = argv[i]; + } + + // select the data source + DataSource *dataSource; + if (args.at(1) == "" || args.at(1) == "FileSource") { + dataSource = new FileSource(); + } else if (args.at(1) == "StubbedSource"){ //Problem 1 code + dataSource = new StubbedSource(); + } else { + cerr << "unrecognized data source" << endl; + exit(1); + } + // Use dependency injection for the data source + Application app(dataSource); + + // Get the user type (avoid the user interface during testing) + // PROBLEM 2: Adjusted for command line testing + int userType; + if (args.at(2) == ""){ + userType = app.getUserInput(); + } else if (args.at(2) == "1"){ + userType = 1; + } else if (args.at(2) == "2"){ + userType = 2; + } else { + cerr << "Invalid user input" << endl; + } + + // read from the data source + vector names = app.getNames(userType); + + // do analysis of the names (use a mock for testing) + if (args.at(3) == "" || args.at(3) == "RealAnalysisTool"){ + AnalysisTool *tool; + tool = new RealAnalysisTool(); + names = tool->filterNames(names); + names = tool->sortNames(names); + tool->printNames(names); + } else { + AnalysisTool *tool; + tool = new MockAnalysisTool(); + names = tool->filterNames(names); + names = tool->sortNames(names); + tool->printNames(names); + } + + Clock *clock; + // Determining, based on the args, if FakeClock or System clock is to be used + if (args.at(4) == "" || args.at(4) == "SystemClock"){ + clock = new SystemClock(); + } else if (args.at(4) == "FakeClock"){ + clock = new FakeClock(); + } + // do long-running process (faking time for testing) + uint64_t start = clock->msSinceEpoch(); + cout << "start long-running process at " << start << endl; + while (clock->msSinceEpoch() < start + 2000) { + clock->sleepMs(10); + } + cout << " end long-running process at " << clock->msSinceEpoch() << endl; + return 0; +} diff --git a/lab-07/students.txt b/lab-07/students.txt new file mode 100644 index 0000000..a9dbf44 --- /dev/null +++ b/lab-07/students.txt @@ -0,0 +1,18 @@ +Tinker, Hayden +Benko, Matija +Sukachevin, Kieran +Smith, Taylor +Herbel, Caleb +Hernandez, Samuel +Jones, Julian +Taylor, Evan +Thomsen, Catherine +DePaula, Stefan +Fairchild, Kaden +Hartman, Joel +Taylor, Adam +Calvo, Eliam +Price, Quinton +Reklai, Reece +Riggs, Jason +Moody, Garrett -- GitLab