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