summaryrefslogtreecommitdiff
path: root/core/src/benchmark/scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/benchmark/scala')
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/CaliperBenchmark.scala7
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/CaliperRunner.scala7
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithmBenchmark.scala26
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetricBenchmark.scala49
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithmBenchmark.scala26
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisMetricBenchmark.scala49
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithmBenchmark.scala26
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetricBenchmark.scala49
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithmBenchmark.scala26
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetricBenchmark.scala49
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithmBenchmark.scala26
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexMetricBenchmark.scala49
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/HammingMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaccardMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/NGramMetricBenchmark.scala51
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/OverlapMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetricBenchmark.scala48
-rwxr-xr-xcore/src/benchmark/scala/com/rockymadden/stringmetric/tokenize/NGramTokenizerBenchmark.scala29
23 files changed, 901 insertions, 0 deletions
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperBenchmark.scala
new file mode 100755
index 0000000..55a6238
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperBenchmark.scala
@@ -0,0 +1,7 @@
+package com.rockymadden.stringmetric
+
+import com.google.caliper.SimpleBenchmark
+
+trait CaliperBenchmark extends SimpleBenchmark {
+ def run(reps: Int)(code: => Unit) = (0 until reps).foreach(i => code)
+} \ No newline at end of file
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperRunner.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperRunner.scala
new file mode 100755
index 0000000..4474a8d
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/CaliperRunner.scala
@@ -0,0 +1,7 @@
+package com.rockymadden.stringmetric
+
+import com.google.caliper.{Benchmark, Runner}
+
+abstract class CaliperRunner(private[this] val suite: java.lang.Class[_ <: Benchmark]) {
+ def main(args: Array[String]): Unit = Runner.main(suite, args)
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithmBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithmBenchmark.scala
new file mode 100755
index 0000000..fe5c80d
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithmBenchmark.scala
@@ -0,0 +1,26 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class MetaphoneAlgorithmBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.filter(_ > '9').take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ MetaphoneAlgorithm.compute(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ MetaphoneAlgorithm.compute(string)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetricBenchmark.scala
new file mode 100755
index 0000000..c9b59fc
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetricBenchmark.scala
@@ -0,0 +1,49 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.annotation.tailrec
+import scala.util.Random
+
+final class MetaphoneMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.filter(_ > '9').take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ MetaphoneMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ MetaphoneMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ MetaphoneMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ MetaphoneMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithmBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithmBenchmark.scala
new file mode 100755
index 0000000..ac04cd7
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithmBenchmark.scala
@@ -0,0 +1,26 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class NysiisAlgorithmBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.filter(_ > '9').take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ NysiisAlgorithm.compute(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ NysiisAlgorithm.compute(string)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisMetricBenchmark.scala
new file mode 100755
index 0000000..f975d29
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/NysiisMetricBenchmark.scala
@@ -0,0 +1,49 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.annotation.tailrec
+import scala.util.Random
+
+final class NysiisMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.filter(_ > '9').take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ NysiisMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ NysiisMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ NysiisMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ NysiisMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithmBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithmBenchmark.scala
new file mode 100755
index 0000000..4141b37
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithmBenchmark.scala
@@ -0,0 +1,26 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class RefinedNysiisAlgorithmBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.filter(_ > '9').take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ RefinedNysiisAlgorithm.compute(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ RefinedNysiisAlgorithm.compute(string)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetricBenchmark.scala
new file mode 100755
index 0000000..d927f18
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetricBenchmark.scala
@@ -0,0 +1,49 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.annotation.tailrec
+import scala.util.Random
+
+final class RefinedNysiisMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.filter(_ > '9').take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ RefinedNysiisMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ RefinedNysiisMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ RefinedNysiisMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ RefinedNysiisMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithmBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithmBenchmark.scala
new file mode 100755
index 0000000..ec8d53c
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithmBenchmark.scala
@@ -0,0 +1,26 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class RefinedSoundexAlgorithmBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.filter(_ > '9').take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ RefinedSoundexAlgorithm.compute(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ RefinedSoundexAlgorithm.compute(string)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetricBenchmark.scala
new file mode 100755
index 0000000..6c52e8d
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetricBenchmark.scala
@@ -0,0 +1,49 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.annotation.tailrec
+import scala.util.Random
+
+final class RefinedSoundexMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.filter(_ > '9').take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ RefinedSoundexMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ RefinedSoundexMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ RefinedSoundexMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ RefinedSoundexMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithmBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithmBenchmark.scala
new file mode 100755
index 0000000..9dc67de
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithmBenchmark.scala
@@ -0,0 +1,26 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class SoundexAlgorithmBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.filter(_ > '9').take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ SoundexAlgorithm.compute(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ SoundexAlgorithm.compute(string)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexMetricBenchmark.scala
new file mode 100755
index 0000000..7707019
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/phonetic/SoundexMetricBenchmark.scala
@@ -0,0 +1,49 @@
+package com.rockymadden.stringmetric.phonetic
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.annotation.tailrec
+import scala.util.Random
+
+final class SoundexMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.filter(_ > '9').take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ SoundexMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ SoundexMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ SoundexMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ SoundexMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetricBenchmark.scala
new file mode 100755
index 0000000..5df27fb
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class DiceSorensenMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ DiceSorensenMetric(2).compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ DiceSorensenMetric(2).compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ DiceSorensenMetric(2).compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ DiceSorensenMetric(2).compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/HammingMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/HammingMetricBenchmark.scala
new file mode 100755
index 0000000..3d04074
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/HammingMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class HammingMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ HammingMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ HammingMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ HammingMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ HammingMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaccardMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaccardMetricBenchmark.scala
new file mode 100755
index 0000000..ddeef7a
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaccardMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class JaccardMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ JaccardMetric(2).compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ JaccardMetric(2).compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ JaccardMetric(2).compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ JaccardMetric(2).compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroMetricBenchmark.scala
new file mode 100755
index 0000000..47baa6d
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class JaroMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ JaroMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ JaroMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ JaroMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ JaroMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetricBenchmark.scala
new file mode 100755
index 0000000..c11a01c
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class JaroWinklerMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ JaroWinklerMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ JaroWinklerMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ JaroWinklerMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ JaroWinklerMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetricBenchmark.scala
new file mode 100755
index 0000000..a8460e2
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class LevenshteinMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ LevenshteinMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ LevenshteinMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ LevenshteinMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ LevenshteinMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/NGramMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/NGramMetricBenchmark.scala
new file mode 100755
index 0000000..8ba1bb0
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/NGramMetricBenchmark.scala
@@ -0,0 +1,51 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class NGramMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ @Param(Array("2", "3"))
+ var n: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ NGramMetric(n).compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ NGramMetric(n).compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ NGramMetric(n).compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ NGramMetric(n).compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/OverlapMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/OverlapMetricBenchmark.scala
new file mode 100755
index 0000000..89207f2
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/OverlapMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class OverlapMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ OverlapMetric(2).compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ OverlapMetric(2).compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ OverlapMetric(2).compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ OverlapMetric(2).compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetricBenchmark.scala
new file mode 100755
index 0000000..86196ab
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class RatcliffObershelpMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ RatcliffObershelpMetric.compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ RatcliffObershelpMetric.compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ RatcliffObershelpMetric.compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ RatcliffObershelpMetric.compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetricBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetricBenchmark.scala
new file mode 100755
index 0000000..837ce01
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetricBenchmark.scala
@@ -0,0 +1,48 @@
+package com.rockymadden.stringmetric.similarity
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class WeightedLevenshteinMetricBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ var string1: String = _
+ var charArray1: Array[Char] = _
+ var string2: String = _
+ var charArray2: Array[Char] = _
+
+ override protected def setUp() {
+ @annotation.tailrec
+ def random(l: Int, ps: String = null): String =
+ if (l == 0) ""
+ else {
+ val s = Random.alphanumeric.take(l).mkString
+
+ if (ps == null || s != ps) s
+ else random(l, ps)
+ }
+
+ string1 = random(length)
+ string2 = random(length, string1)
+ charArray1 = string1.toCharArray
+ charArray2 = string2.toCharArray
+ }
+
+ def timeCompareWithDifferentCharArrays(reps: Int) = run(reps) {
+ WeightedLevenshteinMetric(1, 1, 1).compare(charArray1, charArray2)
+ }
+
+ def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
+ WeightedLevenshteinMetric(1, 1, 1).compare(string1, string2)
+ }
+
+ def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
+ WeightedLevenshteinMetric(1, 1, 1).compare(charArray1, charArray1)
+ }
+
+ def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
+ WeightedLevenshteinMetric(1, 1, 1).compare(string1, string1)
+ }
+}
diff --git a/core/src/benchmark/scala/com/rockymadden/stringmetric/tokenize/NGramTokenizerBenchmark.scala b/core/src/benchmark/scala/com/rockymadden/stringmetric/tokenize/NGramTokenizerBenchmark.scala
new file mode 100755
index 0000000..d66bf88
--- /dev/null
+++ b/core/src/benchmark/scala/com/rockymadden/stringmetric/tokenize/NGramTokenizerBenchmark.scala
@@ -0,0 +1,29 @@
+package com.rockymadden.stringmetric.tokenize
+
+import com.google.caliper.Param
+import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
+import scala.util.Random
+
+final class NGramTokenizerBenchmark extends CaliperBenchmark {
+ @Param(Array("0", "1", "2", "4", "8", "16"))
+ var length: Int = _
+
+ @Param(Array("2", "3"))
+ var n: Int = _
+
+ var string: String = _
+ var charArray: Array[Char] = _
+
+ override protected def setUp() {
+ string = Random.alphanumeric.take(length).mkString
+ charArray = string.toCharArray
+ }
+
+ def timeComputeWithCharArray(reps: Int) = run(reps) {
+ NGramTokenizer(n).tokenize(charArray)
+ }
+
+ def timeComputeWithString(reps: Int) = run(reps) {
+ NGramTokenizer(n).tokenize(string)
+ }
+}