61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package memorycompiler
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func seedRepeatedFailure(t *testing.T, rt *Runtime, turns int, errText string) {
|
|
t.Helper()
|
|
for i := 0; i < turns; i++ {
|
|
_, turn := rt.StartTurn(context.Background(), "fix a bug", nil)
|
|
turn.RecordToolResults([]ToolRecord{
|
|
{Name: "bash", Error: errText},
|
|
{Name: "bash", Error: errText},
|
|
})
|
|
turn.Finish(nil)
|
|
}
|
|
}
|
|
|
|
func TestStableNoisePatternsRequireMinCount(t *testing.T) {
|
|
rt := New(t.TempDir())
|
|
seedRepeatedFailure(t, rt, 1, "cannot find module providing package foo")
|
|
|
|
if got := rt.StableNoisePatterns(2, 0); len(got) != 0 {
|
|
t.Fatalf("single-turn pattern should not be stable yet: %+v", got)
|
|
}
|
|
|
|
seedRepeatedFailure(t, rt, 1, "cannot find module providing package foo")
|
|
got := rt.StableNoisePatterns(2, 0)
|
|
if len(got) != 1 {
|
|
t.Fatalf("patterns = %+v, want exactly one stable pattern", got)
|
|
}
|
|
if got[0].Count != 2 || got[0].Pattern != "bash repeated error: cannot find module providing package foo" {
|
|
t.Fatalf("unexpected stable pattern: %+v", got[0])
|
|
}
|
|
}
|
|
|
|
func TestStableNoisePatternsNilAndEmpty(t *testing.T) {
|
|
var nilRT *Runtime
|
|
if got := nilRT.StableNoisePatterns(1, 0); got != nil {
|
|
t.Fatalf("nil runtime returned patterns: %+v", got)
|
|
}
|
|
if got := New(t.TempDir()).StableNoisePatterns(1, 0); len(got) != 0 {
|
|
t.Fatalf("fresh dir returned patterns: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestStableNoisePatternsOrderedAndBounded(t *testing.T) {
|
|
rt := New(t.TempDir())
|
|
seedRepeatedFailure(t, rt, 3, "error alpha")
|
|
seedRepeatedFailure(t, rt, 2, "error beta")
|
|
|
|
got := rt.StableNoisePatterns(2, 1)
|
|
if len(got) != 1 {
|
|
t.Fatalf("patterns = %+v, want maxItems to bound the list", got)
|
|
}
|
|
if got[0].Count != 3 {
|
|
t.Fatalf("expected the most frequent pattern first: %+v", got[0])
|
|
}
|
|
}
|