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 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 auto expected = [ 24 "cd Documents", "vi ~/Documents", "curl localhost/foo", 25 "rm -rf Downloads", "cp bar ../foo" 26 ]; 27 assert(equal( expected, result)); 28 } 29 30 @("Matches indexes") 31 unittest 32 { 33 auto result = prepare( "docts")[0].matches.array(); 34 auto expected = [0, 1, 3, 4, 5, 10, 11]; 35 assert(equal( expected, result)); 36 } 37 38 @("Start bonus is applied") 39 unittest 40 { 41 auto result = prepare( "curl")[0].score; 42 assert(61 == result); 43 } 44 45 @("Case bonus is applied") 46 unittest 47 { 48 auto r1 = prepare( "docts")[0].score; 49 auto r2 = prepare( "Docts")[0].score; 50 assert(r1 == 27); 51 assert(r2 == 34); 52 } 53 54 @("Word boundary bonus is applied") 55 unittest 56 { 57 auto result = prepare( "cd")[0].score; 58 assert(14 == result); 59 }