CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
func2.test535 linesDownload Raw Back to test
1# 2009 November 112#3# The author disclaims copyright to this source code.  In place of4# 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.  The12# focus of this file is testing built-in functions.13#14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17 18# Test plan:19#20#   func2-1.*: substr implementation (ascii)21#   func2-2.*: substr implementation (utf8)22#   func2-3.*: substr implementation (blob)23#24 25proc bin_to_hex {blob} {26  set bytes {}27  binary scan $blob \c* bytes28  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 37do_test func2-1.1 {38  execsql {SELECT 'Supercalifragilisticexpialidocious'}39} {Supercalifragilisticexpialidocious}40 41# substr(x,y), substr(x,y,z)42do_test func2-1.2.1 {43  catchsql {SELECT SUBSTR()}44} {1 {wrong number of arguments to function SUBSTR()}}45do_test func2-1.2.2 {46  catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious')}47} {1 {wrong number of arguments to function SUBSTR()}}48do_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-indexed53do_test func2-1.3 {54  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0)}55} {Supercalifragilisticexpialidocious}56do_test func2-1.4 {57  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1)}58} {Supercalifragilisticexpialidocious}59do_test func2-1.5 {60  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2)}61} {upercalifragilisticexpialidocious}62do_test func2-1.6 {63  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30)}64} {cious}65do_test func2-1.7 {66  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34)}67} {s}68do_test func2-1.8 {69  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35)}70} {{}}71do_test func2-1.9 {72  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36)}73} {{}}74 75# if p1<0, start from right76do_test func2-1.10 {77  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0)}78} {Supercalifragilisticexpialidocious}79do_test func2-1.11 {80  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1)}81} {s}82do_test func2-1.12 {83  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2)}84} {us}85do_test func2-1.13 {86  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30)}87} {rcalifragilisticexpialidocious}88do_test func2-1.14 {89  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34)}90} {Supercalifragilisticexpialidocious}91do_test func2-1.15 {92  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35)}93} {Supercalifragilisticexpialidocious}94do_test func2-1.16 {95  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36)}96} {Supercalifragilisticexpialidocious}97 98# p1 is 1-indexed, p2 length to return99do_test func2-1.17.1 {100  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1)}101} {{}}102do_test func2-1.17.2 {103  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2)}104} {S}105do_test func2-1.18 {106  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1)}107} {S}108do_test func2-1.19.0 {109  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}110} {{}}111do_test func2-1.19.1 {112  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1)}113} {u}114do_test func2-1.19.2 {115  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2)}116} {up}117do_test func2-1.20 {118  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1)}119} {c}120do_test func2-1.21 {121  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1)}122} {s}123do_test func2-1.22 {124  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1)}125} {{}}126do_test func2-1.23 {127  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1)}128} {{}}129 130# if p1<0, start from right, p2 length to return131do_test func2-1.24 {132  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1)}133} {{}}134do_test func2-1.25.0 {135  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0)}136} {{}}137do_test func2-1.25.1 {138  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1)}139} {s}140do_test func2-1.25.2 {141  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2)}142} {s}143do_test func2-1.26 {144  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1)}145} {u}146do_test func2-1.27 {147  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1)}148} {r}149do_test func2-1.28.0 {150  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0)}151} {{}}152do_test func2-1.28.1 {153  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1)}154} {S}155do_test func2-1.28.2 {156  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2)}157} {Su}158do_test func2-1.29.1 {159  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1)}160} {{}}161do_test func2-1.29.2 {162  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2)}163} {S}164do_test func2-1.30.0 {165  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0)}166} {{}}167do_test func2-1.30.1 {168  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1)}169} {{}}170do_test func2-1.30.2 {171  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2)}172} {{}}173do_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 p1178do_test func2-1.31.0 {179  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0)}180} {{}}181do_test func2-1.31.1 {182  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1)}183} {{}}184do_test func2-1.31.2 {185  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2)}186} {{}}187do_test func2-1.32.0 {188  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0)}189} {{}}190do_test func2-1.32.1 {191  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1)}192} {{}}193do_test func2-1.33.0 {194  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}195} {{}}196do_test func2-1.33.1 {197  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1)}198} {S}199do_test func2-1.33.2 {200  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2)}201} {S}202do_test func2-1.34.0 {203  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0)}204} {{}}205do_test func2-1.34.1 {206  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1)}207} {u}208do_test func2-1.34.2 {209  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2)}210} {Su}211do_test func2-1.35.1 {212  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1)}213} {o}214do_test func2-1.35.2 {215  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2)}216} {do}217do_test func2-1.36 {218  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1)}219} {u}220do_test func2-1.37 {221  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1)}222} {s}223do_test func2-1.38.0 {224  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0)}225} {{}}226do_test func2-1.38.1 {227  execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1)}228} {{}}229do_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 capabilities239#240if {"\u1234"!="u1234"} {241 242do_test func2-2.1.1 {243  execsql "SELECT 'hi\u1234ho'"244} "hi\u1234ho"245 246# substr(x,y), substr(x,y,z)247do_test func2-2.1.2 {248  catchsql "SELECT SUBSTR()"249} {1 {wrong number of arguments to function SUBSTR()}}250do_test func2-2.1.3 {251  catchsql "SELECT SUBSTR('hi\u1234ho')"252} {1 {wrong number of arguments to function SUBSTR()}}253do_test func2-2.1.4 {254  catchsql "SELECT SUBSTR('hi\u1234ho', 1,1,1)"255} {1 {wrong number of arguments to function SUBSTR()}}256 257do_test func2-2.2.0 {258  execsql "SELECT SUBSTR('hi\u1234ho', 0, 0)"259} {{}}260do_test func2-2.2.1 {261  execsql "SELECT SUBSTR('hi\u1234ho', 0, 1)"262} {{}}263do_test func2-2.2.2 {264  execsql "SELECT SUBSTR('hi\u1234ho', 0, 2)"265} "h"266do_test func2-2.2.3 {267  execsql "SELECT SUBSTR('hi\u1234ho', 0, 3)"268} "hi"269do_test func2-2.2.4 {270  execsql "SELECT SUBSTR('hi\u1234ho', 0, 4)"271} "hi\u1234"272do_test func2-2.2.5 {273  execsql "SELECT SUBSTR('hi\u1234ho', 0, 5)"274} "hi\u1234h"275do_test func2-2.2.6 {276  execsql "SELECT SUBSTR('hi\u1234ho', 0, 6)"277} "hi\u1234ho"278 279do_test func2-2.3.0 {280  execsql "SELECT SUBSTR('hi\u1234ho', 1, 0)"281} {{}}282do_test func2-2.3.1 {283  execsql "SELECT SUBSTR('hi\u1234ho', 1, 1)"284} "h"285do_test func2-2.3.2 {286  execsql "SELECT SUBSTR('hi\u1234ho', 1, 2)"287} "hi"288do_test func2-2.3.3 {289  execsql "SELECT SUBSTR('hi\u1234ho', 1, 3)"290} "hi\u1234"291do_test func2-2.3.4 {292  execsql "SELECT SUBSTR('hi\u1234ho', 1, 4)"293} "hi\u1234h"294do_test func2-2.3.5 {295  execsql "SELECT SUBSTR('hi\u1234ho', 1, 5)"296} "hi\u1234ho"297do_test func2-2.3.6 {298  execsql "SELECT SUBSTR('hi\u1234ho', 1, 6)"299} "hi\u1234ho"300 301do_test func2-2.4.0 {302  execsql "SELECT SUBSTR('hi\u1234ho', 3, 0)"303} {{}}304do_test func2-2.4.1 {305  execsql "SELECT SUBSTR('hi\u1234ho', 3, 1)"306} "\u1234"307do_test func2-2.4.2 {308  execsql "SELECT SUBSTR('hi\u1234ho', 3, 2)"309} "\u1234h"310 311do_test func2-2.5.0 {312  execsql "SELECT SUBSTR('\u1234', 0, 0)"313} {{}}314do_test func2-2.5.1 {315  execsql "SELECT SUBSTR('\u1234', 0, 1)"316} {{}}317do_test func2-2.5.2 {318  execsql "SELECT SUBSTR('\u1234', 0, 2)"319} "\u1234"320do_test func2-2.5.3 {321  execsql "SELECT SUBSTR('\u1234', 0, 3)"322} "\u1234"323 324do_test func2-2.6.0 {325  execsql "SELECT SUBSTR('\u1234', 1, 0)"326} {{}}327do_test func2-2.6.1 {328  execsql "SELECT SUBSTR('\u1234', 1, 1)"329} "\u1234"330do_test func2-2.6.2 {331  execsql "SELECT SUBSTR('\u1234', 1, 2)"332} "\u1234"333do_test func2-2.6.3 {334  execsql "SELECT SUBSTR('\u1234', 1, 3)"335} "\u1234"336 337do_test func2-2.7.0 {338  execsql "SELECT SUBSTR('\u1234', 2, 0)"339} {{}}340do_test func2-2.7.1 {341  execsql "SELECT SUBSTR('\u1234', 2, 1)"342} {{}}343do_test func2-2.7.2 {344  execsql "SELECT SUBSTR('\u1234', 2, 2)"345} {{}}346 347do_test func2-2.8.0 {348  execsql "SELECT SUBSTR('\u1234', -1, 0)"349} {{}}350do_test func2-2.8.1 {351  execsql "SELECT SUBSTR('\u1234', -1, 1)"352} "\u1234"353do_test func2-2.8.2 {354  execsql "SELECT SUBSTR('\u1234', -1, 2)"355} "\u1234"356do_test func2-2.8.3 {357  execsql "SELECT SUBSTR('\u1234', -1, 3)"358} "\u1234"359 360} ;# End \u1234!=u1234361 362#----------------------------------------------------------------------------363# Test cases func2-3.*: substr implementation (blob)364#365 366ifcapable {!bloblit} {367  finish_test368  return369}370 371do_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)377do_test func2-3.1.2 {378  catchsql {SELECT SUBSTR()}379} {1 {wrong number of arguments to function SUBSTR()}}380do_test func2-3.1.3 {381  catchsql {SELECT SUBSTR(x'1234')}382} {1 {wrong number of arguments to function SUBSTR()}}383do_test func2-3.1.4 {384  catchsql {SELECT SUBSTR(x'1234', 1,1,1)}385} {1 {wrong number of arguments to function SUBSTR()}}386 387do_test func2-3.2.0 {388  set blob [execsql "SELECT SUBSTR(x'1234', 0, 0)"]389  bin_to_hex [lindex $blob 0]390} {}391do_test func2-3.2.1 {392  set blob [execsql "SELECT SUBSTR(x'1234', 0, 1)"]393  bin_to_hex [lindex $blob 0]394} {}395do_test func2-3.2.2 {396  set blob [execsql "SELECT SUBSTR(x'1234', 0, 2)"]397  bin_to_hex [lindex $blob 0]398} "12"399do_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 404do_test func2-3.3.0 {405  set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]406  bin_to_hex [lindex $blob 0]407} {}408do_test func2-3.3.1 {409  set blob [execsql "SELECT SUBSTR(x'1234', 1, 1)"]410  bin_to_hex [lindex $blob 0]411} "12"412do_test func2-3.3.2 {413  set blob [execsql "SELECT SUBSTR(x'1234', 1, 2)"]414  bin_to_hex [lindex $blob 0]415} "1234"416do_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 421do_test func2-3.4.0 {422  set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]423  bin_to_hex [lindex $blob 0]424} {}425do_test func2-3.4.1 {426  set blob [execsql "SELECT SUBSTR(x'1234', -1, 1)"]427  bin_to_hex [lindex $blob 0]428} "34"429do_test func2-3.4.2 {430  set blob [execsql "SELECT SUBSTR(x'1234', -1, 2)"]431  bin_to_hex [lindex $blob 0]432} "34"433do_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 438do_test func2-3.5.0 {439  set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]440  bin_to_hex [lindex $blob 0]441} {}442do_test func2-3.5.1 {443  set blob [execsql "SELECT SUBSTR(x'1234', -2, 1)"]444  bin_to_hex [lindex $blob 0]445} "12"446do_test func2-3.5.2 {447  set blob [execsql "SELECT SUBSTR(x'1234', -2, 2)"]448  bin_to_hex [lindex $blob 0]449} "1234"450do_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 455do_test func2-3.6.0 {456  set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]457  bin_to_hex [lindex $blob 0]458} {}459do_test func2-3.6.1 {460  set blob [execsql "SELECT SUBSTR(x'1234', -1, -1)"]461  bin_to_hex [lindex $blob 0]462} "12"463do_test func2-3.6.2 {464  set blob [execsql "SELECT SUBSTR(x'1234', -1, -2)"]465  bin_to_hex [lindex $blob 0]466} "12"467do_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 472do_test func2-3.7.0 {473  set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]474  bin_to_hex [lindex $blob 0]475} {}476do_test func2-3.7.1 {477  set blob [execsql "SELECT SUBSTR(x'1234', -2, -1)"]478  bin_to_hex [lindex $blob 0]479} {}480do_test func2-3.7.2 {481  set blob [execsql "SELECT SUBSTR(x'1234', -2, -2)"]482  bin_to_hex [lindex $blob 0]483} {}484 485do_test func2-3.8.0 {486  set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]487  bin_to_hex [lindex $blob 0]488} {}489do_test func2-3.8.1 {490  set blob [execsql "SELECT SUBSTR(x'1234', 1, -1)"]491  bin_to_hex [lindex $blob 0]492} {}493do_test func2-3.8.2 {494  set blob [execsql "SELECT SUBSTR(x'1234', 1, -2)"]495  bin_to_hex [lindex $blob 0]496} {}497 498do_test func2-3.9.0 {499  set blob [execsql "SELECT SUBSTR(x'1234', 2, 0)"]500  bin_to_hex [lindex $blob 0]501} {}502do_test func2-3.9.1 {503  set blob [execsql "SELECT SUBSTR(x'1234', 2, -1)"]504  bin_to_hex [lindex $blob 0]505} "12"506do_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#-------------------------------------------------------------------------512# At one point this was extremely slow to compile.513#514do_test func2-3.10 {515  set tm [time {516    execsql {517      SELECT '' IN (zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(518      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(519      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(520      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(521      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(522      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(523      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(524      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(525      zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(zerobloB(1)526      )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))527  }528  }]529 530  set tm [lindex $tm 0]531  expr $tm<2000000532} {1}533 534finish_test535