Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import streams
- import unicode
- import nimbench
- iterator runes*(s: Stream): Rune =
- ## reads runes from a stream. Raises `EIO` if
- ## an error occurred.
- var buff = newString(4)
- var rune: Rune
- var n = 0
- while true:
- let l = peekData(s, addr(buff[0]), buff.len)
- if l == 0:
- break
- if l != buff.len:
- buff.setLen(l)
- n = 0
- fastRuneAt(buff, n, rune, true)
- discard readData(s, addr(buff[0]), n)
- yield rune
- proc myhugestringfunc(): string =
- result = ""
- for i in 0 .. 1000000:
- result.add("aΞͺβΆπ―’")
- if i mod 10000 == 0:
- result.add("\n")
- const myhugestring = myhugestringfunc()
- bench(fpOps1, m):
- var myhugestream = newStringStream(myhugestring)
- for r in runes(myhugestring):
- memoryClobber()
- myhugestream.close()
- bench(fpOps2, m):
- var myhugestream = newStringStream(myhugestring)
- while not myhugestream.atEnd:
- discard myhugestream.readLine()
- memoryClobber()
- myhugestream.close()
- bench(fpOps3, m):
- var myhugestream = newStringStream(myhugestring)
- while not myhugestream.atEnd:
- discard myhugestream.readChar()
- memoryClobber()
- myhugestream.close()
- bench(fpOps4, m):
- var myhugestream = newStringStream(myhugestring)
- while not myhugestream.atEnd:
- discard myhugestream.readStr(64000)
- memoryClobber()
- myhugestream.close()
- bench(dummy, m):
- for i in 0..<m:
- memoryClobber()
- runBenchmarks()
- discard """
- ============================================================================
- GlobalBenchmark relative time/iter iters/s
- ============================================================================
- GlobalBenchmark 334.15ps 2.99G
- ============================================================================
- some.nim relative time/iter iters/s
- ============================================================================
- fpOps1 8.98ms 111.34
- fpOps2 92.30ms 10.83
- fpOps3 98.71ms 10.13
- fpOps4 3.34ms 299.37
- dummy 0.00fs inf
- """
Add Comment
Please, Sign In to add comment