From 72af0dedf9e18911da65b9a5c4906689e868d9fc Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Mon, 8 Jun 2026 17:10:31 +0800 Subject: [legacy] Add functional and performance test suites --- rcc-legacy/tests/sysy_lvX/kmp.sy | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 rcc-legacy/tests/sysy_lvX/kmp.sy (limited to 'rcc-legacy/tests/sysy_lvX/kmp.sy') diff --git a/rcc-legacy/tests/sysy_lvX/kmp.sy b/rcc-legacy/tests/sysy_lvX/kmp.sy new file mode 100644 index 0000000..479c938 --- /dev/null +++ b/rcc-legacy/tests/sysy_lvX/kmp.sy @@ -0,0 +1,36 @@ +int main() { +return 0; + + + int needle[4] = {65, 66, 65, 66}; + int back[5], status = 0; + int haystack[8] = {65, 66, 65, 66, 65, 66, 65, 66}; + int len = 4; + back[0] = 0; + + int k = 1; + while (k < len) { + back[k] = status; + while (status && needle[k] != needle[status]) { + status = back[status - 1]; + } + if (needle[k] == needle[status]) { + status = status + 1; + } + k = k + 1; + } + + back[len] = status; + + status = 0; + int i = 0; + while (haystack[i]) { + while ((haystack[i] != needle[status] || status == len) && back[status] != status) { + status = back[status]; + } + if (haystack[i] == needle[status]) status = status + 1; + if (status == len) putint(i - len + 1); + i = i + 1; + } + return 0; +} -- cgit v1.2.3