Skip to content

Commit 796c13a

Browse files
authored
feat: truncate too long test case (#244)
1 parent 4b40d26 commit 796c13a

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

leetcode/models.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
"github.com/j178/leetgo/config"
9+
"github.com/j178/leetgo/utils"
910
)
1011

1112
type UserStatus struct {
@@ -96,17 +97,17 @@ func (r *SubmitCheckResult) Display(q *QuestionData) string {
9697
"\n%s%s%s%s%s%s\n",
9798
config.FailedStyle.Render(" × Wrong Answer\n"),
9899
fmt.Sprintf("\nPassed cases: %d/%d", r.TotalCorrect, r.TotalTestcases),
99-
fmt.Sprintf("\nLast case: %s", strings.ReplaceAll(r.LastTestcase, "\n", "↩ ")),
100-
fmt.Sprintf("\nOutput: %s", strings.ReplaceAll(r.CodeOutput, "\n", "↩ ")),
100+
fmt.Sprintf("\nLast case: %s", utils.TruncateString(strings.ReplaceAll(r.LastTestcase, "\n", "↩ "), 100)),
101+
fmt.Sprintf("\nOutput: %s", utils.TruncateString(strings.ReplaceAll(r.CodeOutput, "\n", "↩ "), 100)),
101102
stdout,
102-
fmt.Sprintf("\nExpected: %s", strings.ReplaceAll(r.ExpectedOutput, "\n", "↩ ")),
103+
fmt.Sprintf("\nExpected: %s", utils.TruncateString(strings.ReplaceAll(r.ExpectedOutput, "\n", "↩ "), 100)),
103104
)
104105
case MemoryLimitExceeded, TimeLimitExceeded, OutputLimitExceeded:
105106
return fmt.Sprintf(
106107
"\n%s%s%s\n",
107108
config.ErrorStyle.Render(fmt.Sprintf(" × %s\n", r.StatusMsg)),
108109
fmt.Sprintf("\nPassed cases: %d/%d", r.TotalCorrect, r.TotalTestcases),
109-
fmt.Sprintf("\nLast case: %s", r.LastTestcase),
110+
fmt.Sprintf("\nLast case: %s", utils.TruncateString(r.LastTestcase, 100)),
110111
)
111112
case RuntimeError:
112113
return fmt.Sprintf(
@@ -200,20 +201,20 @@ func (r *RunCheckResult) Display(q *QuestionData) string {
200201
"\n%s%s%s%s%s%s\n",
201202
config.PassedStyle.Render(fmt.Sprintf(" √ %s\n", r.StatusMsg)),
202203
fmt.Sprintf("\nPassed cases: %s", formatCompare(r.CompareResult)),
203-
fmt.Sprintf("\nInput: %s", strings.ReplaceAll(r.InputData, "\n", "↩ ")),
204-
fmt.Sprintf("\nOutput: %s", strings.Join(r.CodeAnswer, "↩ ")),
204+
fmt.Sprintf("\nInput: %s", utils.TruncateString(strings.ReplaceAll(r.InputData, "\n", "↩ "), 100)),
205+
fmt.Sprintf("\nOutput: %s", utils.TruncateString(strings.Join(r.CodeAnswer, "↩ "), 100)),
205206
stdout,
206-
fmt.Sprintf("\nExpected: %s", strings.Join(r.ExpectedCodeAnswer, "↩ ")),
207+
fmt.Sprintf("\nExpected: %s", utils.TruncateString(strings.Join(r.ExpectedCodeAnswer, "↩ "), 100)),
207208
)
208209
} else {
209210
return fmt.Sprintf(
210211
"\n%s%s%s%s%s%s\n",
211212
config.ErrorStyle.Render("\n × Wrong Answer\n"),
212213
fmt.Sprintf("\nPassed cases: %s", formatCompare(r.CompareResult)),
213-
fmt.Sprintf("\nInput: %s", strings.ReplaceAll(r.InputData, "\n", "↩ ")),
214-
fmt.Sprintf("\nOutput: %s", strings.Join(r.CodeAnswer, "↩ ")),
214+
fmt.Sprintf("\nInput: %s", utils.TruncateString(strings.ReplaceAll(r.InputData, "\n", "↩ "), 100)),
215+
fmt.Sprintf("\nOutput: %s", utils.TruncateString(strings.Join(r.CodeAnswer, "↩ "), 100)),
215216
stdout,
216-
fmt.Sprintf("\nExpected: %s", strings.Join(r.ExpectedCodeAnswer, "↩ ")),
217+
fmt.Sprintf("\nExpected: %s", utils.TruncateString(strings.Join(r.ExpectedCodeAnswer, "↩ "), 100)),
217218
)
218219
}
219220
case MemoryLimitExceeded, TimeLimitExceeded, OutputLimitExceeded:

utils/str.go

+14
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ func EnsureTrailingNewline(s string) string {
4848
return s
4949
}
5050

51+
// TruncateString shortens a string longer than n by replacing the middle part with "...<truncated>..."
52+
func TruncateString(s string, n int) string {
53+
if len(s) <= n {
54+
return s
55+
}
56+
const l = len("...<truncated>...")
57+
prefixLength := (n - l) / 2
58+
suffixLength := n - prefixLength - l
59+
60+
truncated := s[:prefixLength] + "...<truncated>..." + s[len(s)-suffixLength:]
61+
62+
return truncated
63+
}
64+
5165
func CamelToSnake(name string) string {
5266
var snakeStrBuilder strings.Builder
5367

0 commit comments

Comments
 (0)