· 8 years ago · Feb 21, 2018, 02:24 PM
1require 'benchmark'
2
3### data
4
5N = 1_000_000
6email = "tj@yahoo.co.uk"
7list = ["gmail.com", "hotmail.com", "yahoo.com", "yahoo.co.uk", "clayton.ga.dmv.us.gov", "ibm.com"]
8
9Benchmark.bm(30) do |bm|
10
11 ### string compare
12
13 bm.report("string comapre") do
14 N.times do
15 list.include?(email.split('@').last.downcase)
16 end
17 end
18
19 ### regex compare
20
21 bm.report("regex compare") do
22 list = list.map do |domain|
23 Regexp.new(domain)
24 end
25 email_domain = email.split('@').last
26 N.times do
27 list.reject do |domain|
28 not (domain =~ email_domain)
29 end
30 end
31 end
32
33 ### compiled regex compare
34
35 bm.report("compiled regex comapre") do
36 pattern = Regexp.new("(#{list.join("|")})")
37 N.times do
38 pattern =~ email
39 end
40 end
41
42end