Skip to content

Instantly share code, notes, and snippets.

@JobLeonard
Last active December 3, 2023 04:10
Show Gist options
  • Save JobLeonard/4291cf2eba283340bde478dedd492473 to your computer and use it in GitHub Desktop.
Save JobLeonard/4291cf2eba283340bde478dedd492473 to your computer and use it in GitHub Desktop.
regex vs string scan
{"title":"regex vs string scan","initialization":"\"use strict\";\nlet input = `foo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop!\nfoo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop! Foo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop!\n[hello world] Hello World! [hllo]\nfoo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop! Foo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop! foo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop! Foo bar baz bop boop bippity-bop bong. Bing bong bong bong ding dong blooooop!\n[weeep\nfoo bar baz bop [hello worlt] boop\nfoo bar baz bop boop\nfoo bar baz bop boop`;\n\n// increase by a factor of 1024\nfor (let i = 0; i < 10; i++) {\n input += input;\n}\n\n// Regex test\nfunction testRegex(input){\n\t\"use strict\";\n let thing = 0;\n\n let lines = input.split(/\\r\\n|\\r|\\n/);\n \tlet m;\n lines.forEach(function(line){\n // look for [xxxxx] yyyyyy\n if(m = /^\\[(.*)](.*)$/.exec(line)){\n if(m[1] === 'hello world'){\n thing++;\n }\n }\n });\n}\n\n// String scan test\nfunction testStringScan(input){\n \t\"use strict\";\n var thing = 0;\n\n var in_bracket = false;\n var bracket_start = 0;\n var i;\n for(i=0; i<input.length; i++){\n if(input[i] === '['){\n in_bracket = true;\n bracket_start = i + 1;\n continue;\n }\n if(in_bracket && input[i] === ']'){\n if(input.substring(bracket_start, i) === 'hello world'){\n thing++;\n }\n in_bracket = false;\n continue;\n }\n if(input[i] === '\\n'){\n in_bracket = false;\n }\n }\n}\n\n// charCodeAt string scan\nfunction testStringScanCC(input){\n\t\"use strict\";\n let thing = 0 | 0;\n\n let in_bracket = false;\n let bracket_start = 0 | 0;\n let cc = 0 | 0;\n const hw_match = Uint8Array.from('hello world'.split(\"\").map(char => char.charCodeAt(0)));\n\n for(let i=0; i<input.length; i++){\n cc = input.charCodeAt(i);\n if (in_bracket) {\n if (cc === 10) {//if(input[i] === '\\n'){\n in_bracket = false;\n continue;\n }\n if (cc === 93) {// if(input[i] === ']' && in_bracket){\n in_bracket = false;\n if (i - bracket_start !== hw_match.lenth) continue;\n for (let j = 0; j < hw_match.length; j++) {\n if (input.charCodeAt(bracket_start + j) !== hw_match[j]) continue;\n }\n thing++;\n continue;\n in_bracket = false;\n continue;\n }\n } else {\n if (cc === 91) {// if(input[i] === '['){\n in_bracket = true;\n bracket_start = i + 1;\n continue;\n }\n }\n }\n}\n","setup":"// runs before each test","tests":[{"name":"regex","code":"testRegex(input);","results":{"aborted":false,"count":75,"cycles":2,"hz":802.9057541579052,"stats":{"moe":0.00001482782805566901,"rme":1.1905348467560672,"sem":0.000007565218395749495,"deviation":0.000056612910586028413,"mean":0.0012454761904761899,"variance":3.2050216450216477e-9,"numSamples":56},"times":{"cycle":0.09341071428571424,"elapsed":5.809,"period":0.0012454761904761899,"timeStamp":1701576530570}},"platforms":{"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0":{"aborted":false,"count":75,"cycles":2,"hz":802.9057541579052,"stats":{"moe":0.00001482782805566901,"rme":1.1905348467560672,"sem":0.000007565218395749495,"deviation":0.000056612910586028413,"mean":0.0012454761904761899,"variance":3.2050216450216477e-9,"numSamples":56},"times":{"cycle":0.09341071428571424,"elapsed":5.809,"period":0.0012454761904761899,"timeStamp":1701576530570}}}},{"name":"string scan","code":"testStringScan(input)","results":{"aborted":false,"count":27,"cycles":3,"hz":329.0404755165581,"stats":{"moe":0.00002541397523223616,"rme":0.8362226495181017,"sem":0.00001296631389399804,"deviation":0.00010209685769824932,"mean":0.003039139784946237,"variance":1.042376835185657e-8,"numSamples":62},"times":{"cycle":0.0820567741935484,"elapsed":6.05,"period":0.003039139784946237,"timeStamp":1701576536384}},"platforms":{"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0":{"aborted":false,"count":27,"cycles":3,"hz":329.0404755165581,"stats":{"moe":0.00002541397523223616,"rme":0.8362226495181017,"sem":0.00001296631389399804,"deviation":0.00010209685769824932,"mean":0.003039139784946237,"variance":1.042376835185657e-8,"numSamples":62},"times":{"cycle":0.0820567741935484,"elapsed":6.05,"period":0.003039139784946237,"timeStamp":1701576536384}}}},{"name":"string scan, charCodeAt version","code":"testStringScanCC(input)","results":{"aborted":false,"count":55,"cycles":3,"hz":665.4061144418077,"stats":{"moe":0.000036419162664000675,"rme":2.423353351947685,"sem":0.000018581205440816672,"deviation":0.00014512385377209337,"mean":0.0015028416155130682,"variance":2.1060932933663944e-8,"numSamples":61},"times":{"cycle":0.08265628885321875,"elapsed":5.825,"period":0.0015028416155130682,"timeStamp":1701576542440}},"platforms":{"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0":{"aborted":false,"count":55,"cycles":3,"hz":665.4061144418077,"stats":{"moe":0.000036419162664000675,"rme":2.423353351947685,"sem":0.000018581205440816672,"deviation":0.00014512385377209337,"mean":0.0015028416155130682,"variance":2.1060932933663944e-8,"numSamples":61},"times":{"cycle":0.08265628885321875,"elapsed":5.825,"period":0.0015028416155130682,"timeStamp":1701576542440}}}}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment