1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /**
- * Checker to compare output and answer in the form:
- *
- * Case 1: <token> <token> ... <token>
- * Case 2: <token> <token> ... <token>
- * ...
- * Case n: <token> <token> ... <token>
- *
- * Tokens in each case should not contain "Case"
- */
- #include "testlib.h"
- #include <vector>
- #include <string>
- using namespace std;
- vector<string> readStreamCase(InStream &in, int testCase, bool &prereadCase) {
- if (!prereadCase) {
- string caseStr = in.readToken();
- if (caseStr != "Case")
- in.quitf(_pe, "Expected 'Case' but found '%s' [test case %d]", compress(caseStr).c_str(), testCase);
- }
- string numExpStr = to_string(testCase) + ":";
- string numStr = in.readToken();
- if (numExpStr != numStr)
- in.quitf(_pe, "Expected '%s' but found '%s' [test case %d]", compress(numExpStr).c_str(),
- compress(numStr).c_str(), testCase);
- vector<string> result;
- while (!in.seekEof()) {
- string token = in.readToken();
- if (token == "Case") {
- prereadCase = true;
- break;
- }
- result.push_back(token);
- }
- return result;
- }
- string stringsToString(const vector<string> &a) {
- if (a.empty())
- return "\"\" [size=0]";
- string elems;
- for (const auto& token: a)
- elems += token + " ";
- return format("\"%s\" [size=%u]", compress(trim(elems)).c_str(), (unsigned int) (a.size()));
- }
- int main(int argc, char *argv[]) {
- setName("Tokens checker with testcase-support");
- registerTestlibCmd(argc, argv);
- int testCase = 0;
- bool ansPrereadCase = false;
- bool oufPrereadCase = false;
- while (!ans.seekEof()) {
- testCase++;
- vector<string> ja = readStreamCase(ans, testCase, ansPrereadCase);
- vector<string> pa = readStreamCase(ouf, testCase, oufPrereadCase);
- if (ja != pa) {
- string js = stringsToString(ja);
- string ps = stringsToString(pa);
- quitf(_wa, "Sequences differ: jury has %s, but participant has %s [test case %d]", js.c_str(), ps.c_str(),
- testCase);
- }
- }
- quitf(_ok, "%d test cases(s)", testCase);
- }
|