summaryrefslogtreecommitdiff
path: root/cmd/planr/sub/evaluate.go
diff options
context:
space:
mode:
authorflu0r1ne <flu0r1ne@flu0r1ne.net>2021-09-05 20:37:19 -0500
committerflu0r1ne <flu0r1ne@flu0r1ne.net>2021-09-05 20:37:19 -0500
commitf5b60238e05b124eb40f805eb4a0bbfc0b043da5 (patch)
treef461bff108f5ddafc4078aa7394d7bf2a6309cc9 /cmd/planr/sub/evaluate.go
parent8f22bd4f5b4eb6996c524bcb6948d36cef0ac822 (diff)
parentfd66fb134967067ed7e1c3182325f646b73c730b (diff)
downloaddeb-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.go89
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)
+ }
}