gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/func2.test (about)

     1  # 2009 November 11
     2  #
     3  # The author disclaims copyright to this source code.  In place of
     4  # a legal notice, here is a blessing:
     5  #
     6  #    May you do good and not evil.
     7  #    May you find forgiveness for yourself and forgive others.
     8  #    May you share freely, never taking more than you give.
     9  #
    10  #***********************************************************************
    11  # This file implements regression tests for SQLite library.  The
    12  # focus of this file is testing built-in functions.
    13  #
    14  
    15  set testdir [file dirname $argv0]
    16  source $testdir/tester.tcl
    17  
    18  # Test plan:
    19  #
    20  #   func2-1.*: substr implementation (ascii)
    21  #   func2-2.*: substr implementation (utf8)
    22  #   func2-3.*: substr implementation (blob)
    23  #
    24  
    25  proc bin_to_hex {blob} {
    26    set bytes {}
    27    binary scan $blob \c* bytes
    28    set bytes2 [list]
    29    foreach b $bytes {lappend bytes2 [format %02X [expr $b & 0xFF]]}
    30    join $bytes2 {}
    31  }
    32  
    33  #----------------------------------------------------------------------------
    34  # Test cases func2-1.*: substr implementation (ascii)
    35  #
    36  
    37  do_test func2-1.1 {
    38    execsql {SELECT 'Supercalifragilisticexpialidocious'}
    39  } {Supercalifragilisticexpialidocious}
    40  
    41  # substr(x,y), substr(x,y,z)
    42  do_test func2-1.2.1 {
    43    catchsql {SELECT SUBSTR()}
    44  } {1 {wrong number of arguments to function SUBSTR()}}
    45  do_test func2-1.2.2 {
    46    catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious')}
    47  } {1 {wrong number of arguments to function SUBSTR()}}
    48  do_test func2-1.2.3 {
    49    catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1,1,1)}
    50  } {1 {wrong number of arguments to function SUBSTR()}}
    51  
    52  # p1 is 1-indexed
    53  do_test func2-1.3 {
    54    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0)}
    55  } {Supercalifragilisticexpialidocious}
    56  do_test func2-1.4 {
    57    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1)}
    58  } {Supercalifragilisticexpialidocious}
    59  do_test func2-1.5 {
    60    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2)}
    61  } {upercalifragilisticexpialidocious}
    62  do_test func2-1.6 {
    63    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30)}
    64  } {cious}
    65  do_test func2-1.7 {
    66    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34)}
    67  } {s}
    68  do_test func2-1.8 {
    69    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35)}
    70  } {{}}
    71  do_test func2-1.9 {
    72    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36)}
    73  } {{}}
    74  
    75  # if p1<0, start from right
    76  do_test func2-1.10 {
    77    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0)}
    78  } {Supercalifragilisticexpialidocious}
    79  do_test func2-1.11 {
    80    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1)}
    81  } {s}
    82  do_test func2-1.12 {
    83    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2)}
    84  } {us}
    85  do_test func2-1.13 {
    86    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30)}
    87  } {rcalifragilisticexpialidocious}
    88  do_test func2-1.14 {
    89    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34)}
    90  } {Supercalifragilisticexpialidocious}
    91  do_test func2-1.15 {
    92    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35)}
    93  } {Supercalifragilisticexpialidocious}
    94  do_test func2-1.16 {
    95    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36)}
    96  } {Supercalifragilisticexpialidocious}
    97  
    98  # p1 is 1-indexed, p2 length to return
    99  do_test func2-1.17.1 {
   100    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1)}
   101  } {{}}
   102  do_test func2-1.17.2 {
   103    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2)}
   104  } {S}
   105  do_test func2-1.18 {
   106    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1)}
   107  } {S}
   108  do_test func2-1.19.0 {
   109    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
   110  } {{}}
   111  do_test func2-1.19.1 {
   112    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1)}
   113  } {u}
   114  do_test func2-1.19.2 {
   115    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2)}
   116  } {up}
   117  do_test func2-1.20 {
   118    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1)}
   119  } {c}
   120  do_test func2-1.21 {
   121    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1)}
   122  } {s}
   123  do_test func2-1.22 {
   124    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1)}
   125  } {{}}
   126  do_test func2-1.23 {
   127    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1)}
   128  } {{}}
   129  
   130  # if p1<0, start from right, p2 length to return
   131  do_test func2-1.24 {
   132    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1)}
   133  } {{}}
   134  do_test func2-1.25.0 {
   135    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0)}
   136  } {{}}
   137  do_test func2-1.25.1 {
   138    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1)}
   139  } {s}
   140  do_test func2-1.25.2 {
   141    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2)}
   142  } {s}
   143  do_test func2-1.26 {
   144    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1)}
   145  } {u}
   146  do_test func2-1.27 {
   147    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1)}
   148  } {r}
   149  do_test func2-1.28.0 {
   150    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0)}
   151  } {{}}
   152  do_test func2-1.28.1 {
   153    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1)}
   154  } {S}
   155  do_test func2-1.28.2 {
   156    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2)}
   157  } {Su}
   158  do_test func2-1.29.1 {
   159    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1)}
   160  } {{}}
   161  do_test func2-1.29.2 {
   162    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2)}
   163  } {S}
   164  do_test func2-1.30.0 {
   165    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0)}
   166  } {{}}
   167  do_test func2-1.30.1 {
   168    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1)}
   169  } {{}}
   170  do_test func2-1.30.2 {
   171    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2)}
   172  } {{}}
   173  do_test func2-1.30.3 {
   174    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 3)}
   175  } {S}
   176  
   177  # p1 is 1-indexed, p2 length to return, p2<0 return p2 chars before p1
   178  do_test func2-1.31.0 {
   179    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0)}
   180  } {{}}
   181  do_test func2-1.31.1 {
   182    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1)}
   183  } {{}}
   184  do_test func2-1.31.2 {
   185    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2)}
   186  } {{}}
   187  do_test func2-1.32.0 {
   188    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0)}
   189  } {{}}
   190  do_test func2-1.32.1 {
   191    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1)}
   192  } {{}}
   193  do_test func2-1.33.0 {
   194    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
   195  } {{}}
   196  do_test func2-1.33.1 {
   197    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1)}
   198  } {S}
   199  do_test func2-1.33.2 {
   200    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2)}
   201  } {S}
   202  do_test func2-1.34.0 {
   203    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0)}
   204  } {{}}
   205  do_test func2-1.34.1 {
   206    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1)}
   207  } {u}
   208  do_test func2-1.34.2 {
   209    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2)}
   210  } {Su}
   211  do_test func2-1.35.1 {
   212    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1)}
   213  } {o}
   214  do_test func2-1.35.2 {
   215    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2)}
   216  } {do}
   217  do_test func2-1.36 {
   218    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1)}
   219  } {u}
   220  do_test func2-1.37 {
   221    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1)}
   222  } {s}
   223  do_test func2-1.38.0 {
   224    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0)}
   225  } {{}}
   226  do_test func2-1.38.1 {
   227    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1)}
   228  } {{}}
   229  do_test func2-1.38.2 {
   230    execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -2)}
   231  } {s}
   232  
   233  
   234  #----------------------------------------------------------------------------
   235  # Test cases func2-2.*: substr implementation (utf8)
   236  #
   237  
   238  # Only do the following tests if TCL has UTF-8 capabilities
   239  #
   240  if {"\u1234"!="u1234"} {
   241  
   242  do_test func2-2.1.1 {
   243    execsql "SELECT 'hi\u1234ho'"
   244  } "hi\u1234ho"
   245  
   246  # substr(x,y), substr(x,y,z)
   247  do_test func2-2.1.2 {
   248    catchsql "SELECT SUBSTR()"
   249  } {1 {wrong number of arguments to function SUBSTR()}}
   250  do_test func2-2.1.3 {
   251    catchsql "SELECT SUBSTR('hi\u1234ho')"
   252  } {1 {wrong number of arguments to function SUBSTR()}}
   253  do_test func2-2.1.4 {
   254    catchsql "SELECT SUBSTR('hi\u1234ho', 1,1,1)"
   255  } {1 {wrong number of arguments to function SUBSTR()}}
   256  
   257  do_test func2-2.2.0 {
   258    execsql "SELECT SUBSTR('hi\u1234ho', 0, 0)"
   259  } {{}}
   260  do_test func2-2.2.1 {
   261    execsql "SELECT SUBSTR('hi\u1234ho', 0, 1)"
   262  } {{}}
   263  do_test func2-2.2.2 {
   264    execsql "SELECT SUBSTR('hi\u1234ho', 0, 2)"
   265  } "h"
   266  do_test func2-2.2.3 {
   267    execsql "SELECT SUBSTR('hi\u1234ho', 0, 3)"
   268  } "hi"
   269  do_test func2-2.2.4 {
   270    execsql "SELECT SUBSTR('hi\u1234ho', 0, 4)"
   271  } "hi\u1234"
   272  do_test func2-2.2.5 {
   273    execsql "SELECT SUBSTR('hi\u1234ho', 0, 5)"
   274  } "hi\u1234h"
   275  do_test func2-2.2.6 {
   276    execsql "SELECT SUBSTR('hi\u1234ho', 0, 6)"
   277  } "hi\u1234ho"
   278  
   279  do_test func2-2.3.0 {
   280    execsql "SELECT SUBSTR('hi\u1234ho', 1, 0)"
   281  } {{}}
   282  do_test func2-2.3.1 {
   283    execsql "SELECT SUBSTR('hi\u1234ho', 1, 1)"
   284  } "h"
   285  do_test func2-2.3.2 {
   286    execsql "SELECT SUBSTR('hi\u1234ho', 1, 2)"
   287  } "hi"
   288  do_test func2-2.3.3 {
   289    execsql "SELECT SUBSTR('hi\u1234ho', 1, 3)"
   290  } "hi\u1234"
   291  do_test func2-2.3.4 {
   292    execsql "SELECT SUBSTR('hi\u1234ho', 1, 4)"
   293  } "hi\u1234h"
   294  do_test func2-2.3.5 {
   295    execsql "SELECT SUBSTR('hi\u1234ho', 1, 5)"
   296  } "hi\u1234ho"
   297  do_test func2-2.3.6 {
   298    execsql "SELECT SUBSTR('hi\u1234ho', 1, 6)"
   299  } "hi\u1234ho"
   300  
   301  do_test func2-2.4.0 {
   302    execsql "SELECT SUBSTR('hi\u1234ho', 3, 0)"
   303  } {{}}
   304  do_test func2-2.4.1 {
   305    execsql "SELECT SUBSTR('hi\u1234ho', 3, 1)"
   306  } "\u1234"
   307  do_test func2-2.4.2 {
   308    execsql "SELECT SUBSTR('hi\u1234ho', 3, 2)"
   309  } "\u1234h"
   310  
   311  do_test func2-2.5.0 {
   312    execsql "SELECT SUBSTR('\u1234', 0, 0)"
   313  } {{}}
   314  do_test func2-2.5.1 {
   315    execsql "SELECT SUBSTR('\u1234', 0, 1)"
   316  } {{}}
   317  do_test func2-2.5.2 {
   318    execsql "SELECT SUBSTR('\u1234', 0, 2)"
   319  } "\u1234"
   320  do_test func2-2.5.3 {
   321    execsql "SELECT SUBSTR('\u1234', 0, 3)"
   322  } "\u1234"
   323  
   324  do_test func2-2.6.0 {
   325    execsql "SELECT SUBSTR('\u1234', 1, 0)"
   326  } {{}}
   327  do_test func2-2.6.1 {
   328    execsql "SELECT SUBSTR('\u1234', 1, 1)"
   329  } "\u1234"
   330  do_test func2-2.6.2 {
   331    execsql "SELECT SUBSTR('\u1234', 1, 2)"
   332  } "\u1234"
   333  do_test func2-2.6.3 {
   334    execsql "SELECT SUBSTR('\u1234', 1, 3)"
   335  } "\u1234"
   336  
   337  do_test func2-2.7.0 {
   338    execsql "SELECT SUBSTR('\u1234', 2, 0)"
   339  } {{}}
   340  do_test func2-2.7.1 {
   341    execsql "SELECT SUBSTR('\u1234', 2, 1)"
   342  } {{}}
   343  do_test func2-2.7.2 {
   344    execsql "SELECT SUBSTR('\u1234', 2, 2)"
   345  } {{}}
   346  
   347  do_test func2-2.8.0 {
   348    execsql "SELECT SUBSTR('\u1234', -1, 0)"
   349  } {{}}
   350  do_test func2-2.8.1 {
   351    execsql "SELECT SUBSTR('\u1234', -1, 1)"
   352  } "\u1234"
   353  do_test func2-2.8.2 {
   354    execsql "SELECT SUBSTR('\u1234', -1, 2)"
   355  } "\u1234"
   356  do_test func2-2.8.3 {
   357    execsql "SELECT SUBSTR('\u1234', -1, 3)"
   358  } "\u1234"
   359  
   360  } ;# End \u1234!=u1234
   361  
   362  #----------------------------------------------------------------------------
   363  # Test cases func2-3.*: substr implementation (blob)
   364  #
   365  
   366  ifcapable {!bloblit} {
   367    finish_test
   368    return
   369  }
   370  
   371  do_test func2-3.1.1 {
   372    set blob [execsql "SELECT x'1234'"]
   373    bin_to_hex [lindex $blob 0]
   374  } "1234"
   375  
   376  # substr(x,y), substr(x,y,z)
   377  do_test func2-3.1.2 {
   378    catchsql {SELECT SUBSTR()}
   379  } {1 {wrong number of arguments to function SUBSTR()}}
   380  do_test func2-3.1.3 {
   381    catchsql {SELECT SUBSTR(x'1234')}
   382  } {1 {wrong number of arguments to function SUBSTR()}}
   383  do_test func2-3.1.4 {
   384    catchsql {SELECT SUBSTR(x'1234', 1,1,1)}
   385  } {1 {wrong number of arguments to function SUBSTR()}}
   386  
   387  do_test func2-3.2.0 {
   388    set blob [execsql "SELECT SUBSTR(x'1234', 0, 0)"]
   389    bin_to_hex [lindex $blob 0]
   390  } {}
   391  do_test func2-3.2.1 {
   392    set blob [execsql "SELECT SUBSTR(x'1234', 0, 1)"]
   393    bin_to_hex [lindex $blob 0]
   394  } {}
   395  do_test func2-3.2.2 {
   396    set blob [execsql "SELECT SUBSTR(x'1234', 0, 2)"]
   397    bin_to_hex [lindex $blob 0]
   398  } "12"
   399  do_test func2-3.2.3 {
   400    set blob [execsql "SELECT SUBSTR(x'1234', 0, 3)"]
   401    bin_to_hex [lindex $blob 0]
   402  } "1234"
   403  
   404  do_test func2-3.3.0 {
   405    set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
   406    bin_to_hex [lindex $blob 0]
   407  } {}
   408  do_test func2-3.3.1 {
   409    set blob [execsql "SELECT SUBSTR(x'1234', 1, 1)"]
   410    bin_to_hex [lindex $blob 0]
   411  } "12"
   412  do_test func2-3.3.2 {
   413    set blob [execsql "SELECT SUBSTR(x'1234', 1, 2)"]
   414    bin_to_hex [lindex $blob 0]
   415  } "1234"
   416  do_test func2-3.3.3 {
   417    set blob [execsql "SELECT SUBSTR(x'1234', 1, 3)"]
   418    bin_to_hex [lindex $blob 0]
   419  } "1234"
   420  
   421  do_test func2-3.4.0 {
   422    set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
   423    bin_to_hex [lindex $blob 0]
   424  } {}
   425  do_test func2-3.4.1 {
   426    set blob [execsql "SELECT SUBSTR(x'1234', -1, 1)"]
   427    bin_to_hex [lindex $blob 0]
   428  } "34"
   429  do_test func2-3.4.2 {
   430    set blob [execsql "SELECT SUBSTR(x'1234', -1, 2)"]
   431    bin_to_hex [lindex $blob 0]
   432  } "34"
   433  do_test func2-3.4.3 {
   434    set blob [execsql "SELECT SUBSTR(x'1234', -1, 3)"]
   435    bin_to_hex [lindex $blob 0]
   436  } "34"
   437  
   438  do_test func2-3.5.0 {
   439    set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
   440    bin_to_hex [lindex $blob 0]
   441  } {}
   442  do_test func2-3.5.1 {
   443    set blob [execsql "SELECT SUBSTR(x'1234', -2, 1)"]
   444    bin_to_hex [lindex $blob 0]
   445  } "12"
   446  do_test func2-3.5.2 {
   447    set blob [execsql "SELECT SUBSTR(x'1234', -2, 2)"]
   448    bin_to_hex [lindex $blob 0]
   449  } "1234"
   450  do_test func2-3.5.3 {
   451    set blob [execsql "SELECT SUBSTR(x'1234', -2, 3)"]
   452    bin_to_hex [lindex $blob 0]
   453  } "1234"
   454  
   455  do_test func2-3.6.0 {
   456    set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
   457    bin_to_hex [lindex $blob 0]
   458  } {}
   459  do_test func2-3.6.1 {
   460    set blob [execsql "SELECT SUBSTR(x'1234', -1, -1)"]
   461    bin_to_hex [lindex $blob 0]
   462  } "12"
   463  do_test func2-3.6.2 {
   464    set blob [execsql "SELECT SUBSTR(x'1234', -1, -2)"]
   465    bin_to_hex [lindex $blob 0]
   466  } "12"
   467  do_test func2-3.6.3 {
   468    set blob [execsql "SELECT SUBSTR(x'1234', -1, -3)"]
   469    bin_to_hex [lindex $blob 0]
   470  } "12"
   471  
   472  do_test func2-3.7.0 {
   473    set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
   474    bin_to_hex [lindex $blob 0]
   475  } {}
   476  do_test func2-3.7.1 {
   477    set blob [execsql "SELECT SUBSTR(x'1234', -2, -1)"]
   478    bin_to_hex [lindex $blob 0]
   479  } {}
   480  do_test func2-3.7.2 {
   481    set blob [execsql "SELECT SUBSTR(x'1234', -2, -2)"]
   482    bin_to_hex [lindex $blob 0]
   483  } {}
   484  
   485  do_test func2-3.8.0 {
   486    set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
   487    bin_to_hex [lindex $blob 0]
   488  } {}
   489  do_test func2-3.8.1 {
   490    set blob [execsql "SELECT SUBSTR(x'1234', 1, -1)"]
   491    bin_to_hex [lindex $blob 0]
   492  } {}
   493  do_test func2-3.8.2 {
   494    set blob [execsql "SELECT SUBSTR(x'1234', 1, -2)"]
   495    bin_to_hex [lindex $blob 0]
   496  } {}
   497  
   498  do_test func2-3.9.0 {
   499    set blob [execsql "SELECT SUBSTR(x'1234', 2, 0)"]
   500    bin_to_hex [lindex $blob 0]
   501  } {}
   502  do_test func2-3.9.1 {
   503    set blob [execsql "SELECT SUBSTR(x'1234', 2, -1)"]
   504    bin_to_hex [lindex $blob 0]
   505  } "12"
   506  do_test func2-3.9.2 {
   507    set blob [execsql "SELECT SUBSTR(x'1234', 2, -2)"]
   508    bin_to_hex [lindex $blob 0]
   509  } "12"
   510  
   511  finish_test