package planr import ( "log" ) type TestStatus uint const ( NOT_RUN TestStatus = iota PASSING COMPILATION_FAILURE RUNTIME_FAILURE ) type TestResult struct { Id string Status TestStatus DebugOutput string TestOutput string Tc TestCase } // Program-wide testcase config type TestCaseConfig struct { Defaults Title string } func (c TestCaseConfig) ensureSatisfied(name string) { if (c.Adapter == "") { log.Fatalf("Adapter must be provided for testcase %s", name) } } type TestCase struct { // absolute path to the test case configuration Path string // The canonical name is a semantically meaningful name // guaranteed to be unique among the tests // Obtained by replacing separators in the relative path of the // configuration with dots. The `toml` extension is also stripped. // rubric/alpha/beta/tc1.toml -> alpha.beta.tc1 Cname string Config TestCaseConfig // Reorder according to original read order after concurrent operation readIdx int } func (tc TestCase) AdapterConfig() InheritableConfig { return tc.Config.adapters_[tc.Config.Adapter] } type ByReadIdx []TestResult func (a ByReadIdx) Len() int { return len(a) } func (a ByReadIdx) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByReadIdx) Less(i, j int) bool { return a[i].Tc.readIdx < a[j].Tc.readIdx }