diff options
author | flu0r1ne <flu0r1ne@flu0r1ne.net> | 2021-09-05 20:37:19 -0500 |
---|---|---|
committer | flu0r1ne <flu0r1ne@flu0r1ne.net> | 2021-09-05 20:37:19 -0500 |
commit | f5b60238e05b124eb40f805eb4a0bbfc0b043da5 (patch) | |
tree | f461bff108f5ddafc4078aa7394d7bf2a6309cc9 /cmd/planr/sub/evaluate.go | |
parent | 8f22bd4f5b4eb6996c524bcb6948d36cef0ac822 (diff) | |
parent | fd66fb134967067ed7e1c3182325f646b73c730b (diff) | |
download | deb-planr-f5b60238e05b124eb40f805eb4a0bbfc0b043da5.tar.xz deb-planr-f5b60238e05b124eb40f805eb4a0bbfc0b043da5.zip |
Merge branch 'upstream' into ppa
Merge v0.1.0
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) + } } |