1
+ #include < cstdlib>
2
+ #include < filesystem>
3
+ #include < fstream>
4
+ #include < iostream>
5
+ #include < string>
6
+ #include < string_view>
7
+ #include < vector>
8
+
9
+ #include " gtest/gtest.h"
10
+
11
+ namespace fs = std::filesystem;
12
+
13
+ using namespace std ;
14
+
15
+ std::string TEST_ID = " " ;
16
+
17
+ vector<string> split (string s, string delimiter) {
18
+ size_t pos_start = 0 , pos_end, delim_len = delimiter.length ();
19
+ string token;
20
+ vector<string> res;
21
+
22
+ while ((pos_end = s.find (delimiter, pos_start)) != string::npos) {
23
+ token = s.substr (pos_start, pos_end - pos_start);
24
+ pos_start = pos_end + delim_len;
25
+ res.push_back (token);
26
+ }
27
+
28
+ res.push_back (s.substr (pos_start));
29
+ return res;
30
+ }
31
+
32
+ std::string GetHello (std::string_view in) {
33
+ if (in.size () == 0 ) {
34
+ return std::string (" hello, word" );
35
+ } else {
36
+ return std::string (" Hello, " ) + in.data ();
37
+ }
38
+ }
39
+
40
+ string ReadFile (const std::string &filename) {
41
+ std::ifstream f (filename);
42
+ string s ((std::istreambuf_iterator<char >(f)),
43
+ std::istreambuf_iterator<char >());
44
+ return s;
45
+ }
46
+
47
+ vector<string> RunProgram (string fileid) {
48
+ vector<string> v;
49
+ string program = " problems/codeforcesAA/src/main/solution" ;
50
+ string test_folder = " problems/codeforcesAA/tests/data/" ;
51
+ string command = program + " < " + test_folder + fileid + " .in > output.txt" ;
52
+ std::system (command.c_str ());
53
+ string actual = ReadFile (" output.txt" );
54
+ string expectedOutputFile = test_folder + fileid + " .out" ;
55
+ string expected = ReadFile (expectedOutputFile);
56
+ v.push_back (actual);
57
+ v.push_back (expected);
58
+ return v;
59
+ }
60
+
61
+ TEST (RunTest, AllTestCases) {
62
+ if (TEST_ID != " " ) {
63
+ std::cout << " TEST_ID = " << TEST_ID << std::endl;
64
+ } else {
65
+ std::cout << " RUN ALL TESTS" << std::endl;
66
+ }
67
+
68
+ std::string test_data_folder = " problems/codeforcesAA/tests/data" ;
69
+ for (const auto &entry : fs::directory_iterator (test_data_folder)) {
70
+ string filename = split (entry.path (), " /" ).back ();
71
+ vector<string> v = split (filename, " ." );
72
+ string fileid = v[0 ];
73
+ string extension = v[1 ];
74
+ if (extension != " in" ){
75
+ continue ;
76
+ }
77
+ if (TEST_ID != " " ){
78
+ if (fileid != TEST_ID){
79
+ continue ;
80
+ }
81
+ }
82
+ // Run Test Case
83
+ vector<string> output = RunProgram (fileid);
84
+ string actual = output[0 ];
85
+ string expected = output[1 ];
86
+ string message = " ❌ FAIL CASE: " + fileid;
87
+ ASSERT_EQ (actual, expected) << message;
88
+ }
89
+ }
90
+
91
+ int main (int argc, char **argv) {
92
+ ::testing::InitGoogleTest (&argc, argv);
93
+ if (argc == 2 ) {
94
+ TEST_ID = argv[1 ];
95
+ }
96
+ return RUN_ALL_TESTS ();
97
+ }
0 commit comments