limbo/testing/scalar-functions.test
2024-09-21 16:10:42 +02:00

444 lines
7.5 KiB
Tcl
Executable file

#!/usr/bin/env tclsh
set testdir [file dirname $argv0]
source $testdir/tester.tcl
do_execsql_test concat-chars {
select concat('l', 'i');
} {li}
do_execsql_test concat-char-and-number {
select concat('l', 1);
} {l1}
do_execsql_test concat-char-and-decimal {
select concat('l', 1.5);
} {l1.5}
do_execsql_test concat-char-null-char {
select concat('l', null, 'i');
} {li}
do_execsql_test concat_ws-numbers {
select concat_ws(',', 1, 2);
} {1,2}
do_execsql_test concat_ws-single-number {
select concat_ws(',', 1);
} {1}
do_execsql_test concat_ws-null {
select concat_ws(null, 1, 2);
} {}
do_execsql_test concat_ws-multiple {
select concat_ws(',', 1, 2), concat_ws(',', 3, 4)
} {1,2|3,4}
do_execsql_test char {
select char(108, 105)
} {li}
do_execsql_test char-empty {
select char()
} {}
do_execsql_test char-null {
select char(null)
} {}
do_execsql_test char-non-integer {
select char('a')
} {}
do_execsql_test abs {
select abs(1);
} {1}
do_execsql_test abs-negative {
select abs(-1);
} {1}
do_execsql_test abs-char {
select abs('a');
} {0.0}
do_execsql_test abs-null {
select abs(null);
} {}
do_execsql_test ifnull-1 {
select ifnull(1, 2);
} {1}
do_execsql_test ifnull-2 {
select ifnull(null, 2);
} {2}
do_execsql_test upper {
select upper('Limbo')
} {LIMBO}
do_execsql_test upper-number {
select upper(1)
} {1}
do_execsql_test upper-char {
select upper('a')
} {A}
do_execsql_test upper-null {
select upper(null)
} {}
do_execsql_test lower {
select lower('Limbo')
} {limbo}
do_execsql_test lower-number {
select lower(1)
} {1}
do_execsql_test lower-char {
select lower('A')
} {a}
do_execsql_test lower-null {
select lower(null)
} {}
do_execsql_test trim {
SELECT trim(' Limbo ');
} {Limbo}
do_execsql_test trim-number {
SELECT trim(1);
} {1}
do_execsql_test trim-null {
SELECT trim(null);
} {}
do_execsql_test trim-leading-whitespace {
SELECT trim(' Leading');
} {Leading}
do_execsql_test trim-trailing-whitespace {
SELECT trim('Trailing ');
} {Trailing}
do_execsql_test trim-pattern {
SELECT trim('Limbo', 'Limbo');
} {}
do_execsql_test trim-pattern-number {
SELECT trim(1, '1');
} {}
do_execsql_test trim-pattern-null {
SELECT trim(null, 'null');
} {}
do_execsql_test trim-no-match-pattern {
SELECT trim('Limbo', 'xyz');
} {Limbo}
do_execsql_test ltrim {
SELECT ltrim(' Limbo ');
} {"Limbo "}
do_execsql_test ltrim-number {
SELECT ltrim(1);
} {1}
do_execsql_test ltrim-null {
SELECT ltrim(null);
} {}
do_execsql_test ltrim-leading-whitespace {
SELECT ltrim(' Leading');
} {Leading}
do_execsql_test ltrim-no-leading-whitespace {
SELECT ltrim('Limbo');
} {Limbo}
do_execsql_test ltrim-pattern {
SELECT ltrim('Limbo', 'Limbo');
} {}
do_execsql_test ltrim-pattern-number {
SELECT ltrim(1, '1');
} {}
do_execsql_test ltrim-pattern-null {
SELECT ltrim(null, 'null');
} {}
do_execsql_test ltrim-no-match-pattern {
SELECT ltrim('Limbo', 'xyz');
} {Limbo}
do_execsql_test rtrim {
SELECT rtrim(' Limbo ');
} {" Limbo"}
do_execsql_test rtrim-number {
SELECT rtrim(1);
} {1}
do_execsql_test rtrim-null {
SELECT rtrim(null);
} {}
do_execsql_test rtrim-trailing-whitespace {
SELECT rtrim('Trailing ');
} {Trailing}
do_execsql_test rtrim-no-trailing-whitespace {
SELECT rtrim('Limbo');
} {Limbo}
do_execsql_test rtrim-pattern {
SELECT rtrim('Limbo', 'Limbo');
} {}
do_execsql_test rtrim-pattern-number {
SELECT rtrim(1, '1');
} {}
do_execsql_test rtrim-pattern-null {
SELECT rtrim(null, 'null');
} {}
do_execsql_test rtrim-no-match-pattern {
SELECT rtrim('Limbo', 'xyz');
} {Limbo}
do_execsql_test round-float-no-precision {
SELECT round(123.456);
} {123.0}
do_execsql_test round-float-with-precision {
SELECT round(123.456, 2);
} {123.46}
do_execsql_test round-float-with-text-precision {
SELECT round(123.5, '1');
} {123.5}
do_execsql_test round-text-parsable {
SELECT round('123.456', 2);
} {123.46}
do_execsql_test round-text-non-parsable {
SELECT round('abc', 1);
} {0.0}
do_execsql_test round-integer-with-precision {
SELECT round(123, 1);
} {123.0}
do_execsql_test round-float-negative-precision {
SELECT round(123.456, -1);
} {123.0}
do_execsql_test round-float-zero-precision {
SELECT round(123.456, 0);
} {123.0}
do_execsql_test round-null-precision {
SELECT round(123.456, null);
} {}
do_execsql_test length-text {
SELECT length('limbo');
} {5}
do_execsql_test length-integer {
SELECT length(12345);
} {5}
do_execsql_test length-float {
SELECT length(123.456);
} {7}
do_execsql_test length-null {
SELECT length(NULL);
} {}
do_execsql_test length-empty-text {
SELECT length('');
} {0}
do_execsql_test length-date-binary-expr {
select length(date('now')) = 10;
} {1}
do_execsql_test min-number {
select min(-10,2,3)
} {-10}
do_execsql_test min-str {
select min('b','a','z')
} {a}
do_execsql_test min-null {
select min(null,null)
} {}
do_execsql_test max-number {
select max(-10,2,3)
} {3}
do_execsql_test max-str {
select max('b','a','z')
} {z}
do_execsql_test min-int-float {
select min(1,5.0)
} {1}
do_execsql_test max-int-float {
select max(1,5.0)
} {5.0}
do_execsql_test min-float-int {
select min(5.0,1)
} {1}
do_execsql_test max-null {
select max(null,null)
} {}
do_execsql_test nullif {
select nullif(1, 2)
} {1}
do_execsql_test nullif {
select nullif(1, 1)
} {}
do_execsql_test nullif {
select nullif('limbo', 'limbo')
} {}
do_execsql_test substr-3-args {
SELECT substr('limbo', 1, 3);
} {lim}
do_execsql_test substr-3-args-exceed-length {
SELECT substr('limbo', 1, 10);
} {limbo}
do_execsql_test substr-3-args-start-exceed-length {
SELECT substr('limbo', 10, 3);
} {}
do_execsql_test substr-2-args {
SELECT substr('limbo', 3);
} {mbo}
do_execsql_test substring-3-args {
SELECT substring('limbo', 1, 3);
} {lim}
do_execsql_test substring-3-args-exceed-length {
SELECT substring('limbo', 1, 10);
} {limbo}
do_execsql_test substring-3-args-start-exceed-length {
SELECT substring('limbo', 10, 3);
} {}
do_execsql_test substring-2-args {
SELECT substring('limbo', 3);
} {mbo}
do_execsql_test substring-2-args-exceed-length {
SELECT substring('limbo', 10);
} {}
do_execsql_test unicode-a {
SELECT unicode('a');
} {97}
do_execsql_test unicode-emoji {
SELECT unicode('😊');
} {128522}
do_execsql_test unicode-empty {
SELECT unicode('');
} {}
do_execsql_test unicode-number {
SELECT unicode(23);
} {50}
do_execsql_test unicode-float {
SELECT unicode(23.45);
} {50}
do_execsql_test unicode-null {
SELECT unicode(NULL);
} {}
do_execsql_test quote-string-embedded-nul {
SELECT quote(concat('abc', char(0), 'def'))
} {'abc'}
do_execsql_test quote-string {
SELECT quote('limbo')
} {'limbo'}
do_execsql_test quote-null {
SELECT quote(null)
} {NULL}
do_execsql_test quote-integer {
SELECT quote(123)
} {123}
do_execsql_test sign-positive-integer {
SELECT sign(42);
} {1}
do_execsql_test sign-negative-integer {
SELECT sign(-42);
} {-1}
do_execsql_test sign-zero {
SELECT sign(0);
} {0}
do_execsql_test sign-positive-float {
SELECT sign(42.0);
} {1}
do_execsql_test sign-negative-float {
SELECT sign(-42.0);
} {-1}
do_execsql_test sign-zero-float {
SELECT sign(0.0);
} {0}
do_execsql_test sign-text-positive-integer {
SELECT sign('42');
} {1}
do_execsql_test sign-text-negative-integer {
SELECT sign('-42');
} {-1}
do_execsql_test sign-text-zero {
SELECT sign('0');
} {0}
do_execsql_test sign-text-non-numeric {
SELECT sign('abc');
} {}
do_execsql_test sign-null {
SELECT sign(NULL);
} {}