Skip to content
Snippets Groups Projects
monad_shared.cpp 3.51 KiB
Newer Older
  • Learn to ignore specific revisions
  • toole1's avatar
    toole1 committed
    #include <iostream>
    #include "monad_shared.h"
    #include "util.h"
    
    using namespace monad_shared;
    using namespace util;
    using std::cout;
    using std::cerr;
    using std::endl;
    
    namespace monad_shared
    {
    
    namespace version
    {
    const char * official_name = "CS 225 Monad";
    const char * version_name  = "awakening";
    const char * date          = "15 July 2011";
    }
    
    const char * unit_test::pass_string = "~~PASSED~~";
    
    void printInfo()
    {
    	cout << endl
    	     << version::official_name << endl
    	     << "Version " << version::version_name << endl
    		 << "Released " << version::date << endl
    	     << "Developed by Jack Toole Spring/Fall 2011" << endl
    	     << "Copyright 2011 Jack Toole" << endl
    	     << "Full rights granted to Jack Toole. Rights to use and modify granted to" << endl
    	     << "University of Illinois Urbana-Champaign Computer Science Data Structures" << endl
    	     << "instructors and course staff" << endl
    		 << endl;
    }
    
    namespace output
    {
    
    // Set EXIT_IF_ERROR message
    void set_error_message()
    {
    	SET_ERROR_MESSAGE("Oops! Something went wrong inside of me.\n"
    		"Please contact course staff with the following error details, and they'll figure it out:\n");
    }
    
    void header(const string & title)
    {
    	cout << title << "..." << endl
    	     << "================================" << endl;
    }
    
    void warning(const string & message)
    {
    	cerr << endl
    		 << "********************************"
    			"********************************" << endl
    		 << "WARNING!" << endl
    		 << message << endl
    		 << "********************************"
    			"********************************" << endl << endl;
    }
    
    
    void total_score(int32_t score)
    {
    	output::header("Total score (out of 100)");
    	cout << "TOTAL SCORE: " << score << endl << endl;
    }
    
    void testname(const unit_test & curr_test, int32_t max_testname_len, int32_t max_points_len)
    {
    	// Output test name
    	int32_t pos = 0; // keep track of cursor position
    	std::cout << curr_test.name << ' ';
    	pos += strlen(curr_test.name) + 1;
    
    	if (curr_test.is_valgrind)
    	{
    		cout << "(valgrind) ";
    		pos += 11;
    	}
    
    	if (pos % 2 == max_testname_len % 2)
    	{
    		cout << ' ';
    		pos++;
    	}
    
    	while (pos < max_testname_len + 1)
    	{
    		cout << ". ";
    		pos += 2;
    	}
    	pos = 0; // reset column
    
    	std::cout << "[" << curr_test.points << " pts] ";
    	pos += intlen(curr_test.points) + 7;
    
    	while (pos < max_points_len + 7)
    	{
    		cout << ' ';
    		pos++;
    	}
    
    	cout << "- ";
    }
    
    
    void detailed_info(const unit_test & curr_test)
    {
    	std::cout << "--------------------------------" << endl
    			  << curr_test.name;
    	if (curr_test.is_valgrind) std::cout << " (run under valgrind)";
    	std::cout << " [" << curr_test.points << " points]" << endl;
    
    	const string & error = curr_test.errormsg;
    	const string & output = curr_test.output;
    
    	if (curr_test.passed())
    
    toole1's avatar
    toole1 committed
    		std::cout << "Result: " << passed_string() << endl;
    
    toole1's avatar
    toole1 committed
    	else
    
    toole1's avatar
    toole1 committed
    		std::cout << "Result: " << failed_string() << ": " << error << endl;
    
    toole1's avatar
    toole1 committed
    
    	if (curr_test.time < 0)
    		cout << "Took unknown time (";
    	else
    		cout << "Took " << curr_test.time << "ms (";
    	cout << curr_test.timeout << "ms timeout)" << endl;
    
    	std::cout << "Output:" << endl
    			  << "--------------------------------" << endl;
    
    	// Tab the output over to distinguish it from the test case
    	if (output != "")
    	{
    		//std::cout << "    ";
    		//replaceAllInternal(output,"\n","\n    ");
    		std::cout << output;
    		if (output[output.length() - 1] != '\n') std::cout << endl;
    	}
    
    	cout << endl;
    }
    
    
    toole1's avatar
    toole1 committed
    string passed_string()
    {
    	return colorize::make_color(colorize::GREEN, "passed");
    }
    
    string failed_string()
    {
    	return colorize::make_color(colorize::RED  , "FAILED");
    }
    
    
    toole1's avatar
    toole1 committed
    } // namespace output
    } // namespace monad_shared