14e6e5cefSdrh# 2018-02-14 24e6e5cefSdrh# 34e6e5cefSdrh# The author disclaims copyright to this source code. In place of 44e6e5cefSdrh# a legal notice, here is a blessing: 54e6e5cefSdrh# 64e6e5cefSdrh# May you do good and not evil. 74e6e5cefSdrh# May you find forgiveness for yourself and forgive others. 84e6e5cefSdrh# May you share freely, never taking more than you give. 94e6e5cefSdrh# 104e6e5cefSdrh#*********************************************************************** 114e6e5cefSdrh# 124e6e5cefSdrh# Test cases for the editdist3() function in the spellfix extension. 134e6e5cefSdrh# 144e6e5cefSdrh 154e6e5cefSdrhset testdir [file dirname $argv0] 164e6e5cefSdrhsource $testdir/tester.tcl 174e6e5cefSdrhset testprefix spellfix4 184e6e5cefSdrh 194e6e5cefSdrhifcapable !vtab { finish_test ; return } 204e6e5cefSdrh 214e6e5cefSdrhload_static_extension db spellfix 224e6e5cefSdrh 234e6e5cefSdrhdo_execsql_test 100 { 244e6e5cefSdrh CREATE TABLE cost1(iLang, cFrom, cTo, iCost); 254e6e5cefSdrh INSERT INTO cost1 VALUES 264e6e5cefSdrh (0, '', '?', 97), 274e6e5cefSdrh (0, '?', '', 98), 284e6e5cefSdrh (0, '?', '?', 99), 294e6e5cefSdrh (0, 'm', 'n', 50), 304e6e5cefSdrh (0, 'n', 'm', 50) 314e6e5cefSdrh ; 324e6e5cefSdrh SELECT editdist3('cost1'); 334e6e5cefSdrh SELECT editdist3('anchor','amchor'); 344e6e5cefSdrh} {{} 50} 354e6e5cefSdrhdo_execsql_test 110 { 364e6e5cefSdrh SELECT editdist3('anchor','anchoxr'); 374e6e5cefSdrh} {97} 384e6e5cefSdrhdo_execsql_test 111 { 394e6e5cefSdrh SELECT editdist3('anchor','xanchor'); 404e6e5cefSdrh} {97} 414e6e5cefSdrhdo_execsql_test 112 { 424e6e5cefSdrh SELECT editdist3('anchor','anchorx'); 434e6e5cefSdrh} {97} 444e6e5cefSdrhdo_execsql_test 120 { 454e6e5cefSdrh SELECT editdist3('anchor','anchr'); 464e6e5cefSdrh} {98} 474e6e5cefSdrhdo_execsql_test 121 { 484e6e5cefSdrh SELECT editdist3('anchor','ancho'); 494e6e5cefSdrh} {98} 504e6e5cefSdrhdo_execsql_test 122 { 514e6e5cefSdrh SELECT editdist3('anchor','nchor'); 524e6e5cefSdrh} {98} 534e6e5cefSdrhdo_execsql_test 130 { 544e6e5cefSdrh SELECT editdist3('anchor','anchur'); 554e6e5cefSdrh} {99} 564e6e5cefSdrhdo_execsql_test 131 { 574e6e5cefSdrh SELECT editdist3('anchor','onchor'); 584e6e5cefSdrh} {99} 594e6e5cefSdrhdo_execsql_test 132 { 604e6e5cefSdrh SELECT editdist3('anchor','anchot'); 614e6e5cefSdrh} {99} 624e6e5cefSdrhdo_execsql_test 140 { 634e6e5cefSdrh SELECT editdist3('anchor','omchor'); 644e6e5cefSdrh} {149} 654e6e5cefSdrh 664e6e5cefSdrhdo_execsql_test 200 { 674e6e5cefSdrh INSERT INTO cost1 VALUES 684e6e5cefSdrh (0, 'a', 'ä', 5), 694e6e5cefSdrh (0, 'ss', 'ß', 8) 704e6e5cefSdrh ; 714e6e5cefSdrh SELECT editdist3('cost1'); 724e6e5cefSdrh SELECT editdist3('strasse','straße'); 734e6e5cefSdrh SELECT editdist3('straße','strasse'); 744e6e5cefSdrh} {{} 8 196} 754e6e5cefSdrhdo_execsql_test 210 { 764e6e5cefSdrh SELECT editdist3('baume','bäume'); 774e6e5cefSdrh} {5} 784e6e5cefSdrhdo_execsql_test 220 { 794e6e5cefSdrh SELECT editdist3('baum','bäume'); 804e6e5cefSdrh} {102} 814e6e5cefSdrhdo_execsql_test 230 { 824e6e5cefSdrh INSERT INTO cost1 VALUES 834e6e5cefSdrh (0, 'ä', 'a', 5), 844e6e5cefSdrh (0, 'ß', 'ss', 8) 854e6e5cefSdrh ; 864e6e5cefSdrh SELECT editdist3('cost1'); 874e6e5cefSdrh SELECT editdist3('strasse','straße'); 884e6e5cefSdrh SELECT editdist3('straße','strasse'); 894e6e5cefSdrh} {{} 8 8} 904e6e5cefSdrh 914e6e5cefSdrhdo_execsql_test 300 { 924e6e5cefSdrh DELETE FROM cost1; 934e6e5cefSdrh INSERT INTO cost1 VALUES 944e6e5cefSdrh (0, '', '?', 97), 954e6e5cefSdrh (0, '?', '', 98), 964e6e5cefSdrh (0, '?', '?', 99), 974e6e5cefSdrh (0, 'a', 'e', 50), 984e6e5cefSdrh (0, 'a', 'i', 70), 994e6e5cefSdrh (0, 'a', 'o', 75), 100*f4bc6c43Sdrh (0, 'a', 'u', 81), 1014e6e5cefSdrh (0, 'e', 'a', 50), 102*f4bc6c43Sdrh (0, 'e', 'i', 52), 103*f4bc6c43Sdrh (0, 'e', 'o', 72), 104*f4bc6c43Sdrh (0, 'e', 'u', 82), 1054e6e5cefSdrh (0, 'i', 'a', 70), 106*f4bc6c43Sdrh (0, 'i', 'e', 52), 1074e6e5cefSdrh (0, 'i', 'o', 75), 108*f4bc6c43Sdrh (0, 'i', 'u', 83), 1094e6e5cefSdrh (0, 'o', 'a', 75), 110*f4bc6c43Sdrh (0, 'o', 'e', 72), 1114e6e5cefSdrh (0, 'o', 'i', 75), 1124e6e5cefSdrh (0, 'o', 'u', 40), 113*f4bc6c43Sdrh (0, 'u', 'a', 81), 114*f4bc6c43Sdrh (0, 'u', 'e', 82), 115*f4bc6c43Sdrh (0, 'u', 'i', 83), 1164e6e5cefSdrh (0, 'u', 'o', 40), 1174e6e5cefSdrh (0, 'm', 'n', 45), 1184e6e5cefSdrh (0, 'n', 'm', 45) 1194e6e5cefSdrh ; 1204e6e5cefSdrh CREATE TABLE words(x TEXT); 1214e6e5cefSdrh INSERT INTO words VALUES 1224e6e5cefSdrh ('abraham'), 1234e6e5cefSdrh ('action'), 1244e6e5cefSdrh ('africa'), 1254e6e5cefSdrh ('aladdin'), 1264e6e5cefSdrh ('alert'), 1274e6e5cefSdrh ('alien'), 1284e6e5cefSdrh ('amazon'), 1294e6e5cefSdrh ('analog'), 1304e6e5cefSdrh ('animal'), 1314e6e5cefSdrh ('apollo'), 1324e6e5cefSdrh ('archive'), 1334e6e5cefSdrh ('arnold'), 1344e6e5cefSdrh ('aspirin'), 1354e6e5cefSdrh ('august'), 1364e6e5cefSdrh ('average'), 1374e6e5cefSdrh ('bahama'), 1384e6e5cefSdrh ('bambino'), 1394e6e5cefSdrh ('barcode'), 1404e6e5cefSdrh ('bazooka'), 1414e6e5cefSdrh ('belgium'), 1424e6e5cefSdrh ('between'), 1434e6e5cefSdrh ('biology'), 1444e6e5cefSdrh ('blonde'), 1454e6e5cefSdrh ('border'), 1464e6e5cefSdrh ('brave'), 1474e6e5cefSdrh ('british'), 1484e6e5cefSdrh ('bucket'), 1494e6e5cefSdrh ('button'), 1504e6e5cefSdrh ('caesar'), 1514e6e5cefSdrh ('camilla'), 1524e6e5cefSdrh ('cannon'), 1534e6e5cefSdrh ('caramel'), 1544e6e5cefSdrh ('carpet'), 1554e6e5cefSdrh ('catalog'), 1564e6e5cefSdrh ('century'), 1574e6e5cefSdrh ('chaos'), 1584e6e5cefSdrh ('chef'), 1594e6e5cefSdrh ('china'), 1604e6e5cefSdrh ('circus'), 1614e6e5cefSdrh ('classic'), 1624e6e5cefSdrh ('clinic'), 1634e6e5cefSdrh ('coconut'), 1644e6e5cefSdrh ('combine'), 1654e6e5cefSdrh ('complex'), 1664e6e5cefSdrh ('congo'), 1674e6e5cefSdrh ('convert'), 1684e6e5cefSdrh ('cosmos'), 1694e6e5cefSdrh ('crack'), 1704e6e5cefSdrh ('crown'), 1714e6e5cefSdrh ('cyclone'), 1724e6e5cefSdrh ('deal'), 1734e6e5cefSdrh ('delete'), 1744e6e5cefSdrh ('denver'), 1754e6e5cefSdrh ('detail'), 1764e6e5cefSdrh ('diana'), 1774e6e5cefSdrh ('direct'), 1784e6e5cefSdrh ('dolby'), 1794e6e5cefSdrh ('double'), 1804e6e5cefSdrh ('dublin'), 1814e6e5cefSdrh ('echo'), 1824e6e5cefSdrh ('edition'), 1834e6e5cefSdrh ('electra'), 1844e6e5cefSdrh ('emotion'), 1854e6e5cefSdrh ('enjoy'), 1864e6e5cefSdrh ('escape'), 1874e6e5cefSdrh ('everest'), 1884e6e5cefSdrh ('exile'), 1894e6e5cefSdrh ('express'), 1904e6e5cefSdrh ('family'), 1914e6e5cefSdrh ('ferrari'), 1924e6e5cefSdrh ('filter'), 1934e6e5cefSdrh ('fish'), 1944e6e5cefSdrh ('florida'), 1954e6e5cefSdrh ('ford'), 1964e6e5cefSdrh ('forum'), 1974e6e5cefSdrh ('frank'), 1984e6e5cefSdrh ('frozen'), 1994e6e5cefSdrh ('gallery'), 2004e6e5cefSdrh ('garlic'), 2014e6e5cefSdrh ('geneva'), 2024e6e5cefSdrh ('gibson'), 2034e6e5cefSdrh ('gloria'), 2044e6e5cefSdrh ('gordon'), 2054e6e5cefSdrh ('gravity'), 2064e6e5cefSdrh ('ground'), 2074e6e5cefSdrh ('habitat'), 2084e6e5cefSdrh ('harlem'), 2094e6e5cefSdrh ('hazard'), 2104e6e5cefSdrh ('herbert'), 2114e6e5cefSdrh ('hobby'), 2124e6e5cefSdrh ('house'), 2134e6e5cefSdrh ('icon'), 2144e6e5cefSdrh ('immune'), 2154e6e5cefSdrh ('india'), 2164e6e5cefSdrh ('inside'), 2174e6e5cefSdrh ('isotope'), 2184e6e5cefSdrh ('jamaica'), 2194e6e5cefSdrh ('jazz'), 2204e6e5cefSdrh ('joker'), 2214e6e5cefSdrh ('juliet'), 2224e6e5cefSdrh ('jupiter'), 2234e6e5cefSdrh ('kevin'), 2244e6e5cefSdrh ('korea'), 2254e6e5cefSdrh ('latin'), 2264e6e5cefSdrh ('legal'), 2274e6e5cefSdrh ('lexicon'), 2284e6e5cefSdrh ('limbo'), 2294e6e5cefSdrh ('lithium'), 2304e6e5cefSdrh ('logo'), 2314e6e5cefSdrh ('lucas'), 2324e6e5cefSdrh ('madrid'), 2334e6e5cefSdrh ('major'), 2344e6e5cefSdrh ('manual'), 2354e6e5cefSdrh ('mars'), 2364e6e5cefSdrh ('maximum'), 2374e6e5cefSdrh ('medical'), 2384e6e5cefSdrh ('mental'), 2394e6e5cefSdrh ('meter'), 2404e6e5cefSdrh ('miguel'), 2414e6e5cefSdrh ('mimosa'), 2424e6e5cefSdrh ('miranda'), 2434e6e5cefSdrh ('modern'), 2444e6e5cefSdrh ('money'), 2454e6e5cefSdrh ('morgan'), 2464e6e5cefSdrh ('motor'), 2474e6e5cefSdrh ('mystic'), 2484e6e5cefSdrh ('nebula'), 2494e6e5cefSdrh ('network'), 2504e6e5cefSdrh ('nice'), 2514e6e5cefSdrh ('nitro'), 2524e6e5cefSdrh ('norway'), 2534e6e5cefSdrh ('nurse'), 2544e6e5cefSdrh ('octavia'), 2554e6e5cefSdrh ('olympic'), 2564e6e5cefSdrh ('opus'), 2574e6e5cefSdrh ('orient'), 2584e6e5cefSdrh ('othello'), 2594e6e5cefSdrh ('pacific'), 2604e6e5cefSdrh ('panama'), 2614e6e5cefSdrh ('paper'), 2624e6e5cefSdrh ('parking'), 2634e6e5cefSdrh ('pasta'), 2644e6e5cefSdrh ('paul'), 2654e6e5cefSdrh ('people'), 2664e6e5cefSdrh ('permit'), 2674e6e5cefSdrh ('phrase'), 2684e6e5cefSdrh ('pilgrim'), 2694e6e5cefSdrh ('planet'), 2704e6e5cefSdrh ('pocket'), 2714e6e5cefSdrh ('police'), 2724e6e5cefSdrh ('popular'), 2734e6e5cefSdrh ('prefer'), 2744e6e5cefSdrh ('presto'), 2754e6e5cefSdrh ('private'), 2764e6e5cefSdrh ('project'), 2774e6e5cefSdrh ('proxy'), 2784e6e5cefSdrh ('python'), 2794e6e5cefSdrh ('quota'), 2804e6e5cefSdrh ('rainbow'), 2814e6e5cefSdrh ('raymond'), 2824e6e5cefSdrh ('region'), 2834e6e5cefSdrh ('report'), 2844e6e5cefSdrh ('reward'), 2854e6e5cefSdrh ('risk'), 2864e6e5cefSdrh ('robot'), 2874e6e5cefSdrh ('rose'), 2884e6e5cefSdrh ('russian'), 2894e6e5cefSdrh ('sailor'), 2904e6e5cefSdrh ('salt'), 2914e6e5cefSdrh ('saturn'), 2924e6e5cefSdrh ('scorpio'), 2934e6e5cefSdrh ('second'), 2944e6e5cefSdrh ('seminar'), 2954e6e5cefSdrh ('shadow'), 2964e6e5cefSdrh ('shave'), 2974e6e5cefSdrh ('shock'), 2984e6e5cefSdrh ('silence'), 2994e6e5cefSdrh ('sinatra'), 3004e6e5cefSdrh ('sleep'), 3014e6e5cefSdrh ('social'), 3024e6e5cefSdrh ('sonata'), 3034e6e5cefSdrh ('spain'), 3044e6e5cefSdrh ('sphere'), 3054e6e5cefSdrh ('spray'), 3064e6e5cefSdrh ('state'), 3074e6e5cefSdrh ('stone'), 3084e6e5cefSdrh ('strong'), 3094e6e5cefSdrh ('sugar'), 3104e6e5cefSdrh ('supreme'), 3114e6e5cefSdrh ('swing'), 3124e6e5cefSdrh ('talent'), 3134e6e5cefSdrh ('telecom'), 3144e6e5cefSdrh ('thermos'), 3154e6e5cefSdrh ('tina'), 3164e6e5cefSdrh ('tommy'), 3174e6e5cefSdrh ('torso'), 3184e6e5cefSdrh ('trade'), 3194e6e5cefSdrh ('trick'), 3204e6e5cefSdrh ('tropic'), 3214e6e5cefSdrh ('turtle'), 3224e6e5cefSdrh ('uniform'), 3234e6e5cefSdrh ('user'), 3244e6e5cefSdrh ('vega'), 3254e6e5cefSdrh ('vertigo'), 3264e6e5cefSdrh ('village'), 3274e6e5cefSdrh ('visible'), 3284e6e5cefSdrh ('vocal'), 3294e6e5cefSdrh ('voyage'), 3304e6e5cefSdrh ('weekend'), 3314e6e5cefSdrh ('winter'), 3324e6e5cefSdrh ('year'), 3334e6e5cefSdrh ('zipper') 3344e6e5cefSdrh ; 3354e6e5cefSdrh SELECT editdist3('cost1'); 3364e6e5cefSdrh} {{}} 3374e6e5cefSdrhdo_execsql_test 310 { 3384e6e5cefSdrh SELECT editdist3(a.x,b.x), a.x, b.x 3394e6e5cefSdrh FROM words a, words b 3404e6e5cefSdrh WHERE a.x<b.x 3414e6e5cefSdrh ORDER BY 1, 2 3424e6e5cefSdrh LIMIT 20 343*f4bc6c43Sdrh} {139 bucket pocket 144 meter motor 149 manual mental 169 crack trick 173 sinatra sonata 174 edition emotion 174 major motor 174 risk rose 174 state stone 194 deal detail 196 alert talent 196 analog catalog 196 deal legal 196 ford forum 196 risk trick 196 stone strong 197 china tina 197 congo logo 197 diana tina 197 florida gloria} 344*f4bc6c43Sdrhdo_execsql_test 320 { 345*f4bc6c43Sdrh SELECT md5sum(ed||'/'||sx||'/'||sy||',') FROM ( 346*f4bc6c43Sdrh SELECT editdist3(a.x,b.x) AS ed, a.x AS sx, b.x AS sy 347*f4bc6c43Sdrh FROM words a, words b 348*f4bc6c43Sdrh WHERE a.x<b.x 349*f4bc6c43Sdrh ORDER BY 1, 2 350*f4bc6c43Sdrh ) 351*f4bc6c43Sdrh} {69d0a31872203a775e19325ea98cd053} 3524e6e5cefSdrh 3534e6e5cefSdrhfinish_test 354