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 }