优化judge的resp

添加了Data类型,其类型参考自b6414e7a67/src/runner.h (L73)
This commit is contained in:
taoyu 2018-12-10 03:39:41 +08:00
parent 2da659edcb
commit 45125eb015
2 changed files with 89 additions and 10 deletions

View File

@ -12,6 +12,20 @@ import (
"fmt"
)
// Data 成员的类型参考 https://github.com/QingdaoU/Judger/blob/b6414e7a6715eb013b1ffeb7cfb04626a3ff5b4e/src/runner.h#L73
type Data struct {
CpuTime int
Result int
Memory int
RealTime int
Signal int
Error int
ExitCode int
OutputMd5 string
Output interface{}
TestCase string
}
type Resp struct {
RespData interface{} `json:"data"`
RespErr string `json:"err"`
@ -25,6 +39,50 @@ func (resp *Resp) Data() interface{} {
return resp.RespData
}
func (resp *Resp) StringData() string {
if resp == nil {
return ""
}
str, _ := resp.RespData.(string)
return str
}
func (resp *Resp) SliceData() []*Data {
if resp == nil {
return nil
}
slice, _ := resp.RespData.([]interface{})
data := make([]*Data, 0, len(slice))
for _, s := range slice {
item, ok := s.(map[string]interface{})
if ok {
cpuTimeF64, _ := item["cpu_time"].(float64)
resultF64, _ := item["result"].(float64)
memoryF64, _ := item["memory"].(float64)
realTimeF64, _ := item["real_time"].(float64)
signalF64, _ := item["signal"].(float64)
errorF64, _ := item["error"].(float64)
exitCodeF64, _ := item["exit_code"].(float64)
outputMd5, _ := item["output_md5"].(string)
testCase, _ := item["test_case"].(string)
data = append(data, &Data{
CpuTime: int(cpuTimeF64),
Result: int(resultF64),
Memory: int(memoryF64),
RealTime: int(realTimeF64),
Signal: int(signalF64),
Error: int(errorF64),
ExitCode: int(exitCodeF64),
OutputMd5: outputMd5,
Output: item["output"],
TestCase: testCase,
})
}
}
return data
}
func (resp *Resp) Err() error {
if resp == nil {
return nil

View File

@ -79,29 +79,29 @@ func main() {
fmt.Println()
fmt.Println("cpp_judge")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
resp, _ = client.JudgeWithRequest(&judge.JudgeRequest{
Src: cppSrc,
LanguageConfig: judge.CPPLangConfig,
MaxCpuTime: 1000,
MaxMemory: 128 * 1024 * 1024,
TestCaseId: "normal",
})
fmt.Println(resp, err)
printSliceData(resp.SliceData())
fmt.Println()
fmt.Println("java_judge")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
resp, _ = client.JudgeWithRequest(&judge.JudgeRequest{
Src: javaSrc,
LanguageConfig: judge.JavaLangConfig,
MaxCpuTime: 1000,
MaxMemory: 256 * 1024 * 1024,
TestCaseId: "normal",
})
fmt.Println(resp, err)
printSliceData(resp.SliceData())
fmt.Println()
fmt.Println("c_spj_judge")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
resp, _ = client.JudgeWithRequest(&judge.JudgeRequest{
Src: cSrc,
LanguageConfig: judge.CLangConfig,
MaxCpuTime: 1000,
@ -112,27 +112,48 @@ func main() {
SPJCompileConfig: judge.CLangSPJCompile,
SPJSrc: cSPJSrc,
})
fmt.Println(resp, err)
printSliceData(resp.SliceData())
fmt.Println()
fmt.Println("py2_judge")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
resp, _ = client.JudgeWithRequest(&judge.JudgeRequest{
Src: py2Src,
LanguageConfig: judge.PY2LangConfig,
MaxCpuTime: 1000,
MaxMemory: 128 * 1024 * 1024,
TestCaseId: "normal",
})
fmt.Println(resp, err)
printSliceData(resp.SliceData())
fmt.Println()
fmt.Println("py3_judge")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
resp, _ = client.JudgeWithRequest(&judge.JudgeRequest{
Src: py3Src,
LanguageConfig: judge.PY3LangConfig,
MaxCpuTime: 1000,
MaxMemory: 128 * 1024 * 1024,
TestCaseId: "normal",
})
fmt.Println(resp, err)
printSliceData(resp.SliceData())
fmt.Println()
// CompileError example
fmt.Println("CompileError example")
resp, err = client.JudgeWithRequest(&judge.JudgeRequest{
Src: "this bad code",
LanguageConfig: judge.JavaLangConfig,
MaxCpuTime: 1000,
MaxMemory: 256 * 1024 * 1024,
TestCaseId: "normal",
})
// fmt.Println(resp.RespErr) // "CompileError"
fmt.Println(resp.StringData()) // 错误信息
}
func printSliceData(slice []*judge.Data) {
fmt.Print("[\n")
for _, item := range slice {
fmt.Printf("\t%#v,\n", item)
}
fmt.Print("]\n")
}