You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
CoffeeScript
59 lines
1.2 KiB
CoffeeScript
7 years ago
|
Benchmark = require 'benchmark'
|
||
|
Trie = require 'unicode-trie'
|
||
|
classes = require './src/classes'
|
||
|
|
||
|
global.trie = new Trie require './src/class_trie'
|
||
|
|
||
|
characterClasses = classes.characterClasses
|
||
|
global.getCharClass = (char) ->
|
||
|
low = 0
|
||
|
high = characterClasses.length
|
||
|
|
||
|
while low < high
|
||
|
mid = (low + high) >>> 1
|
||
|
range = characterClasses[mid]
|
||
|
|
||
|
if char > range.end
|
||
|
low = mid + 1
|
||
|
|
||
|
else if char < range.start
|
||
|
high = mid
|
||
|
|
||
|
else
|
||
|
return range.class
|
||
|
|
||
|
return classes.XX
|
||
|
|
||
|
suite = new Benchmark.Suite
|
||
|
suite.add 'binary search', ->
|
||
|
for i in [0...0x10fffd] by 1
|
||
|
getCharClass i
|
||
|
|
||
|
return
|
||
|
|
||
|
suite.add 'trie', ->
|
||
|
for i in [0...0x10fffd] by 1
|
||
|
trie.get i
|
||
|
|
||
|
return
|
||
|
|
||
|
suite.on 'cycle', (e) ->
|
||
|
console.log String e.target
|
||
|
|
||
|
suite.on 'error', (e) ->
|
||
|
console.log e.target.error.stack
|
||
|
process.exit()
|
||
|
|
||
|
suite.on 'complete', ->
|
||
|
benches = @filter 'successful'
|
||
|
fastest = @filter 'fastest'
|
||
|
|
||
|
for bench in benches
|
||
|
percent = Math.round((1 - bench.hz / fastest[0].hz) * 100)
|
||
|
if bench is fastest[0]
|
||
|
console.log bench.name, 'is the fastest'
|
||
|
else
|
||
|
console.log "#{bench.name} is #{percent}% slower"
|
||
|
|
||
|
suite.run()
|