diff options
Diffstat (limited to 'cmd/planr/sub/evaluate.go')
-rw-r--r-- | cmd/planr/sub/evaluate.go | 89 |
1 files changed, 66 insertions, 23 deletions
diff --git a/cmd/planr/sub/evaluate.go b/cmd/planr/sub/evaluate.go index 8ce4d81..30d30d2 100644 --- a/cmd/planr/sub/evaluate.go +++ b/cmd/planr/sub/evaluate.go @@ -1,38 +1,81 @@ package sub import ( - "golang.flu0r1ne.net/planr" + "encoding/json" + "fmt" + "log" + "flag" + + "golang.flu0r1ne.net/planr" ) -func Evaluate(params []string) { - rd := planr.RubricDir() +type gradingResults struct { + TestResults []planr.TestResult + Score planr.Scoring +} + +func prettyPrint(results gradingResults, summarize bool) { + for _, tr := range results.TestResults { + tcPprint(tr) + } + + if summarize { + printScoring(results.Score) + } +} - tcs := Runner().Evaluate(rd) +func jsonPrint(results gradingResults) { + res, err := json.Marshal(results) - earned := 0.0 - total := 0.0 - passed := 0 - for _, tc := range tcs { - cfg := tc.Config + if err != nil { + log.Fatalf("Error printing JSON: %v\n", err) + } - if cfg.Points != nil { - points := float64(*cfg.Points) + fmt.Println(string(res)) +} - total += points +func Evaluate(runner planr.Runner, params []string, cfg *planr.Config) { + f := flag.NewFlagSet("evaluate", flag.ExitOnError) - if tc.Result.Status == planr.PASSING { - earned += points - passed++ - } + jsonOutput := f.Bool("json", false, "print json output") + + dieIncompatibleVersion(cfg) + + f.Parse(params) + + tcs := runner.CollectCases() + + // Filter those tests which patch IDs in params + filteredTcs := make([]planr.TestCase, 0) + summarizeScore := false + if f.NArg() > 0 { + ids := f.Args() + + membershipFun := make(map[string] bool, 0) + for _, id := range ids { + membershipFun[id] = true } - tcPprint(tc) + for i := range tcs { + if membershipFun[tcs[i].Cname] { + filteredTcs = append(filteredTcs, tcs[i]) + } + } + } else { + summarizeScore = true + filteredTcs = tcs } - printResults( - passed, - len(tcs), - earned, - total, - ); + trs := runner.Evaluate(filteredTcs) + + results := gradingResults { + TestResults: trs, + Score: planr.Score(trs), + } + + if *jsonOutput { + jsonPrint(results) + } else { + prettyPrint(results, summarizeScore) + } } |