vlib,tools: add an arrays.diff module, implement a simple platform independent tool v diff file1.txt file2.txt using it (#24428)

This commit is contained in:
kbkpbot 2025-05-08 16:09:36 +08:00 committed by GitHub
parent 1070378a46
commit 3291372c57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 505 additions and 0 deletions

View file

@ -0,0 +1,130 @@
import arrays.diff
fn test_diff_array() {
mut aa := ['hi', '1', '5', '3']
mut bb := aa.clone()
mut ctx := diff.diff(aa, bb)
assert ctx.changes.len == 0
bb.insert(2, 'max')
// aa := ['hi', '1', '5', '3']
// bb := ['hi', '1', 'max', '5', '3']
ctx = diff.diff(aa, bb)
assert ctx.changes == [
diff.DiffChange{
a: 2
b: 2
del: 0
ins: 1
},
]
bb.delete(4)
// aa := ['hi', '1', '5', '3']
// bb := ['hi', '1', 'max', '5']
ctx = diff.diff(aa, bb)
assert ctx.changes == [
diff.DiffChange{
a: 2
b: 2
del: 0
ins: 1
},
diff.DiffChange{
a: 3
b: 4
del: 1
ins: 0
},
]
str1 := ctx.generate_patch()
assert str1 == 'hi
1
-5
-3
+max
+5
'
str2 := ctx.generate_patch(block_header: true)
assert str2 == '@@ -1,7 +1,7 @@
hi
1
-5
-3
+max
+5
'
str3 := ctx.generate_patch(block_header: true, unified: 1)
assert str3 == '@@ -2,4 +2,4 @@
1
-5
-3
+max
+5
'
str4 := ctx.generate_patch(block_header: true, unified: 10)
assert str4 == '@@ -1,14 +1,14 @@
hi
1
-5
-3
+max
+5
'
str5 := ctx.generate_patch(block_header: true, unified: -1)
assert str5 == '@@ -3,2 +3,2 @@
-5
-3
+max
+5
'
}
fn test_diff_runes() {
mut aa := 'brown fox jumps over the lazy dog'.runes()
mut bb := 'brwn faax junps ovver the lay daog'.runes()
mut ctx := diff.diff(aa, bb)
str1 := ctx.generate_patch()
assert str1 == 'b
r
-o
w
n
f
-o
+a
+a
x
j
u
-m
+n
p
s
o
+v
v
e
r
l
a
-z
-y
-
-d
+y
+
+d
+a
o
g
'
}