jodosha (owner)

Revisions

gist: 129191 Download_button fork
public
Public Clone URL: git://gist.github.com/129191.git
Embed All Files: show embed
bytes.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# Refactoring proposal for ActiveSupport bytes calculations
require "benchmark"
ONE = 1
 
module Bytes
  def bytes
    self
  end
  alias :byte :bytes
 
  def kilobytes
    self * 1024
  end
  alias :kilobyte :kilobytes
 
  def megabytes
    self * 1024.kilobytes
  end
  alias :megabyte :megabytes
 
  def gigabytes
    self * 1024.megabytes
  end
  alias :gigabyte :gigabytes
 
  def terabytes
    self * 1024.gigabytes
  end
  alias :terabyte :terabytes
  
  def petabytes
    self * 1024.terabytes
  end
  alias :petabyte :petabytes
  
  def exabytes
    self * 1024.petabytes
  end
  alias :exabyte :exabytes
end
 
module RefactoredBytes
  KILOBYTE = 1024
  MEGABYTE = KILOBYTE * 1024
  GIGABYTE = MEGABYTE * 1024
  TERABYTE = GIGABYTE * 1024
  PETABYTE = TERABYTE * 1024
  EXABYTE = PETABYTE * 1024
 
  def refactored_bytes
    self
  end
  alias :refactored_byte :refactored_bytes
 
  def refactored_kilobytes
    self * KILOBYTE
  end
  alias :refactored_kilobyte :refactored_kilobytes
 
  def refactored_megabytes
    self * MEGABYTE
  end
  alias :refactored_megabyte :refactored_megabytes
 
  def refactored_gigabytes
    self * GIGABYTE
  end
  alias :refactored_gigabyte :refactored_gigabytes
 
  def refactored_terabytes
    self * TERABYTE
  end
  alias :refactored_terabyte :refactored_terabytes
  
  def refactored_petabytes
    self * PETABYTE
  end
  alias :refactored_petabyte :refactored_petabytes
  
  def refactored_exabytes
    self * EXABYTE
  end
  alias :refactored_exabyte :refactored_exabytes
end
 
class Numeric
  include Bytes, RefactoredBytes
end
 
Benchmark.bm(30) do |b|
  # kilobyte
  b.report("kilobyte") do
    5_000_000.times { ONE.kilobyte }
  end
 
  b.report("refactored_kilobyte") do
    5_000_000.times { ONE.refactored_kilobyte }
  end
 
  # megabyte
  b.report("megabyte") do
    5_000_000.times { ONE.megabyte }
  end
 
  b.report("refactored_megabyte") do
    5_000_000.times { ONE.refactored_megabyte }
  end
 
  # gigabyte
  b.report("gigabyte") do
    5_000_000.times { ONE.gigabyte }
  end
 
  b.report("refactored_gigabyte") do
    5_000_000.times { ONE.refactored_gigabyte }
  end
 
  # terabyte
  b.report("terabyte") do
    5_000_000.times { ONE.terabyte }
  end
 
  b.report("refactored_terabyte") do
    5_000_000.times { ONE.refactored_terabyte }
  end
 
  # petabyte
  b.report("petabyte") do
    5_000_000.times { ONE.petabyte }
  end
 
  b.report("refactored_petabyte") do
    5_000_000.times { ONE.refactored_petabyte }
  end
 
  # exabyte
  b.report("exabyte") do
    5_000_000.times { ONE.exabyte }
  end
 
  b.report("refactored_exabyte") do
    5_000_000.times { ONE.refactored_exabyte }
  end
end
 
__END__
 
                                    user     system      total        real
kilobyte                        2.450000   0.010000   2.460000 (  2.479556)
refactored_kilobyte             2.570000   0.010000   2.580000 (  2.583070)
megabyte                        4.360000   0.010000   4.370000 (  4.378750)
refactored_megabyte             2.570000   0.010000   2.580000 (  2.595025)
gigabyte                       16.590000   0.040000  16.630000 ( 16.678308)
refactored_gigabyte             8.580000   0.010000   8.590000 (  8.609626)
terabyte                       25.110000   0.060000  25.170000 ( 25.218141)
refactored_terabyte             8.630000   0.030000   8.660000 (  8.671909)
petabyte                       32.890000   0.100000  32.990000 ( 33.105326)
refactored_petabyte             8.650000   0.030000   8.680000 (  8.706800)
exabyte                        41.200000   0.120000  41.320000 ( 41.442681)
refactored_exabyte              8.660000   0.020000   8.680000 (  8.695625)