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 }