go-judge/envexec/run_status.go
criyle 7f663ba0fd
Some checks failed
Build / Goreleaser (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (amd64_v3, windows) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, darwin) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, linux) (push) Has been cancelled
Build / Upload artifacts-${{ matrix.os }}-${{ matrix.arch }} (arm64_v8.0, windows) (push) Has been cancelled
refactor(envexec): normalize error messages
2025-05-25 22:44:50 -04:00

81 lines
1.6 KiB
Go

package envexec
import (
"fmt"
)
// Status defines run task Status return status
type Status int
// Defines run task Status result status
const (
// not initialized status (as error)
StatusInvalid Status = iota
// exit normally
StatusAccepted
StatusWrongAnswer
StatusPartiallyCorrect
// exit with error
StatusMemoryLimitExceeded // MLE
StatusTimeLimitExceeded // TLE
StatusOutputLimitExceeded // OLE
StatusFileError // FE
StatusNonzeroExitStatus // NZS
StatusSignalled // SIG
StatusDangerousSyscall // DJS
//StatusRuntimeError // RE
// SPJ / interactor error
StatusJudgementFailed
StatusInvalidInteraction // interactor signals error
// internal error including: cgroup init failed, container failed, etc
StatusInternalError
)
var statusToString = []string{
"Invalid",
"Accepted",
"Wrong Answer",
"Partially Correct",
"Memory Limit Exceeded",
"Time Limit Exceeded",
"Output Limit Exceeded",
"File Error",
"Nonzero Exit Status",
"Signalled",
"Dangerous Syscall",
"Judgement Failed",
"Invalid Interaction",
"Internal Error",
}
// stringToStatus map string to corresponding Status
var stringToStatus = make(map[string]Status)
func (s Status) String() string {
si := int(s)
if si < 0 || si >= len(statusToString) {
return statusToString[0] // invalid
}
return statusToString[si]
}
// StringToStatus convert string to Status
func StringToStatus(s string) (Status, error) {
v, ok := stringToStatus[s]
if !ok {
return 0, fmt.Errorf("invalid string converting: %s", s)
}
return v, nil
}
func init() {
for i, v := range statusToString {
stringToStatus[v] = Status(i)
}
}