summaryrefslogtreecommitdiffstats
path: root/test/func2.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/func2.test')
-rw-r--r--test/func2.test511
1 files changed, 511 insertions, 0 deletions
diff --git a/test/func2.test b/test/func2.test
new file mode 100644
index 0000000..08ad857
--- /dev/null
+++ b/test/func2.test
@@ -0,0 +1,511 @@
+# 2009 November 11
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this file is testing built-in functions.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# Test plan:
+#
+# func2-1.*: substr implementation (ascii)
+# func2-2.*: substr implementation (utf8)
+# func2-3.*: substr implementation (blob)
+#
+
+proc bin_to_hex {blob} {
+ set bytes {}
+ binary scan $blob \c* bytes
+ set bytes2 [list]
+ foreach b $bytes {lappend bytes2 [format %02X [expr $b & 0xFF]]}
+ join $bytes2 {}
+}
+
+#----------------------------------------------------------------------------
+# Test cases func2-1.*: substr implementation (ascii)
+#
+
+do_test func2-1.1 {
+ execsql {SELECT 'Supercalifragilisticexpialidocious'}
+} {Supercalifragilisticexpialidocious}
+
+# substr(x,y), substr(x,y,z)
+do_test func2-1.2.1 {
+ catchsql {SELECT SUBSTR()}
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-1.2.2 {
+ catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious')}
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-1.2.3 {
+ catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1,1,1)}
+} {1 {wrong number of arguments to function SUBSTR()}}
+
+# p1 is 1-indexed
+do_test func2-1.3 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0)}
+} {Supercalifragilisticexpialidocious}
+do_test func2-1.4 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1)}
+} {Supercalifragilisticexpialidocious}
+do_test func2-1.5 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2)}
+} {upercalifragilisticexpialidocious}
+do_test func2-1.6 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30)}
+} {cious}
+do_test func2-1.7 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34)}
+} {s}
+do_test func2-1.8 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35)}
+} {{}}
+do_test func2-1.9 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36)}
+} {{}}
+
+# if p1<0, start from right
+do_test func2-1.10 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0)}
+} {Supercalifragilisticexpialidocious}
+do_test func2-1.11 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1)}
+} {s}
+do_test func2-1.12 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2)}
+} {us}
+do_test func2-1.13 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30)}
+} {rcalifragilisticexpialidocious}
+do_test func2-1.14 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34)}
+} {Supercalifragilisticexpialidocious}
+do_test func2-1.15 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35)}
+} {Supercalifragilisticexpialidocious}
+do_test func2-1.16 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36)}
+} {Supercalifragilisticexpialidocious}
+
+# p1 is 1-indexed, p2 length to return
+do_test func2-1.17.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1)}
+} {{}}
+do_test func2-1.17.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2)}
+} {S}
+do_test func2-1.18 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1)}
+} {S}
+do_test func2-1.19.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
+} {{}}
+do_test func2-1.19.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1)}
+} {u}
+do_test func2-1.19.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2)}
+} {up}
+do_test func2-1.20 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1)}
+} {c}
+do_test func2-1.21 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1)}
+} {s}
+do_test func2-1.22 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1)}
+} {{}}
+do_test func2-1.23 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1)}
+} {{}}
+
+# if p1<0, start from right, p2 length to return
+do_test func2-1.24 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1)}
+} {{}}
+do_test func2-1.25.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0)}
+} {{}}
+do_test func2-1.25.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1)}
+} {s}
+do_test func2-1.25.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2)}
+} {s}
+do_test func2-1.26 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1)}
+} {u}
+do_test func2-1.27 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1)}
+} {r}
+do_test func2-1.28.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0)}
+} {{}}
+do_test func2-1.28.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1)}
+} {S}
+do_test func2-1.28.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2)}
+} {Su}
+do_test func2-1.29.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1)}
+} {{}}
+do_test func2-1.29.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2)}
+} {S}
+do_test func2-1.30.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0)}
+} {{}}
+do_test func2-1.30.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1)}
+} {{}}
+do_test func2-1.30.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2)}
+} {{}}
+do_test func2-1.30.3 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 3)}
+} {S}
+
+# p1 is 1-indexed, p2 length to return, p2<0 return p2 chars before p1
+do_test func2-1.31.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0)}
+} {{}}
+do_test func2-1.31.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1)}
+} {{}}
+do_test func2-1.31.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2)}
+} {{}}
+do_test func2-1.32.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0)}
+} {{}}
+do_test func2-1.32.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1)}
+} {{}}
+do_test func2-1.33.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
+} {{}}
+do_test func2-1.33.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1)}
+} {S}
+do_test func2-1.33.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2)}
+} {S}
+do_test func2-1.34.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0)}
+} {{}}
+do_test func2-1.34.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1)}
+} {u}
+do_test func2-1.34.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2)}
+} {Su}
+do_test func2-1.35.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1)}
+} {o}
+do_test func2-1.35.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2)}
+} {do}
+do_test func2-1.36 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1)}
+} {u}
+do_test func2-1.37 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1)}
+} {s}
+do_test func2-1.38.0 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0)}
+} {{}}
+do_test func2-1.38.1 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1)}
+} {{}}
+do_test func2-1.38.2 {
+ execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -2)}
+} {s}
+
+
+#----------------------------------------------------------------------------
+# Test cases func2-2.*: substr implementation (utf8)
+#
+
+# Only do the following tests if TCL has UTF-8 capabilities
+#
+if {"\u1234"!="u1234"} {
+
+do_test func2-2.1.1 {
+ execsql "SELECT 'hi\u1234ho'"
+} "hi\u1234ho"
+
+# substr(x,y), substr(x,y,z)
+do_test func2-2.1.2 {
+ catchsql "SELECT SUBSTR()"
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-2.1.3 {
+ catchsql "SELECT SUBSTR('hi\u1234ho')"
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-2.1.4 {
+ catchsql "SELECT SUBSTR('hi\u1234ho', 1,1,1)"
+} {1 {wrong number of arguments to function SUBSTR()}}
+
+do_test func2-2.2.0 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 0)"
+} {{}}
+do_test func2-2.2.1 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 1)"
+} {{}}
+do_test func2-2.2.2 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 2)"
+} "h"
+do_test func2-2.2.3 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 3)"
+} "hi"
+do_test func2-2.2.4 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 4)"
+} "hi\u1234"
+do_test func2-2.2.5 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 5)"
+} "hi\u1234h"
+do_test func2-2.2.6 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 0, 6)"
+} "hi\u1234ho"
+
+do_test func2-2.3.0 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 0)"
+} {{}}
+do_test func2-2.3.1 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 1)"
+} "h"
+do_test func2-2.3.2 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 2)"
+} "hi"
+do_test func2-2.3.3 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 3)"
+} "hi\u1234"
+do_test func2-2.3.4 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 4)"
+} "hi\u1234h"
+do_test func2-2.3.5 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 5)"
+} "hi\u1234ho"
+do_test func2-2.3.6 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 1, 6)"
+} "hi\u1234ho"
+
+do_test func2-2.4.0 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 3, 0)"
+} {{}}
+do_test func2-2.4.1 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 3, 1)"
+} "\u1234"
+do_test func2-2.4.2 {
+ execsql "SELECT SUBSTR('hi\u1234ho', 3, 2)"
+} "\u1234h"
+
+do_test func2-2.5.0 {
+ execsql "SELECT SUBSTR('\u1234', 0, 0)"
+} {{}}
+do_test func2-2.5.1 {
+ execsql "SELECT SUBSTR('\u1234', 0, 1)"
+} {{}}
+do_test func2-2.5.2 {
+ execsql "SELECT SUBSTR('\u1234', 0, 2)"
+} "\u1234"
+do_test func2-2.5.3 {
+ execsql "SELECT SUBSTR('\u1234', 0, 3)"
+} "\u1234"
+
+do_test func2-2.6.0 {
+ execsql "SELECT SUBSTR('\u1234', 1, 0)"
+} {{}}
+do_test func2-2.6.1 {
+ execsql "SELECT SUBSTR('\u1234', 1, 1)"
+} "\u1234"
+do_test func2-2.6.2 {
+ execsql "SELECT SUBSTR('\u1234', 1, 2)"
+} "\u1234"
+do_test func2-2.6.3 {
+ execsql "SELECT SUBSTR('\u1234', 1, 3)"
+} "\u1234"
+
+do_test func2-2.7.0 {
+ execsql "SELECT SUBSTR('\u1234', 2, 0)"
+} {{}}
+do_test func2-2.7.1 {
+ execsql "SELECT SUBSTR('\u1234', 2, 1)"
+} {{}}
+do_test func2-2.7.2 {
+ execsql "SELECT SUBSTR('\u1234', 2, 2)"
+} {{}}
+
+do_test func2-2.8.0 {
+ execsql "SELECT SUBSTR('\u1234', -1, 0)"
+} {{}}
+do_test func2-2.8.1 {
+ execsql "SELECT SUBSTR('\u1234', -1, 1)"
+} "\u1234"
+do_test func2-2.8.2 {
+ execsql "SELECT SUBSTR('\u1234', -1, 2)"
+} "\u1234"
+do_test func2-2.8.3 {
+ execsql "SELECT SUBSTR('\u1234', -1, 3)"
+} "\u1234"
+
+} ;# End \u1234!=u1234
+
+#----------------------------------------------------------------------------
+# Test cases func2-3.*: substr implementation (blob)
+#
+
+ifcapable {!bloblit} {
+ finish_test
+ return
+}
+
+do_test func2-3.1.1 {
+ set blob [execsql "SELECT x'1234'"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+
+# substr(x,y), substr(x,y,z)
+do_test func2-3.1.2 {
+ catchsql {SELECT SUBSTR()}
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-3.1.3 {
+ catchsql {SELECT SUBSTR(x'1234')}
+} {1 {wrong number of arguments to function SUBSTR()}}
+do_test func2-3.1.4 {
+ catchsql {SELECT SUBSTR(x'1234', 1,1,1)}
+} {1 {wrong number of arguments to function SUBSTR()}}
+
+do_test func2-3.2.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 0, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.2.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 0, 1)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.2.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 0, 2)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.2.3 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 0, 3)"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+
+do_test func2-3.3.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.3.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, 1)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.3.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, 2)"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+do_test func2-3.3.3 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, 3)"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+
+do_test func2-3.4.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.4.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, 1)"]
+ bin_to_hex [lindex $blob 0]
+} "34"
+do_test func2-3.4.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, 2)"]
+ bin_to_hex [lindex $blob 0]
+} "34"
+do_test func2-3.4.3 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, 3)"]
+ bin_to_hex [lindex $blob 0]
+} "34"
+
+do_test func2-3.5.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.5.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, 1)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.5.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, 2)"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+do_test func2-3.5.3 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, 3)"]
+ bin_to_hex [lindex $blob 0]
+} "1234"
+
+do_test func2-3.6.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.6.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, -1)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.6.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, -2)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.6.3 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -1, -3)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+
+do_test func2-3.7.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.7.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, -1)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.7.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', -2, -2)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+
+do_test func2-3.8.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.8.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, -1)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.8.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 1, -2)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+
+do_test func2-3.9.0 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 2, 0)"]
+ bin_to_hex [lindex $blob 0]
+} {}
+do_test func2-3.9.1 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 2, -1)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+do_test func2-3.9.2 {
+ set blob [execsql "SELECT SUBSTR(x'1234', 2, -2)"]
+ bin_to_hex [lindex $blob 0]
+} "12"
+
+finish_test