github.com/djsousuo/go-edlib@v0.0.0-20220828171509-38f81c213d18/tests/benchmarks/benchmarks_test.go (about) 1 package benchmarks 2 3 import ( 4 "fmt" 5 "testing" 6 7 edlib "github.com/djsousuo/go-edlib" 8 ) 9 10 type pair struct { 11 first string 12 second string 13 } 14 15 var testingInputPairs []pair 16 17 func init() { 18 testingInputPairs = []pair{ 19 {"sameLengthStringInput", "asmePenhtgTsrnigIpnut"}, 20 {"pneumonoultramicroscopicsilicovolcanoconiosis", "nneumonkultramicrrscoipcsilicocolvanocpnisis"}, 21 {"こにんちこにんちこにんちこにんち", "こんにちはこんにちはこんにちはこんにちはこんにちは"}, 22 {"I love horror movies", "Lights out is a horror movie"}, 23 } 24 } 25 26 func BenchmarkEdlibAlgorithms(tb *testing.B) { 27 for _, pair := range testingInputPairs { 28 fmt.Printf("\nBegin benchmark between %s/%s : \n", pair.first, pair.second) 29 benchLevensthein(pair, tb) 30 benchLCS(pair, tb) 31 benchHamming(pair, tb) 32 benchDamereauLevenshtein(pair, tb) 33 benchOSADamereauLevenshtein(pair, tb) 34 benchJaro(pair, tb) 35 benchJaroWinkler(pair, tb) 36 benchCosine(pair, tb) 37 } 38 } 39 40 func benchLevensthein(testPair pair, tb *testing.B) { 41 tb.ResetTimer() 42 tb.Run(fmt.Sprintf("Levenshtein_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 43 for i := 0; i < tb.N; i++ { 44 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Levenshtein) 45 } 46 }) 47 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Levenshtein) 48 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 49 } 50 51 func benchLCS(testPair pair, tb *testing.B) { 52 tb.ResetTimer() 53 tb.Run(fmt.Sprintf("LCS_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 54 for i := 0; i < tb.N; i++ { 55 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Lcs) 56 } 57 }) 58 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Lcs) 59 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 60 } 61 62 func benchHamming(testPair pair, tb *testing.B) { 63 tb.ResetTimer() 64 tb.Run(fmt.Sprintf("Hamming_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 65 for i := 0; i < tb.N; i++ { 66 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Hamming) 67 } 68 }) 69 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Hamming) 70 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 71 } 72 73 func benchDamereauLevenshtein(testPair pair, tb *testing.B) { 74 tb.ResetTimer() 75 tb.Run(fmt.Sprintf("DamerauLevenshtein_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 76 for i := 0; i < tb.N; i++ { 77 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.DamerauLevenshtein) 78 } 79 }) 80 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.DamerauLevenshtein) 81 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 82 } 83 84 func benchOSADamereauLevenshtein(testPair pair, tb *testing.B) { 85 tb.ResetTimer() 86 tb.Run(fmt.Sprintf("OSADamerauLevenshtein_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 87 for i := 0; i < tb.N; i++ { 88 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.OSADamerauLevenshtein) 89 } 90 }) 91 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.OSADamerauLevenshtein) 92 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 93 } 94 95 func benchJaro(testPair pair, tb *testing.B) { 96 tb.ResetTimer() 97 tb.Run(fmt.Sprintf("Jaro_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 98 for i := 0; i < tb.N; i++ { 99 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Jaro) 100 } 101 }) 102 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Jaro) 103 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 104 } 105 106 func benchJaroWinkler(testPair pair, tb *testing.B) { 107 tb.ResetTimer() 108 tb.Run(fmt.Sprintf("JaroWinkler_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 109 for i := 0; i < tb.N; i++ { 110 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.JaroWinkler) 111 } 112 }) 113 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.JaroWinkler) 114 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 115 } 116 117 func benchCosine(testPair pair, tb *testing.B) { 118 tb.ResetTimer() 119 tb.Run(fmt.Sprintf("Cosine_%s/%s", testPair.first, testPair.second), func(tb *testing.B) { 120 for i := 0; i < tb.N; i++ { 121 edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Cosine) 122 } 123 }) 124 sim, err := edlib.StringsSimilarity(testPair.first, testPair.second, edlib.Cosine) 125 fmt.Printf("Sim: %f, Err: %s \n\n", sim, err) 126 }