1 module miao..string.test; 2 3 version(unittest) { 4 private auto runTpl(alias fnTpl)() 5 { 6 assert(fnTpl([1, 2], [0, 1, 2]) == -1); 7 assert(fnTpl([0, 1, 2], [1, 2]) == 1); 8 9 immutable x = [1, 2, 3]; 10 assert(fnTpl([1, 2, 3, 4], x) == 0); 11 12 const(int)[] y = [1, 2, 3]; 13 assert(fnTpl([1, 2, 3, 4], y) == 0); 14 } 15 16 private auto runCreate(alias T)() 17 { 18 auto a = T!(string)(""); 19 const b = T!(string)(""); 20 immutable c = T!(string)(""); 21 } 22 23 private auto runTest(alias fn) () 24 { 25 const haystack1 = "NOW AN FOWE\220ER ANNMAN THE ANPANMANEND"; 26 const needle1 = "ANPANMAN"; 27 const needle2 = "MAN THE"; 28 const needle3 = "WE\220ER"; 29 const needle4 = "NOW "; 30 const needle5 = "NEND"; 31 const needle6 = "NOT FOUND"; 32 const needle7 = "NOT FO\340ND"; 33 34 const haystack2 = "ABC ABCDAB ABCDABCDABDE"; 35 const needle11 = "ABCDABD"; 36 37 const haystack3 = "abra abracad abracadabra"; 38 const needle12 = "abracadabra"; 39 const needle13 = ""; 40 41 const haystack4 = ""; 42 43 import std.conv : to; 44 45 assert(fn("", "") == -1); 46 assert(fn("abc", "") == -1); 47 assert(fn("", " ") == -1); 48 49 assert(fn("abc", "a") == 0); 50 assert(fn("abcd", "bc") == 1, fn("abcd", "bc").to!string); 51 52 assert(fn(haystack1, needle1) == 26); 53 assert(fn(haystack1, needle2) == 18); 54 assert(fn(haystack1, needle3) == 9); 55 assert(fn(haystack1, needle4) == 0); 56 assert(fn(haystack1, needle5) == 33); 57 assert(fn(haystack1, needle6) == -1); 58 assert(fn(haystack1, needle7) == -1); 59 60 assert(fn(needle1, haystack1) == -1); 61 62 assert(fn(haystack1, haystack1) == 0, fn(haystack1, haystack1).to!string); 63 assert(fn(haystack2, haystack2) == 0); 64 65 assert(fn(haystack2, needle11) == 15, fn(haystack2, needle11).to!string); 66 assert(fn(haystack3, needle12) == 13); 67 68 assert(fn(haystack1, needle13) == -1); 69 assert(fn(haystack4, needle1) == -1); 70 71 assert(fn("GCATCGCAGAGAGTATACAGTACG", "GCAGAGAG") == 5); 72 } 73 74 auto testAll(alias Type, alias Searcher)() 75 { 76 import std.stdio; 77 78 writeln("Test ", Type.stringof); 79 80 runTest!Searcher(); 81 runCreate!Type(); 82 runTpl!Searcher(); 83 writeln("\tTest Passed!\n"); 84 } 85 }