summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <[email protected]>2023-08-31 19:03:42 +0300
committervvvv <[email protected]>2023-08-31 19:27:58 +0300
commit58ff10c50539ad75eb9f291655ad387823353ce7 (patch)
tree64fc052e4ce01c243cdda5a25e07e9418d77a8ac
parentc01990304b5bd02a9a45d661354ce276d10a0553 (diff)
Moved test for string udf
-rw-r--r--ydb/library/yql/minikql/mkql_function_registry.cpp6
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/result.json62
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Decode_/results.txt79
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Encode_/results.txt44
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_BlockFind_/results.txt52
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_ExtendAndTake_/results.txt60
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_Find_/results.txt136
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_List_/results.txt265
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_List_v0_/results.txt125
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_Remove_/results.txt124
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_ReplaceFirstLast_/results.txt84
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_Replace_/results.txt124
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_StreamFormat_/results.txt208
-rw-r--r--ydb/library/yql/udfs/common/string/test/canondata/test.test_To_/results.txt294
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Base32Decode.in4
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Base32Decode.sql6
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Base32Encode.in3
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Base32Encode.sql5
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/BlockFind.sql6
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.in3
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.sql10
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Find.sql12
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/List.in6
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/List.sql12
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/List_v0.in6
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/List_v0.sql27
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Remove.sql11
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/Replace.sql11
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/ReplaceFirstLast.sql10
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/StreamFormat.sql18
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/To.in7
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/To.sql14
-rw-r--r--ydb/library/yql/udfs/common/string/test/cases/default.in5
-rw-r--r--ydb/library/yql/udfs/common/string/test/ya.make13
-rw-r--r--ydb/library/yql/udfs/common/string/ya.make5
35 files changed, 1856 insertions, 1 deletions
diff --git a/ydb/library/yql/minikql/mkql_function_registry.cpp b/ydb/library/yql/minikql/mkql_function_registry.cpp
index 2535e8c8155..d6b0488ce6a 100644
--- a/ydb/library/yql/minikql/mkql_function_registry.cpp
+++ b/ydb/library/yql/minikql/mkql_function_registry.cpp
@@ -151,7 +151,11 @@ public:
// (1) check ABI version
auto abiVersionFunc = reinterpret_cast<NUdf::TAbiVersionFunctionPtr>(
- lib->Lib.Sym(AbiVersionFuncName));
+ lib->Lib.SymOptional(AbiVersionFuncName));
+ if (!abiVersionFunc) {
+ return;
+ }
+
ui32 version = abiVersionFunc();
Y_ENSURE(NUdf::IsAbiCompatible(version) && version >= NUdf::MakeAbiVersion(2, 8, 0),
"Non compatible ABI version of UDF library " << libraryPath
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/result.json b/ydb/library/yql/udfs/common/string/test/canondata/result.json
new file mode 100644
index 00000000000..eda628a951e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/result.json
@@ -0,0 +1,62 @@
+{
+ "test.test[Base32Decode]": [
+ {
+ "uri": "file://test.test_Base32Decode_/results.txt"
+ }
+ ],
+ "test.test[Base32Encode]": [
+ {
+ "uri": "file://test.test_Base32Encode_/results.txt"
+ }
+ ],
+ "test.test[BlockFind]": [
+ {
+ "uri": "file://test.test_BlockFind_/results.txt"
+ }
+ ],
+ "test.test[ExtendAndTake]": [
+ {
+ "uri": "file://test.test_ExtendAndTake_/results.txt"
+ }
+ ],
+ "test.test[Find]": [
+ {
+ "uri": "file://test.test_Find_/results.txt"
+ }
+ ],
+ "test.test[List]": [
+ {
+ "uri": "file://test.test_List_/results.txt"
+ }
+ ],
+ "test.test[List_v0]": [
+ {
+ "uri": "file://test.test_List_v0_/results.txt"
+ }
+ ],
+ "test.test[Remove]": [
+ {
+ "uri": "file://test.test_Remove_/results.txt"
+ }
+ ],
+ "test.test[ReplaceFirstLast]": [
+ {
+ "uri": "file://test.test_ReplaceFirstLast_/results.txt"
+ }
+ ],
+ "test.test[Replace]": [
+ {
+ "uri": "file://test.test_Replace_/results.txt"
+ }
+ ],
+ "test.test[StreamFormat]": [
+ {
+ "uri": "file://test.test_StreamFormat_/results.txt"
+ }
+ ],
+ "test.test[To]": [
+ {
+ "uri": "file://test.test_To_/results.txt"
+ }
+ ]
+}
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Decode_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Decode_/results.txt
new file mode 100644
index 00000000000..bf4aa56fa93
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Decode_/results.txt
@@ -0,0 +1,79 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "strict_decoded";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "decoded";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "ORSXG5A=";
+ [
+ "test"
+ ];
+ [
+ "test"
+ ]
+ ];
+ [
+ "KRSXG5CUMVZXI===";
+ [
+ "TestTest"
+ ];
+ [
+ "TestTest"
+ ]
+ ];
+ [
+ "MFYHA3DF";
+ [
+ "apple"
+ ];
+ [
+ "apple"
+ ]
+ ];
+ [
+ "hmmmm===hmmmm";
+ #;
+ [
+ "\0\0\0"
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Encode_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Encode_/results.txt
new file mode 100644
index 00000000000..51c74759fc7
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Base32Encode_/results.txt
@@ -0,0 +1,44 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "encoded";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "test";
+ "ORSXG5A="
+ ];
+ [
+ "TestTest";
+ "KRSXG5CUMVZXI==="
+ ];
+ [
+ "apple";
+ "MFYHA3DF"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_BlockFind_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_BlockFind_/results.txt
new file mode 100644
index 00000000000..de307127147
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_BlockFind_/results.txt
@@ -0,0 +1,52 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "levenstein";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "fdsa";
+ "3"
+ ];
+ [
+ "aswedfg";
+ "5"
+ ];
+ [
+ "asdadsaasd";
+ "8"
+ ];
+ [
+ "gdsfsassas";
+ "8"
+ ];
+ [
+ "";
+ "2"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_ExtendAndTake_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_ExtendAndTake_/results.txt
new file mode 100644
index 00000000000..81269c68153
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_ExtendAndTake_/results.txt
@@ -0,0 +1,60 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "column1";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "b"
+ ]
+ ];
+ [
+ [
+ "d"
+ ];
+ [
+ "d"
+ ]
+ ];
+ [
+ [];
+ #
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_Find_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Find_/results.txt
new file mode 100644
index 00000000000..46bb744d13a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Find_/results.txt
@@ -0,0 +1,136 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "contains";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "prefix";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "starts";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "suffix";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "ends";
+ [
+ "DataType";
+ "Bool"
+ ]
+ ];
+ [
+ "find";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "rfind";
+ [
+ "DataType";
+ "Int64"
+ ]
+ ];
+ [
+ "levenstein";
+ [
+ "DataType";
+ "Uint64"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "fdsa";
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ "-1";
+ "-1";
+ "3"
+ ];
+ [
+ "aswedfg";
+ %true;
+ %true;
+ %true;
+ %false;
+ %false;
+ "0";
+ "0";
+ "5"
+ ];
+ [
+ "asdadsaasd";
+ %true;
+ %true;
+ %true;
+ %false;
+ %false;
+ "0";
+ "7";
+ "8"
+ ];
+ [
+ "gdsfsassas";
+ %true;
+ %false;
+ %false;
+ %true;
+ %true;
+ "5";
+ "8";
+ "8"
+ ];
+ [
+ "";
+ %false;
+ %false;
+ %false;
+ %false;
+ %false;
+ "-1";
+ "-1";
+ "2"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_/results.txt
new file mode 100644
index 00000000000..dac9a135756
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_/results.txt
@@ -0,0 +1,265 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "equals_to_original";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "replace_delimeter";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "just_split";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "first";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "skip_empty";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "multichar_delim_set";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "multichar_delim_string";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "limited";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "a@b@c";
+ "a@b@c";
+ "a#b#c";
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "a"
+ ];
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "a";
+ "";
+ "";
+ "c"
+ ];
+ [
+ "a@";
+ "c"
+ ];
+ [
+ "a";
+ "b@c"
+ ]
+ ];
+ [
+ "@a@b@c";
+ "@a@b@c";
+ "#a#b#c";
+ [
+ "";
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ ""
+ ];
+ [
+ "a";
+ "b";
+ "c"
+ ];
+ [
+ "";
+ "a";
+ "";
+ "";
+ "c"
+ ];
+ [
+ "@a@";
+ "c"
+ ];
+ [
+ "";
+ "a@b@c"
+ ]
+ ];
+ [
+ "@@@a@a";
+ "@@@a@a";
+ "###a#a";
+ [
+ "";
+ "";
+ "";
+ "a";
+ "a"
+ ];
+ [
+ ""
+ ];
+ [
+ "a";
+ "a"
+ ];
+ [
+ "";
+ "";
+ "";
+ "a";
+ "a"
+ ];
+ [
+ "@@@a@a"
+ ];
+ [
+ "";
+ "@@a@a"
+ ]
+ ];
+ [
+ "d#e#f";
+ "d#e#f";
+ "d#e#f";
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ];
+ [
+ "d#e#f"
+ ]
+ ];
+ [
+ "d";
+ "d";
+ "d";
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ];
+ [
+ "d"
+ ]
+ ];
+ [
+ "";
+ "";
+ "";
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ]
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_v0_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_v0_/results.txt
new file mode 100644
index 00000000000..b149ad38a60
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_List_v0_/results.txt
@@ -0,0 +1,125 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "not_equals_to_original";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "not_equals_to_original_skip_empty";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "equals_to_original";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "multichar";
+ [
+ "ListType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "a@b@c";
+ #;
+ #;
+ "a@b@c";
+ [
+ "a";
+ "b";
+ "c"
+ ]
+ ];
+ [
+ "@a@b@c";
+ #;
+ #;
+ "@a@b@c";
+ [
+ "a";
+ "b";
+ "c"
+ ]
+ ];
+ [
+ "@@@a@a";
+ [
+ "@@@a@a"
+ ];
+ [
+ "@@@a@a"
+ ];
+ "@@@a@a";
+ [
+ "a";
+ "a"
+ ]
+ ];
+ [
+ "d#e#f";
+ #;
+ #;
+ "d#e#f";
+ [
+ "d";
+ "e";
+ "f"
+ ]
+ ];
+ [
+ "d";
+ #;
+ #;
+ "d";
+ [
+ "d"
+ ]
+ ];
+ [
+ "";
+ #;
+ #;
+ "";
+ []
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_Remove_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Remove_/results.txt
new file mode 100644
index 00000000000..19fda4873b4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Remove_/results.txt
@@ -0,0 +1,124 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "all";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first3";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last3";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "fdsa";
+ "fd";
+ "fds";
+ "fds";
+ "fda";
+ "fds";
+ "fdsa";
+ "fdsa"
+ ];
+ [
+ "aswedfg";
+ "wedfg";
+ "swedfg";
+ "swedfg";
+ "swedfg";
+ "awedfg";
+ "aswedfg";
+ "aswedfg"
+ ];
+ [
+ "asdadsaasd";
+ "ddd";
+ "sdadsaasd";
+ "asdadsasd";
+ "sdadsaasd";
+ "asdadsaad";
+ "asdadsaasd";
+ "asdadsaasd"
+ ];
+ [
+ "gdsfsassas";
+ "gdf";
+ "gdsfsssas";
+ "gdsfsasss";
+ "gdfsassas";
+ "gdsfsassa";
+ "gdsfsassas";
+ "gdsfsassas"
+ ];
+ [
+ "";
+ "";
+ "";
+ "";
+ "";
+ "";
+ "";
+ ""
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_ReplaceFirstLast_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_ReplaceFirstLast_/results.txt
new file mode 100644
index 00000000000..9320ac1c18a
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_ReplaceFirstLast_/results.txt
@@ -0,0 +1,84 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "column0";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column1";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column3";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column4";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column5";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column6";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "column7";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "gzas";
+ "gzzzsas";
+ "gsas";
+ "gasas";
+ "gasz";
+ "gaszzzs";
+ "gass";
+ "gasas"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_Replace_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Replace_/results.txt
new file mode 100644
index 00000000000..d2816f8ea15
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_Replace_/results.txt
@@ -0,0 +1,124 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "all";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last2";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "first3";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "last3";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "fdsa";
+ "fdsa";
+ "fdsz";
+ "fdsz";
+ "fdszz";
+ "fdszz";
+ "fds";
+ "fds"
+ ];
+ [
+ "aswedfg";
+ "zzzwedfg";
+ "zswedfg";
+ "zswedfg";
+ "zzswedfg";
+ "zzswedfg";
+ "swedfg";
+ "swedfg"
+ ];
+ [
+ "asdadsaasd";
+ "zzzdadsazzzd";
+ "zsdadsaasd";
+ "asdadsazsd";
+ "zzsdadsaasd";
+ "asdadsazzsd";
+ "sdadsaasd";
+ "asdadsasd"
+ ];
+ [
+ "gdsfsassas";
+ "gdsfszzzszzz";
+ "gdsfszssas";
+ "gdsfsasszs";
+ "gdsfszzssas";
+ "gdsfsasszzs";
+ "gdsfsssas";
+ "gdsfsasss"
+ ];
+ [
+ "";
+ "";
+ "";
+ "";
+ "";
+ "";
+ "";
+ ""
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_StreamFormat_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_StreamFormat_/results.txt
new file mode 100644
index 00000000000..bdc81ded373
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_StreamFormat_/results.txt
@@ -0,0 +1,208 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "right_pad";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "left_pad";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "right_pad_zero";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "left_pad_zero";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "hex";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "shex";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "bin";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "sbin";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "hex_text";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "bin_text";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "duration";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "quantity";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "bytes";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "prec";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "fdsa";
+ "fdsa ";
+ " fdsa";
+ "fdsa0000000000000000";
+ "0000000000000000fdsa";
+ "0x0000000000000004";
+ "0x00000000FFFFFFFC";
+ "0b0000000000000000000000000000000000000000000000000000000000000100";
+ "0b0000000000000000000000000000000011111111111111111111111111111100";
+ "66 64 73 61";
+ "01100110 01100100 01110011 01100001";
+ "8m 13s";
+ "494M";
+ "471MiB";
+ "0.000324"
+ ];
+ [
+ "aswedfg";
+ "aswedfg ";
+ " aswedfg";
+ "aswedfg0000000000000";
+ "0000000000000aswedfg";
+ "0x0000000000000007";
+ "0x00000000FFFFFFF9";
+ "0b0000000000000000000000000000000000000000000000000000000000000111";
+ "0b0000000000000000000000000000000011111111111111111111111111111001";
+ "61 73 77 65 64 66 67";
+ "01100001 01110011 01110111 01100101 01100100 01100110 01100111";
+ "14m 24s";
+ "864M";
+ "824MiB";
+ "0.000567"
+ ];
+ [
+ "asdadsaasd";
+ "asdadsaasd ";
+ " asdadsaasd";
+ "asdadsaasd0000000000";
+ "0000000000asdadsaasd";
+ "0x000000000000000A";
+ "0x00000000FFFFFFF6";
+ "0b0000000000000000000000000000000000000000000000000000000000001010";
+ "0b0000000000000000000000000000000011111111111111111111111111110110";
+ "61 73 64 61 64 73 61 61 73 64";
+ "01100001 01110011 01100100 01100001 01100100 01110011 01100001 01100001 01110011 01100100";
+ "20m 34s";
+ "1.23G";
+ "1.15GiB";
+ "0.00081"
+ ];
+ [
+ "gdsfsassas";
+ "gdsfsassas ";
+ " gdsfsassas";
+ "gdsfsassas0000000000";
+ "0000000000gdsfsassas";
+ "0x000000000000000A";
+ "0x00000000FFFFFFF6";
+ "0b0000000000000000000000000000000000000000000000000000000000001010";
+ "0b0000000000000000000000000000000011111111111111111111111111110110";
+ "67 64 73 66 73 61 73 73 61 73";
+ "01100111 01100100 01110011 01100110 01110011 01100001 01110011 01110011 01100001 01110011";
+ "20m 34s";
+ "1.23G";
+ "1.15GiB";
+ "0.00081"
+ ];
+ [
+ "";
+ " ";
+ " ";
+ "00000000000000000000";
+ "00000000000000000000";
+ "0x0000000000000000";
+ "0x0000000000000000";
+ "0b0000000000000000000000000000000000000000000000000000000000000000";
+ "0b0000000000000000000000000000000000000000000000000000000000000000";
+ "";
+ "";
+ "0us";
+ "0";
+ "0B";
+ "0"
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/canondata/test.test_To_/results.txt b/ydb/library/yql/udfs/common/string/test/canondata/test.test_To_/results.txt
new file mode 100644
index 00000000000..441e62fd21b
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/canondata/test.test_To_/results.txt
@@ -0,0 +1,294 @@
+[
+ {
+ "Write" = [
+ {
+ "Type" = [
+ "ListType";
+ [
+ "StructType";
+ [
+ [
+ "value";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ascii_lower";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ascii_upper";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "ascii_title";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "lower";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "upper";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "title";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "reverse";
+ [
+ "OptionalType";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ];
+ [
+ "byte_list";
+ [
+ "ListType";
+ [
+ "DataType";
+ "Uint8"
+ ]
+ ]
+ ];
+ [
+ "from_byte_list";
+ [
+ "DataType";
+ "String"
+ ]
+ ];
+ [
+ "from_lazy_byte_list";
+ [
+ "DataType";
+ "String"
+ ]
+ ]
+ ]
+ ]
+ ];
+ "Data" = [
+ [
+ "test";
+ "test";
+ "TEST";
+ "Test";
+ [
+ "test"
+ ];
+ [
+ "TEST"
+ ];
+ [
+ "Test"
+ ];
+ [
+ "tset"
+ ];
+ [
+ "116";
+ "101";
+ "115";
+ "116"
+ ];
+ "test";
+ "test"
+ ];
+ [
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ [
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82"
+ ];
+ [
+ "\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2"
+ ];
+ [
+ "\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82"
+ ];
+ [
+ "\xD1\x82\xD1\x81\xD0\xB5\xD1\x82"
+ ];
+ [
+ "209";
+ "130";
+ "208";
+ "181";
+ "209";
+ "129";
+ "209";
+ "130"
+ ];
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82";
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82"
+ ];
+ [
+ "TeSt";
+ "test";
+ "TEST";
+ "Test";
+ [
+ "test"
+ ];
+ [
+ "TEST"
+ ];
+ [
+ "Test"
+ ];
+ [
+ "tSeT"
+ ];
+ [
+ "84";
+ "101";
+ "83";
+ "116"
+ ];
+ "TeSt";
+ "TeSt"
+ ];
+ [
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ [
+ "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82"
+ ];
+ [
+ "\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2"
+ ];
+ [
+ "\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82"
+ ];
+ [
+ "\xD0\xA2\xD1\x81\xD0\x95\xD1\x82"
+ ];
+ [
+ "209";
+ "130";
+ "208";
+ "149";
+ "209";
+ "129";
+ "208";
+ "162"
+ ];
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2";
+ "\xD1\x82\xD0\x95\xD1\x81\xD0\xA2"
+ ];
+ [
+ "Eyl\xC3\xBCl";
+ "eyl\xC3\xBCl";
+ "EYL\xC3\xBCL";
+ "Eyl\xC3\xBCl";
+ [
+ "eyl\xC3\xBCl"
+ ];
+ [
+ "EYL\xC3\x9CL"
+ ];
+ [
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "l\xC3\xBClyE"
+ ];
+ [
+ "69";
+ "121";
+ "108";
+ "195";
+ "188";
+ "108"
+ ];
+ "Eyl\xC3\xBCl";
+ "Eyl\xC3\xBCl"
+ ];
+ [
+ "6";
+ "6";
+ "6";
+ "6";
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ [
+ "6"
+ ];
+ [
+ "54"
+ ];
+ "6";
+ "6"
+ ];
+ [
+ "";
+ "";
+ "";
+ "";
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [
+ ""
+ ];
+ [];
+ "";
+ ""
+ ]
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.in b/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.in
new file mode 100644
index 00000000000..34af8b23d47
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.in
@@ -0,0 +1,4 @@
+{"key"="1";subkey="";"value"="ORSXG5A="};
+{"key"="2";subkey="";"value"="KRSXG5CUMVZXI==="};
+{"key"="3";subkey="";"value"="MFYHA3DF"};
+{"key"="4";subkey="";"value"="hmmmm===hmmmm"};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.sql b/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.sql
new file mode 100644
index 00000000000..51b47ec1665
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Base32Decode.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::Base32StrictDecode(value) AS strict_decoded,
+ String::Base32Decode(value) AS decoded
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.in b/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.in
new file mode 100644
index 00000000000..c0051d04efd
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.in
@@ -0,0 +1,3 @@
+{"key"="1";subkey="";"value"="test"};
+{"key"="2";subkey="";"value"="TestTest"};
+{"key"="3";subkey="";"value"="apple"};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.sql b/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.sql
new file mode 100644
index 00000000000..1ff9e3e4078
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Base32Encode.sql
@@ -0,0 +1,5 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::Base32Encode(value) AS encoded
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/BlockFind.sql b/ydb/library/yql/udfs/common/string/test/cases/BlockFind.sql
new file mode 100644
index 00000000000..7de35d4c886
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/BlockFind.sql
@@ -0,0 +1,6 @@
+/* syntax version 1 */
+pragma UseBlocks;
+SELECT
+ value,
+ String::LevensteinDistance(value, "as") AS levenstein
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.in b/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.in
new file mode 100644
index 00000000000..27fc322b1ae
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.in
@@ -0,0 +1,3 @@
+{"key"="1";"subkey"="1";"value"="a b c"};
+{"key"="2";"subkey"="2";"value"="d"};
+{"key"="3";"subkey"="3";"value"=""};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.sql b/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.sql
new file mode 100644
index 00000000000..2dab551eb1c
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/ExtendAndTake.sql
@@ -0,0 +1,10 @@
+/* syntax version 1 */
+
+$split = ($row) -> {
+ return String::SplitToList($row.value, " ", true AS SkipEmpty, false AS DelimeterString);
+};
+
+SELECT
+ $split(TableRow()),
+ ListExtend($split(TableRow()), $split(TableRow()))[1]
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Find.sql b/ydb/library/yql/udfs/common/string/test/cases/Find.sql
new file mode 100644
index 00000000000..273553dcf9e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Find.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::Contains(value, "as") AS contains,
+ String::HasPrefix(value, "as") AS prefix,
+ String::StartsWith(value, "as") AS starts,
+ String::HasSuffix(value, "as") AS suffix,
+ String::EndsWith(value, "as") AS ends,
+ String::Find(value, "as") AS find,
+ String::ReverseFind(value, "as") AS rfind,
+ String::LevensteinDistance(value, "as") AS levenstein
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/List.in b/ydb/library/yql/udfs/common/string/test/cases/List.in
new file mode 100644
index 00000000000..949cf26c776
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/List.in
@@ -0,0 +1,6 @@
+{"key"="1";"subkey"="1";"value"="a@b@c"};
+{"key"="1";"subkey"="1";"value"="@a@b@c"};
+{"key"="1";"subkey"="1";"value"="@@@a@a"};
+{"key"="2";"subkey"="2";"value"="d#e#f"};
+{"key"="3";"subkey"="3";"value"="d"};
+{"key"="4";"subkey"="4";"value"=""};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/List.sql b/ydb/library/yql/udfs/common/string/test/cases/List.sql
new file mode 100644
index 00000000000..42b983074e5
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/List.sql
@@ -0,0 +1,12 @@
+/* syntax version 1 */
+SELECT
+ value,
+ Ensure(value, String::JoinFromList(String::SplitToList(value, "@"), "@") == value) AS equals_to_original,
+ String::JoinFromList(String::SplitToList(value, "@"), "#") AS replace_delimeter,
+ String::SplitToList(value, "@") AS just_split,
+ String::SplitToList(value, "@")[0] as first,
+ String::SplitToList(value, "@", true AS SkipEmpty) AS skip_empty,
+ String::SplitToList(value, "b@", false AS DelimeterString) AS multichar_delim_set,
+ String::SplitToList(value, "b@", true AS DelimeterString) AS multichar_delim_string,
+ String::SplitToList(value, "@", 1 AS Limit) AS limited
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/List_v0.in b/ydb/library/yql/udfs/common/string/test/cases/List_v0.in
new file mode 100644
index 00000000000..949cf26c776
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/List_v0.in
@@ -0,0 +1,6 @@
+{"key"="1";"subkey"="1";"value"="a@b@c"};
+{"key"="1";"subkey"="1";"value"="@a@b@c"};
+{"key"="1";"subkey"="1";"value"="@@@a@a"};
+{"key"="2";"subkey"="2";"value"="d#e#f"};
+{"key"="3";"subkey"="3";"value"="d"};
+{"key"="4";"subkey"="4";"value"=""};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/List_v0.sql b/ydb/library/yql/udfs/common/string/test/cases/List_v0.sql
new file mode 100644
index 00000000000..36d984dc6a8
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/List_v0.sql
@@ -0,0 +1,27 @@
+/* syntax version 1 */
+-- use SplitToList settings which are used as defaults in v0 syntax
+SELECT
+ value,
+ IF (
+ String::Contains(value, "@@"),
+ Ensure(
+ value,
+ String::JoinFromList(String::SplitToList(value, "@", true AS SkipEmpty, false AS DelimeterString), "@") != value,
+ value
+ )
+ ) AS not_equals_to_original,
+ IF (
+ String::Contains(value, "@@"),
+ Ensure(
+ value,
+ String::JoinFromList(String::SplitToList(value, "@", true AS SkipEmpty, false AS DelimeterString), "@") != value,
+ value
+ )
+ ) AS not_equals_to_original_skip_empty,
+ Ensure(
+ value,
+ String::JoinFromList(String::SplitToList(value, "@", false AS SkipEmpty, false AS DelimeterString), "@") == value,
+ value
+ ) AS equals_to_original,
+ String::SplitToList(value, "@#", true AS SkipEmpty, false AS DelimeterString) AS multichar
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Remove.sql b/ydb/library/yql/udfs/common/string/test/cases/Remove.sql
new file mode 100644
index 00000000000..59fd7de3f2e
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Remove.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::RemoveAll(value, "as") AS all,
+ String::RemoveFirst(value, "a") AS first,
+ String::RemoveLast(value, "a") AS last,
+ String::RemoveFirst(value, "as") AS first2,
+ String::RemoveLast(value, "as") AS last2,
+ String::RemoveFirst(value, "") AS first3,
+ String::RemoveLast(value, "") AS last3
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/Replace.sql b/ydb/library/yql/udfs/common/string/test/cases/Replace.sql
new file mode 100644
index 00000000000..0eea32a3e41
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/Replace.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::ReplaceAll(value, "as", "zzz") AS all,
+ String::ReplaceFirst(value, "a", "z") AS first,
+ String::ReplaceLast(value, "a", "z") AS last,
+ String::ReplaceFirst(value, "a", "zz") AS first2,
+ String::ReplaceLast(value, "a", "zz") AS last2,
+ String::ReplaceFirst(value, "a", "") AS first3,
+ String::ReplaceLast(value, "a", "") AS last3
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/ReplaceFirstLast.sql b/ydb/library/yql/udfs/common/string/test/cases/ReplaceFirstLast.sql
new file mode 100644
index 00000000000..6a83400d424
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/ReplaceFirstLast.sql
@@ -0,0 +1,10 @@
+SELECT
+ String::ReplaceFirst("gasas", "as", "z"),
+ String::ReplaceFirst("gasas", "a", "zzz"),
+ String::ReplaceFirst("gasas", "a", ""),
+ String::ReplaceFirst("gasas", "e", "z"),
+ String::ReplaceLast("gasas", "as", "z"),
+ String::ReplaceLast("gasas", "a", "zzz"),
+ String::ReplaceLast("gasas", "a", ""),
+ String::ReplaceLast("gasas", "k", "ey");
+
diff --git a/ydb/library/yql/udfs/common/string/test/cases/StreamFormat.sql b/ydb/library/yql/udfs/common/string/test/cases/StreamFormat.sql
new file mode 100644
index 00000000000..a5705ce8676
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/StreamFormat.sql
@@ -0,0 +1,18 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::RightPad(value, 20) AS right_pad,
+ String::LeftPad(value, 20) AS left_pad,
+ String::RightPad(value, 20, "0") AS right_pad_zero,
+ String::LeftPad(value, 20, "0") AS left_pad_zero,
+ String::Hex(LENGTH(value)) AS hex,
+ String::SHex(-LENGTH(value)) AS shex,
+ String::Bin(LENGTH(value)) AS bin,
+ String::SBin(-LENGTH(value)) AS sbin,
+ String::HexText(value) AS hex_text,
+ String::BinText(value) AS bin_text,
+ String::HumanReadableDuration(LENGTH(value) * 123456789) AS duration,
+ String::HumanReadableQuantity(LENGTH(value) * 123456789) AS quantity,
+ String::HumanReadableBytes(LENGTH(value) * 123456789) AS bytes,
+ String::Prec(LENGTH(value) / 12345.6789, 4) AS prec
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/To.in b/ydb/library/yql/udfs/common/string/test/cases/To.in
new file mode 100644
index 00000000000..93a00f7db8d
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/To.in
@@ -0,0 +1,7 @@
+{"key"="1";"subkey"="1";"value"="test"};
+{"key"="2";"subkey"="2";"value"="\xD1\x82\xD0\xB5\xD1\x81\xD1\x82"};
+{"key"="3";"subkey"="3";"value"="TeSt"};
+{"key"="4";"subkey"="4";"value"="\xD1\x82\xD0\x95\xD1\x81\xD0\xA2"};
+{"key"="5";"subkey"="5";"value"="Eyl\xC3\xBCl"};
+{"key"="6";"subkey"="6";"value"="6"};
+{"key"="4";"subkey"="4";"value"=""};
diff --git a/ydb/library/yql/udfs/common/string/test/cases/To.sql b/ydb/library/yql/udfs/common/string/test/cases/To.sql
new file mode 100644
index 00000000000..a7faf41efe6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/To.sql
@@ -0,0 +1,14 @@
+/* syntax version 1 */
+SELECT
+ value,
+ String::AsciiToLower(value) AS ascii_lower,
+ String::AsciiToUpper(value) AS ascii_upper,
+ String::AsciiToTitle(value) AS ascii_title,
+ String::ToLower(value) AS lower,
+ String::ToUpper(value) AS upper,
+ String::ToTitle(value) AS title,
+ String::Reverse(value) AS reverse,
+ String::ToByteList(value) AS byte_list,
+ String::FromByteList(String::ToByteList(value)) AS from_byte_list,
+ String::FromByteList(YQL::LazyList(String::ToByteList(value))) AS from_lazy_byte_list
+FROM Input;
diff --git a/ydb/library/yql/udfs/common/string/test/cases/default.in b/ydb/library/yql/udfs/common/string/test/cases/default.in
new file mode 100644
index 00000000000..1cc30a212d6
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/cases/default.in
@@ -0,0 +1,5 @@
+{"key"="1";"subkey"="1";"value"="fdsa"};
+{"key"="2";"subkey"="2";"value"="aswedfg"};
+{"key"="3";"subkey"="3";"value"="asdadsaasd"};
+{"key"="4";"subkey"="4";"value"="gdsfsassas"};
+{"key"="5";"subkey"="5";"value"=""};
diff --git a/ydb/library/yql/udfs/common/string/test/ya.make b/ydb/library/yql/udfs/common/string/test/ya.make
new file mode 100644
index 00000000000..55db01c46a4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/string/test/ya.make
@@ -0,0 +1,13 @@
+YQL_UDF_TEST()
+
+DEPENDS(ydb/library/yql/udfs/common/string)
+
+TIMEOUT(300)
+
+SIZE(MEDIUM)
+
+IF (SANITIZER_TYPE == "memory")
+ TAG(ya:not_autocheck) # YQL-15385
+ENDIF()
+
+END()
diff --git a/ydb/library/yql/udfs/common/string/ya.make b/ydb/library/yql/udfs/common/string/ya.make
index 69d7b54deb1..2b7e10d1729 100644
--- a/ydb/library/yql/udfs/common/string/ya.make
+++ b/ydb/library/yql/udfs/common/string/ya.make
@@ -22,3 +22,8 @@ PEERDIR(
)
END()
+
+RECURSE_FOR_TESTS(
+ test
+)
+