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 @("Result is empty if no provided db was empty")
39 unittest
40 {
41     string[] source = [];
42     const result = fuzzy(source)("f");
43     assert(result.empty);
44 }
45 
46 @("Score is normalized")
47 unittest
48 {
49     string[] source = [
50         "cd Documents", "curl localhost/foo", "rm -rf Downloads", "vi ~/Documents"
51     ];
52 
53     auto fzy = fuzzy(source);
54 
55     assert(fzy("docts").map!(x => x.score).filter!(s => s < 0 || s > 1).empty);
56 }
57 
58 @("Unicode support")
59 unittest
60 {
61     string[] source = ["férias"];
62 
63     const result = fuzzy(source)("fé")[0].matches.array;
64     assert(equal([0, 1], result));
65 }