Guest User

Untitled

a guest
Nov 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. import streams
  2. import unicode
  3. import nimbench
  4.  
  5. iterator runes*(s: Stream): Rune =
  6. ## reads runes from a stream. Raises `EIO` if
  7. ## an error occurred.
  8. var buff = newString(4)
  9. var rune: Rune
  10. var n = 0
  11. while true:
  12. let l = peekData(s, addr(buff[0]), buff.len)
  13. if l == 0:
  14. break
  15. if l != buff.len:
  16. buff.setLen(l)
  17. n = 0
  18. fastRuneAt(buff, n, rune, true)
  19. discard readData(s, addr(buff[0]), n)
  20. yield rune
  21.  
  22. proc myhugestringfunc(): string =
  23. result = ""
  24. for i in 0 .. 1000000:
  25. result.add("aΞͺβ’Άπ―’”")
  26. if i mod 10000 == 0:
  27. result.add("\n")
  28.  
  29. const myhugestring = myhugestringfunc()
  30.  
  31. bench(fpOps1, m):
  32. var myhugestream = newStringStream(myhugestring)
  33. for r in runes(myhugestring):
  34. memoryClobber()
  35. myhugestream.close()
  36.  
  37. bench(fpOps2, m):
  38. var myhugestream = newStringStream(myhugestring)
  39. while not myhugestream.atEnd:
  40. discard myhugestream.readLine()
  41. memoryClobber()
  42. myhugestream.close()
  43.  
  44. bench(fpOps3, m):
  45. var myhugestream = newStringStream(myhugestring)
  46. while not myhugestream.atEnd:
  47. discard myhugestream.readChar()
  48. memoryClobber()
  49. myhugestream.close()
  50.  
  51. bench(fpOps4, m):
  52. var myhugestream = newStringStream(myhugestring)
  53. while not myhugestream.atEnd:
  54. discard myhugestream.readStr(64000)
  55. memoryClobber()
  56. myhugestream.close()
  57.  
  58. bench(dummy, m):
  59. for i in 0..<m:
  60. memoryClobber()
  61.  
  62. runBenchmarks()
  63.  
  64. discard """
  65. ============================================================================
  66. GlobalBenchmark relative time/iter iters/s
  67. ============================================================================
  68. GlobalBenchmark 334.15ps 2.99G
  69. ============================================================================
  70. some.nim relative time/iter iters/s
  71. ============================================================================
  72. fpOps1 8.98ms 111.34
  73. fpOps2 92.30ms 10.83
  74. fpOps3 98.71ms 10.13
  75. fpOps4 3.34ms 299.37
  76. dummy 0.00fs inf
  77. """
Add Comment
Please, Sign In to add comment