Created
August 26, 2019 17:30
-
-
Save nitely/c7409d06f78cf0eefd16e74a9e049ad1 to your computer and use it in GitHub Desktop.
bench_unicodedb_ascii.nim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import nimbench | |
import unicodedb/properties | |
import unicodedb/types | |
import unicodedb/widths | |
import unicodedb/scripts | |
import unicodedb/decompositions | |
import unicode | |
template benchCode( | |
theProc: untyped, | |
data: untyped | |
) {.dirty.} = | |
var a = theProc(Rune(0)) | |
for k in 0 ..< m: | |
for v in data: | |
a = theProc(v) | |
doNotOptimizeAway(a) | |
type | |
dataType = array[100_000, Rune] | |
proc genUniData(): dataType = | |
let foo = [ | |
"Ϊ".runeAt(0), | |
"Ⓐ".runeAt(0), | |
"弢".runeAt(0), | |
] | |
for i in 0 .. result.len-1: | |
result[i] = foo[i mod foo.len] | |
const uniData = genUniData() | |
proc genUniAsciiData(): dataType = | |
let foo = [ | |
"a".runeAt(0), | |
"Z".runeAt(0), | |
"Ϊ".runeAt(0), | |
"Ⓐ".runeAt(0), | |
"弢".runeAt(0), | |
] | |
for i in 0 .. result.len-1: | |
result[i] = foo[i mod foo.len] | |
const uniAsciiData = genUniAsciiData() | |
proc genAsciiData(): dataType = | |
let foo = [ | |
Rune(0), | |
Rune(50), | |
Rune(127) | |
] | |
for i in 0 .. result.len-1: | |
result[i] = foo[i mod foo.len] | |
const asciiData = genAsciiData() | |
bench(uniUnicodeTypes, m): | |
benchCode(unicodeTypes, uniData) | |
benchRelative(uniAsciiUnicodeTypes, m): | |
benchCode(unicodeTypes, uniAsciiData) | |
benchRelative(asciiUnicodeTypes, m): | |
benchCode(unicodeTypes, asciiData) | |
bench(uniProperties, m): | |
benchCode(properties, uniData) | |
benchRelative(uniProperties, m): | |
benchCode(properties, uniAsciiData) | |
benchRelative(asciiProperties, m): | |
benchCode(properties, asciiData) | |
bench(uniUnicodeWidth, m): | |
benchCode(unicodeWidth, uniData) | |
benchRelative(uniUnicodeWidth, m): | |
benchCode(unicodeWidth, uniAsciiData) | |
benchRelative(asciiUnicodeWidth, m): | |
benchCode(unicodeWidth, asciiData) | |
bench(uniUnicodeScript, m): | |
benchCode(unicodeScript, uniData) | |
benchRelative(uniUnicodeScript, m): | |
benchCode(unicodeScript, uniAsciiData) | |
benchRelative(asciiUnicodeScript, m): | |
benchCode(unicodeScript, asciiData) | |
bench(uniDecomposition, m): | |
var a: Rune | |
for k in 0 ..< m: | |
for v in uniData: | |
for c in v.decomposition(): | |
a = c | |
doNotOptimizeAway(a) | |
benchRelative(uniAsciiDecomposition, m): | |
var a: Rune | |
for k in 0 ..< m: | |
for v in uniAsciiData: | |
for c in v.decomposition(): | |
a = c | |
doNotOptimizeAway(a) | |
benchRelative(asciiDecomposition, m): | |
var a: Rune | |
for k in 0 ..< m: | |
for v in asciiData: | |
for c in v.decomposition(): | |
a = c | |
doNotOptimizeAway(a) | |
bench(justIter, m): | |
for k in 0 ..< m: | |
memoryClobber() | |
for v in asciiData: | |
memoryClobber() | |
bench(noOp, m): | |
for i in 0 ..< m: | |
memoryClobber() | |
runBenchmarks() | |
#[ | |
============================================================================ | |
GlobalBenchmark relative time/iter iters/s | |
============================================================================ | |
GlobalBenchmark 334.15ps 2.99G | |
============================================================================ | |
/home/esteban/AtomProjects/crap/crap.nim relative time/iter iters/s | |
============================================================================ | |
uniUnicodeTypes 167.99us 5.95K | |
uniAsciiUnicodeTypes 89.61% 187.46us 5.33K | |
asciiUnicodeTypes 100.50% 167.15us 5.98K | |
uniProperties 234.41us 4.27K | |
uniProperties 92.28% 254.01us 3.94K | |
asciiProperties 99.99% 234.42us 4.27K | |
uniUnicodeWidth 233.99us 4.27K | |
uniUnicodeWidth 97.24% 240.63us 4.16K | |
asciiUnicodeWidth 100.01% 233.97us 4.27K | |
uniUnicodeScript 167.61us 5.97K | |
uniUnicodeScript 83.57% 200.56us 4.99K | |
asciiUnicodeScript 83.57% 200.56us 4.99K | |
uniDecomposition 345.68us 2.89K | |
uniAsciiDecomposition 156.33% 221.12us 4.52K | |
asciiDecomposition 775.40% 44.58us 22.43K | |
justIter 33.43us 29.92K | |
noOp 0.00fs inf | |
]# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment