Skip to content

Instantly share code, notes, and snippets.

@thomastay
Last active August 13, 2020 03:37
Show Gist options
  • Save thomastay/ba3f2ea4b1e25fccab13d50fdb7db730 to your computer and use it in GitHub Desktop.
Save thomastay/ba3f2ea4b1e25fccab13d50fdb7db730 to your computer and use it in GitHub Desktop.
quick and dirty bench for mariomka bench
import os
import std/[times, monotimes, stats]
from regex import nil
from std/re import nil
proc measureNimRegex(data, pattern: string) =
var r: RunningStat
var matches: int
let patternRe = regex.re(pattern)
for i in 1..3:
matches = 0
let start = getMonoTime()
for _ in regex.findAll(data, patternRe):
inc matches
r.push float((getMonoTime() - start).inMilliseconds)
echo "nim-regex: ", r.mean, " - " , matches
proc measureRe(data, pattern: string) =
var r: RunningStat
var matches: int
let patternRe = re.re(pattern)
for i in 1..3:
matches = 0
let start = getMonoTime()
for _ in re.findAll(data, patternRe):
inc matches
r.push float((getMonoTime() - start).inMilliseconds)
echo "std/re: ", r.mean, " - " , matches
proc main() =
when declared(paramStr):
if paramCount() != 1:
echo "Usage: ./benchmark [filename]"
return
let file = open(paramStr(1))
defer: close(file)
let data = file.readAll()
let emailStr = r"[\w\.+-]+@[\w\.-]+\.[\w\.-]+"
let URIStr = r"[\w]+://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"
let IPStr = r"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])"
# Email
measureRe(data, emailStr)
# URI
measureRe(data, URIStr)
# IP
measureRe(data, IPStr)
# Email
measureNimRegex(data, emailStr)
# URI
measureNimRegex(data, URIStr)
# IP
measureNimRegex(data, IPStr)
when isMainModule:
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment