1 module fuzzyd_test; 2 3 import std.stdio; 4 import std.array; 5 import std.algorithm; 6 import std.algorithm.comparison : equal; 7 8 import fuzzyd.core; 9 10 private FuzzyResult[] prepare(string s) 11 { 12 string[] source = [ 13 "cd Documents", "curl localhost/foo", "cp bar ../foo", 14 "rm -rf Downloads", "vi ~/Documents" 15 ]; 16 return fuzzy(source)(s); 17 } 18 19 @("Matches in expected order") 20 unittest 21 { 22 auto result = prepare("docts").map!(x => x.value); 23 const expected = [ 24 "cd Documents", "vi ~/Documents", "rm -rf Downloads", 25 "curl localhost/foo", "cp bar ../foo" 26 ]; 27 assert(equal(expected, result)); 28 } 29 30 @("Matches indexes") 31 unittest 32 { 33 const result = prepare("docts")[0].matches.array(); 34 const expected = [0, 1, 3, 4, 5, 10, 11]; 35 assert(equal(expected, result)); 36 } 37 38 @("Start bonus is applied") 39 unittest 40 { 41 const result = prepare("curl")[0].score; 42 assert(59 == result); 43 } 44 45 @("Case bonus is applied") 46 unittest 47 { 48 const r1 = prepare("docts")[0].score; 49 const r2 = prepare("Docts")[0].score; 50 assert(r1 == 26); 51 assert(r2 == 33); 52 } 53 54 @("Word boundary bonus is applied") 55 unittest 56 { 57 const result = prepare("cd")[0].score; 58 assert(13 == result); 59 }