Skip to content

Commit adfb9cb

Browse files
committed
feat: add difflib module to help kcl unit test cases
Signed-off-by: peefy <[email protected]>
1 parent 08d77ef commit adfb9cb

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

difflib/kcl.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
22
name = "difflib"
33
edition = "v0.9.0"
4-
version = "0.1.0"
4+
version = "0.2.0"
55

difflib/main.k

+9-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ looper = lambda initial: any, elements: [any], func: (any, any) -> any -> any {
1414
_looper_n(elements, 0, func, initial)
1515
}
1616

17-
looper_enumerate = lambda initial: any, elements: [any] | {str:}, func: (any, str | int, any) -> any -> any {
17+
looper_enumerate1 = lambda initial: any, elements: [any] | {str:}, func: (any, str | int, any) -> any -> any {
18+
looper(initial, [{"k" = k, "v" = v} for k, v in elements], lambda initial, value {
19+
func(initial, value.k, value.v)
20+
})
21+
}
22+
23+
looper_enumerate2 = lambda initial: any, elements: [any] | {str:}, func: (any, str | int, any) -> any -> any {
1824
looper(initial, [{"k" = k, "v" = v} for k, v in elements], lambda initial, value {
1925
func(initial, value.k, value.v)
2026
})
@@ -40,8 +46,8 @@ longest_common_subsequence = lambda a: [], b: [] -> [] {
4046
"""Longest Common Subsequence (LCS) is a typical algorithm for calculating the length of the longest common subsequence between two sequences."""
4147
# Build the lengths matrix for dp
4248
lengths = [[0] * (len(b) + 1) for _ in range(len(a) + 1)]
43-
lengths = looper_enumerate(lengths, a, lambda m, i, x {
44-
looper_enumerate(m, b, lambda v, j, y {
49+
lengths = looper_enumerate1(lengths, a, lambda m, i, x {
50+
looper_enumerate2(m, b, lambda v, j, y {
4551
list_set_index(v, i + 1, list_set_index(v[i + 1], j + 1, v[i][j] + 1 if x == y else max(v[i + 1][j], v[i][j + 1])))
4652
})
4753
})

difflib/main_test.k

+42
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,45 @@ test_longest_common_subsequence = lambda {
4343
assert result == case.result, "expect ${case.result}, got ${result}"
4444
})
4545
}
46+
47+
test_yaml_diff = lambda {
48+
data1 = {
49+
"firstName": "John",
50+
"lastName": "Doe",
51+
"age": 30,
52+
"address": {
53+
"streetAddress": "1234 Main St",
54+
"city": "New York",
55+
"state": "NY",
56+
"postalCode": "10001"
57+
},
58+
"phoneNumbers": [
59+
{
60+
"type": "home",
61+
"number": "212-555-1234"
62+
},
63+
{
64+
"type": "work",
65+
"number": "646-555-5678"
66+
}
67+
]
68+
}
69+
data2 = {
70+
"firstName": "John",
71+
"lastName": "Doe",
72+
"age": 30,
73+
"address": {
74+
"streetAddress": "1234 Main St",
75+
"city": "New York",
76+
"state": "NY",
77+
"postalCode": None
78+
},
79+
"phoneNumbers": [
80+
{
81+
"type": "work",
82+
"number": "646-555-5678"
83+
}
84+
]
85+
}
86+
diff_text = diff(yaml.encode(data1), yaml.encode(data2))
87+
}

0 commit comments

Comments
 (0)