-
Notifications
You must be signed in to change notification settings - Fork 0
/
TestCase.hpp
75 lines (60 loc) · 1.87 KB
/
TestCase.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
using namespace std;
#pragma once
class TestCase{
private:
string s;
ostream* os;
int fail=0, success=0;
public:
TestCase(string s, ostream& os){this->s = s; this->os = &os;} // constructor
template <typename T1, typename T2>
TestCase& check_equal(const T1& t1,const T2& t2){ // check operator ==.
if(!(t1 == t2)){
*os << s <<": Failure in test #"<< (success+fail+1) << ": "<< t1 << " should equal "<< t2<< "!"<< endl;
fail++;
return *this;
}
success++;
return *this;
}
template <typename T, typename F>
TestCase& check_different(const T& t,const F& f) { //check if different !=
if (t != f) {
success++;
}
else {
*os << s << ": Failure in test #" << (success+fail+1) << ": " << t << " should not equal " << f << endl;
fail++;
}
return (*this);
}
template <typename F, typename T1, typename T2>
TestCase& check_function(F f, T1 t1,T2 t2){ // check a function int->int.
auto t3=f(t1);
if(t3==t2) {success++; return *this;}
else {
*os << s << ": Failure in test #"<< (success+fail+1) <<": Function should return "<< t2 << " but returned "<< t3<< "!"<< endl;
fail++;
return *this;
}
}
template <typename T>
TestCase& check_output(T t1, string s1) { //check output<<
ostringstream string;
string << t1;
if (string.str().compare(s1) == 0){
success++;
}
else {*os << s<< ": Failure in test #"<< (success+fail+1) << ": string value should be "<<s1 << " but is " << string.str() <<endl;
fail++;
}
return (*this);
}
void print(){ // prints how many tests passed and faild
*os << this->s << ": " << fail << " failed, " << success << " passed, " << fail + success << " total." << endl << "---" << endl;
}
};