123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- # 2012 July 12
- #
- # 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.
- #
- #***********************************************************************
- #
- set testdir [file dirname $argv0]
- source $testdir/tester.tcl
- set testprefix spellfix
- ifcapable !vtab { finish_test ; return }
- load_static_extension db spellfix nextchar
- set vocab {
- rabbi rabbit rabbits rabble rabid rabies raccoon raccoons race raced racer
- racers races racetrack racial racially racing rack racked racket racketeer
- racketeering racketeers rackets racking racks radar radars radial radially
- radian radiance radiant radiantly radiate radiated radiates radiating radiation
- radiations radiator radiators radical radically radicals radices radii radio
- radioactive radioastronomy radioed radiography radioing radiology radios radish
- radishes radium radius radix radon raft rafter rafters rafts rag rage raged
- rages ragged raggedly raggedness raging rags ragweed raid raided raider raiders
- raiding raids rail railed railer railers railing railroad railroaded railroader
- railroaders railroading railroads rails railway railways raiment rain rainbow
- raincoat raincoats raindrop raindrops rained rainfall rainier rainiest raining
- rains rainstorm rainy raise raised raiser raisers raises raisin raising rake
- raked rakes raking rallied rallies rally rallying ram ramble rambler rambles
- rambling ramblings ramification ramifications ramp rampage rampant rampart
- ramps ramrod rams ran ranch ranched rancher ranchers ranches ranching rancid
- random randomization randomize randomized randomizes randomly randomness randy
- rang range ranged rangeland ranger rangers ranges ranging rangy rank ranked
- ranker rankers rankest ranking rankings rankle rankly rankness ranks ransack
- ransacked ransacking ransacks ransom ransomer ransoming ransoms rant ranted
- ranter ranters ranting rants rap rapacious rape raped raper rapes rapid
- rapidity rapidly rapids rapier raping rapport rapprochement raps rapt raptly
- rapture raptures rapturous rare rarely rareness rarer rarest rarity rascal
- rascally rascals rash rasher rashly rashness rasp raspberry rasped rasping
- rasps raster rat rate rated rater raters rates rather ratification ratified
- ratifies ratify ratifying rating ratings ratio ration rational rationale
- rationales rationalities rationality rationalization rationalizations
- rationalize rationalized rationalizes rationalizing rationally rationals
- rationing rations ratios rats rattle rattled rattler rattlers rattles
- rattlesnake rattlesnakes rattling raucous ravage ravaged ravager ravagers
- ravages ravaging rave raved raven ravening ravenous ravenously ravens raves
- ravine ravines raving ravings raw rawer rawest rawly rawness ray rays raze
- razor razors re reabbreviate reabbreviated reabbreviates reabbreviating reach
- reachability reachable reachably reached reacher reaches reaching reacquired
- react reacted reacting reaction reactionaries reactionary reactions reactivate
- reactivated reactivates reactivating reactivation reactive reactively
- reactivity reactor reactors reacts read readability readable reader readers
- readied readier readies readiest readily readiness reading readings readjusted
- readout readouts reads ready readying real realest realign realigned realigning
- realigns realism realist realistic realistically realists realities reality
- }
- do_test 1.1 {
- execsql { CREATE VIRTUAL TABLE t1 USING spellfix1 }
- foreach word $vocab {
- execsql { INSERT INTO t1(word) VALUES($word) }
- }
- } {}
- foreach {tn word res} {
- 1 raxpi* {rasping 5 rasped 5 ragweed 5 raspberry 6 rasp 4}
- 2 ril* {rail 4 railed 4 railer 4 railers 4 railing 4}
- 3 rilis* {realism 6 realist 6 realistic 6 realistically 6 realists 6}
- 4 reail* {real 3 realest 3 realign 3 realigned 3 realigning 3}
- 5 ras* {rascal 3 rascally 3 rascals 3 rash 3 rasher 3}
- 6 realistss* {realists 8 realigns 8 realistic 9 realistically 9 realest 7}
- 7 realistss {realists 8 realist 7 realigns 8 realistic 9 realest 7}
- 8 rllation* {realities 9 reality 7 rallied 7 railed 4}
- 9 renstom* {rainstorm 8 ransom 6 ransomer 6 ransoming 6 ransoms 6}
- } {
- do_execsql_test 1.2.$tn {
- SELECT word, matchlen FROM t1 WHERE word MATCH $word
- ORDER BY score, word LIMIT 5
- } $res
- }
- # Tests of the next_char function.
- #
- do_test 1.10 {
- db eval {
- CREATE TABLE vocab(w TEXT PRIMARY KEY);
- INSERT INTO vocab SELECT word FROM t1;
- }
- } {}
- do_execsql_test 1.11 {
- SELECT next_char('re','vocab','w');
- } {a}
- do_execsql_test 1.11sub {
- SELECT next_char('re','(SELECT w AS x FROM vocab)','x');
- } {a}
- do_execsql_test 1.12 {
- SELECT next_char('r','vocab','w');
- } {ae}
- do_execsql_test 1.13 {
- SELECT next_char('','vocab','w');
- } {r}
- do_test 1.14 {
- catchsql {SELECT next_char('','xyzzy','a')}
- } {1 {no such table: xyzzy}}
- do_execsql_test 1.20 {
- CREATE TABLE vocab2(w TEXT);
- CREATE INDEX vocab2w ON vocab2(w COLLATE nocase);
- INSERT INTO vocab2 VALUES('abc'), ('ABD'), ('aBe'), ('AbF');
- SELECT next_char('ab', 'vocab2', 'w', null, 'nocase');
- } {cDeF}
- do_execsql_test 1.21 {
- SELECT next_char('ab','vocab2','w',null,null);
- } {c}
- do_execsql_test 1.22 {
- SELECT next_char('AB','vocab2','w',null,'NOCASE');
- } {cDeF}
- do_execsql_test 1.23 {
- SELECT next_char('ab','vocab2','w',null,'binary');
- } {c}
- do_execsql_test 2.1 {
- CREATE VIRTUAL TABLE t2 USING spellfix1;
- INSERT INTO t2 (word, soundslike) VALUES('school', 'skuul');
- INSERT INTO t2 (word, soundslike) VALUES('psalm', 'sarm');
- SELECT word, matchlen FROM t2 WHERE word MATCH 'sar*' LIMIT 5;
- } {psalm 4}
- do_execsql_test 2.2 {
- SELECT word, matchlen FROM t2 WHERE word MATCH 'skol*' LIMIT 5;
- } {school 6}
- set vocab {
- kangaroo kanji kappa karate keel keeled keeling keels keen keener keenest
- keenly keenness keep keeper keepers keeping keeps ken kennel kennels kept
- kerchief kerchiefs kern kernel kernels kerosene ketchup kettle
- kettles key keyboard keyboards keyed keyhole keying keynote keypad keypads keys
- keystroke keystrokes keyword keywords kick kicked kicker kickers kicking
- kickoff kicks kid kidded kiddie kidding kidnap kidnapper kidnappers kidnapping
- kidnappings kidnaps kidney kidneys kids kill killed killer killers killing
- killingly killings killjoy kills kilobit kilobits kiloblock kilobyte kilobytes
- kilogram kilograms kilohertz kilohm kilojoule kilometer kilometers kiloton
- kilovolt kilowatt kiloword kimono kin kind kinder kindergarten kindest
- kindhearted kindle kindled kindles kindling kindly kindness kindred kinds
- kinetic king kingdom kingdoms kingly kingpin kings kink kinky kinship kinsman
- kiosk kiss kissed kisser kissers kisses kissing kit kitchen kitchenette
- kitchens kite kited kites kiting kits kitten kittenish kittens kitty klaxon
- kludge kludges klystron knack knapsack knapsacks knave knaves knead kneads knee
- kneecap kneed kneeing kneel kneeled kneeling kneels knees knell knells knelt
- knew knife knifed knifes knifing knight knighted knighthood knighting knightly
- knights knit knits knives knob knobs knock knockdown knocked knocker knockers
- knocking knockout knocks knoll knolls knot knots knotted knotting know knowable
- knower knowhow knowing knowingly knowledge knowledgeable known knows knuckle
- knuckled knuckles koala kosher kudo
- }
- do_execsql_test 3.1 {
- CREATE TABLE costs(iLang, cFrom, cTo, iCost);
- INSERT INTO costs VALUES(0, 'a', 'e', 1);
- INSERT INTO costs VALUES(0, 'e', 'i', 1);
- INSERT INTO costs VALUES(0, 'i', 'o', 1);
- INSERT INTO costs VALUES(0, 'o', 'u', 1);
- INSERT INTO costs VALUES(0, 'u', 'a', 1);
- CREATE VIRTUAL TABLE t3 USING spellfix1(edit_cost_table=costs);
- }
- do_test 3.2 {
- foreach w $vocab {
- execsql { INSERT INTO t3(word) VALUES($w) }
- }
- } {}
- foreach {tn word res} {
- 1 kos* {kosher 3 kiosk 4 kudo 2 kiss 3 kissed 3}
- 2 kellj* {killjoy 5 kill 4 killed 4 killer 4 killers 4}
- 3 kellj {kill 4 kills 5 killjoy 7 keel 4 killed 6}
- } {
- do_execsql_test 3.2.$tn {
- SELECT word, matchlen FROM t3 WHERE word MATCH $word
- ORDER BY score, word LIMIT 5
- } $res
- }
- do_execsql_test 4.0 {
- INSERT INTO t3(command) VALUES('edit_cost_table=NULL');
- }
- foreach {tn word res} {
- 1 kosher {kosher 0 kisser 51 kissers 76 kissed 126 kisses 126}
- 2 kellj {keels 60 killjoy 68 kills 80 keel 120 kill 125}
- 3 kashar {kosher 80 kisser 91 kissers 116 kissed 166 kisses 166}
- } {
- do_execsql_test 4.1.$tn {
- SELECT word, distance FROM t3 WHERE word MATCH $word
- ORDER BY score, word LIMIT 5
- } $res
- }
- do_execsql_test 5.0 {
- CREATE TABLE costs2(iLang, cFrom, cTo, iCost);
- INSERT INTO costs2 VALUES(0, 'a', 'o', 1);
- INSERT INTO costs2 VALUES(0, 'e', 'o', 4);
- INSERT INTO costs2 VALUES(0, 'i', 'o', 8);
- INSERT INTO costs2 VALUES(0, 'u', 'o', 16);
- INSERT INTO t3(command) VALUES('edit_cost_table="costs2"');
- }
- foreach {tn word res} {
- 1 kasher {kosher 1}
- 2 kesher {kosher 4}
- 3 kisher {kosher 8}
- 4 kosher {kosher 0}
- 5 kusher {kosher 16}
- } {
- do_execsql_test 5.1.$tn {
- SELECT word, distance FROM t3 WHERE word MATCH $word
- ORDER BY score, word LIMIT 1
- } $res
- }
- finish_test
|