JOJ3/internal/parser/diff/myers_test.go
张泊明518370910136 f3a93a2097
All checks were successful
submodules sync / sync (push) Successful in 40s
build / build (push) Successful in 1m58s
build / trigger-build-image (push) Successful in 12s
chore(parser/diff): use generic
2025-03-26 21:07:44 -04:00

50 lines
1.6 KiB
Go

package diff
import (
"reflect"
t "testing"
)
type TestCase struct {
l1 []string
l2 []string
exp []Op[string]
}
func TestDiff(t *t.T) {
A := "A"
B := "B"
C := "C"
testCases := []TestCase{
{[]string{}, []string{}, []Op[string]{}},
{[]string{}, []string{"foo"}, []Op[string]{{OpInsert, 0, 0, "foo"}}},
{[]string{"foo"}, []string{}, []Op[string]{{OpDelete, 0, -1, "foo"}}},
{[]string{"foo", "bar", "baz"}, []string{"foo", "bar", "baz"}, []Op[string]{}},
{[]string{"foo", "bar", "baz"}, []string{"foo", "baz"}, []Op[string]{{OpDelete, 1, -1, "bar"}}},
{[]string{"baz"}, []string{"foo", "baz"}, []Op[string]{{OpInsert, 0, 0, "foo"}}},
{[]string{"bar", "baz"}, []string{"foo", "baz"}, []Op[string]{{OpDelete, 0, -1, "bar"}, {OpInsert, 1, 0, "foo"}}},
{[]string{"foo", "bar", "baz"}, []string{"foo", "bar"}, []Op[string]{{OpDelete, 2, -1, "baz"}}},
{
[]string{A, B, C, A, B, B, A},
[]string{C, B, A, B, A, C},
[]Op[string]{{OpDelete, 0, -1, A}, {OpInsert, 1, 0, C}, {OpDelete, 2, -1, C}, {OpDelete, 5, -1, B}, {OpInsert, 7, 5, C}},
},
{
[]string{C, A, B, A, B, A, B, A, B, A, B, A, B, C},
[]string{B, A, B, A, B, A, B, A, B, A, B, A, B, A},
[]Op[string]{{OpDelete, 0, -1, C}, {OpInsert, 1, 0, B}, {OpDelete, 13, -1, C}, {OpInsert, 14, 13, A}},
},
{
[]string{B},
[]string{A, B, C, B, A},
[]Op[string]{{OpInsert, 0, 0, A}, {OpInsert, 0, 1, B}, {OpInsert, 0, 2, C}, {OpInsert, 1, 4, A}},
},
}
for _, c := range testCases {
act := myersDiffStr(c.l1, c.l2, true)
if !reflect.DeepEqual(c.exp, act) {
t.Errorf("Failed diff, expected %v actual %v\n", c.exp, act)
}
}
}