From 0ffe46992b8e4c3f262c5040c8d6f4ae84feadc8 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sat, 27 Sep 2025 01:38:51 +0900 Subject: [PATCH] added a test case for split --- lib/fnc.c | 2 +- t/h-002.hawk | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/fnc.c b/lib/fnc.c index 1c2138f2..2222d7af 100644 --- a/lib/fnc.c +++ b/lib/fnc.c @@ -1009,7 +1009,7 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array) /*t2 = hawk_rtx_makestrvalwithoocs(rtx, &tok);*/ /*t2 = hawk_rtx_makenstrvalwithoocs(rtx, &tok); */ t2 = is_byte_str? hawk_rtx_makenumormbsvalwithbchars(rtx, (hawk_bch_t*)tok.ptr, tok.len): - hawk_rtx_makenumorstrvalwithoochars(rtx, tok.ptr, tok.len); + hawk_rtx_makenumorstrvalwithoochars(rtx, tok.ptr, tok.len); if (HAWK_UNLIKELY(!t2)) goto oops; if (use_array) diff --git a/t/h-002.hawk b/t/h-002.hawk index 7ac90299..8e6bd863 100644 --- a/t/h-002.hawk +++ b/t/h-002.hawk @@ -486,6 +486,14 @@ function main() tap_ensure (a[3] === @b"So]me", 1, @SCRIPTNAME, @SCRIPTLINE); tap_ensure (a[4] === @b"Da:ta", 1, @SCRIPTNAME, @SCRIPTLINE); + ## the splitter begins with a question mark and contains 4 characters + ## (separator, escaper, left-quote, right-qoute) after it. + tap_ensure (split(@b"sea of people, brandy, coke, dark\\,age", a, "?,\\\"\""), 4, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"sea of people", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"brandy", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[3] === @b"coke", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[4] === @b"dark,age", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (split("Here===Is=Some=====Data", a, ""), 23, @SCRIPTNAME, @SCRIPTLINE); tap_ensure (hawk::typename(a), "map", @SCRIPTNAME, @SCRIPTLINE); tap_ensure (str::splita("Here===Is=Some=====Data", a, ""), 23, @SCRIPTNAME, @SCRIPTLINE); @@ -512,25 +520,25 @@ function main() tap_ensure (a[4], "b\t\tc", @SCRIPTNAME, @SCRIPTLINE); tap_ensure (a[5], "d", @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, 'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, 'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split(@b'a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split(@b'a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split(@b'a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split(@b'a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); }