summaryrefslogblamecommitdiff
path: root/stringmetric-core/source/benchmark/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetricBenchmark.scala
blob: b3da154a67f5c259c36bd5b8b3521a5beefcfaba (plain) (tree)
1
2
3
4
5
6
7
8
9
                                               

                               
                                                                     



                                                                 
                                                
 









                                                    
                                                               






                                                                            







                                                                       
                                                      


                                                                    
                                                


                                                                       
                                                      


                                                                    
                                                


         
                                                                                              
                                                      
 
package com.rockymadden.stringmetric.similarity

import com.google.caliper.Param
import com.rockymadden.stringmetric.{CaliperBenchmark, CaliperRunner}
import scala.annotation.tailrec
import scala.util.Random

final class JaroWinklerMetricBenchmark extends CaliperBenchmark {
	import JaroWinklerMetricBenchmark.Metric

	@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.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) {
		Metric.compare(charArray1, charArray2)
	}

	def timeCompareWithDifferentStrings(reps: Int) = run(reps) {
		Metric.compare(string1, string2)
	}

	def timeCompareWithIdenticalCharArrays(reps: Int) = run(reps) {
		Metric.compare(charArray1, charArray1)
	}

	def timeCompareWithIdenticalStrings(reps: Int) = run(reps) {
		Metric.compare(string1, string1)
	}
}

object JaroWinklerMetricBenchmark extends CaliperRunner(classOf[JaroWinklerMetricBenchmark]) {
	private final val Metric = JaroWinklerMetric()
}