#include "internal.h" #include #include #include using namespace std; bool starts_with(const std::string &s, const std::string &prefix) { return s.rfind(prefix, 0) == 0; } int main(int argc, char **argv) { EventState state; int l = 0; bool err = false; if (argc != 2) { std::cerr << "Please specify event file" << std::endl; return -1; } std::fstream stream(argv[1]); std::string line; while (std::getline(stream, line)) { l++; if (line == "") continue; if (starts_with(line, "#")) continue; if (starts_with(line, "---")) break; state.set_from_line(line); } std::regex expect_regex( "^[^\\s]+\\s+\\(([^\\)]+)\\):\\s+(\\d+)\\s+\\((\\d+),\\s+(\\d+),\\s+#(.{2})(.{2})(.{2})\\)\\s+by\\s+([^\\s]+)\\s.*$"); while (std::getline(stream, line)) { l++; if (line == "") continue; if (starts_with(line, "#")) continue; std::smatch sm; if (!std::regex_match(line, sm, expect_regex)) { std::cout << "ignore " << line << endl; } LED led(sm[1]); auto s = led.evaluate(state); LEDState expected; expected.code.type = std::stoi(sm[2]); expected.code.params[0] = std::stoi(sm[3]); expected.code.params[1] = std::stoi(sm[4]); expected.code.color.c[0] = std::stoi(sm[5], 0, 16); expected.code.color.c[1] = std::stoi(sm[6], 0, 16); expected.code.color.c[2] = std::stoi(sm[7], 0, 16); expected.overlay_name = sm[8]; if (s != expected) { std::cerr << argv[1] << ":" << l << " failed" << std::endl; std::cerr << "Got: " << s.str() << std::endl; std::cerr << "Expected: " << expected.str() << std::endl; err = true; } } return err ? -1 : 0; }