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  }