Skip to content

Instantly share code, notes, and snippets.

@ivanovv
Last active November 24, 2016 21:51
Show Gist options
  • Select an option

  • Save ivanovv/84cbd8fa942dcb61a2ca1136f287f4a9 to your computer and use it in GitHub Desktop.

Select an option

Save ivanovv/84cbd8fa942dcb61a2ca1136f287f4a9 to your computer and use it in GitHub Desktop.
defmodule Benchmark do
def measure(func) do
func
|> :timer.tc
|> elem(0)
|> Kernel./(1_000_000)
end
end
Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _-> String.contains?("iphone", "4") end end)
Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _-> String.contains?("Mozilla%2F5.0%20\(Linux%3B%20Android%204.1.2%3B%20XT907%20Build%2F9.8.1Q-94-1\)%20AppleWebKit%2F537.36%20\(KHTML%2C%20like%20Gecko\)%20Chrome%2F34.0.1847.114%20Mobile%20Safari%2F537.36", "4") end end)
def test1():
value = "iphone"
result = value.find("4") > -1
def test2():
value = "Mozilla%2F5.0%20\(Linux%3B%20Android%204.1.2%3B%20XT907%20Build%2F9.8.1Q-94-1\)%20AppleWebKit%2F537.36%20\(KHTML%2C%20like%20Gecko\)%20Chrome%2F34.0.1847.114%20Mobile%20Safari%2F537.36"
result = value.find("4") > -1
if __name__ == '__main__':
import timeit
print(timeit.timeit("test1()", setup="from __main__ import test1"))
print(timeit.timeit("test2()", setup="from __main__ import test2"))

###Python (2.7):

vics-mba:~/code/uml_hd (master|124451m) $ python -v
...
Python 2.7.12 (default, Jun 29 2016, 14:04:27) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin

vics-mba:~/code/uml_hd (master|124451m) $ python test.py
0.443104028702
0.516538858414

vics-mba:~/code/uml_hd (master|124451m) $ python test.py
0.42776799202
0.492296934128

vics-mba:~/code/uml_hd (master|124453m) $ python test.py
0.449671983719
0.484215021133

###Elixir:

Erlang/OTP 19 [erts-8.0.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.3.2) - press Ctrl+C to exit (type h() ENTER for help)
...
iex(47)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("iphone", "4") end end)
4.664465
iex(48)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("iphone", "4") end end)
4.862587
iex(49)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("iphone", "4") end end)
4.475674
iex(50)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("Mozilla%2F5.0%20\(Linux%3B%20Android%204.1.2%3B%20XT907%20Build%2F9.8.1Q-94-1\)%20AppleWebKit%2F537.36%20\(KHTML%2C%20like%20Gecko\)%20Chrome%2F34.0.1847.114%20Mobile%20Safari%2F537.36", "4") end end)
10.800349
iex(51)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("Mozilla%2F5.0%20\(Linux%3B%20Android%204.1.2%3B%20XT907%20Build%2F9.8.1Q-94-1\)%20AppleWebKit%2F537.36%20\(KHTML%2C%20like%20Gecko\)%20Chrome%2F34.0.1847.114%20Mobile%20Safari%2F537.36", "4") end end)
10.627778
iex(52)> Benchmark.measure(fn -> Enum.each 1..1_000_000, fn _->  String.contains?("Mozilla%2F5.0%20\(Linux%3B%20Android%204.1.2%3B%20XT907%20Build%2F9.8.1Q-94-1\)%20AppleWebKit%2F537.36%20\(KHTML%2C%20like%20Gecko\)%20Chrome%2F34.0.1847.114%20Mobile%20Safari%2F537.36", "4") end end)
10.766444
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment