Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BigDecimal benchmarks #172

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ Idioms

- [General](#general)
- [Array](#array)
- [BigDecimal](#bigdecimal)
- [Date](#date)
- [Enumerable](#enumerable)
- [Hash](#hash)
Expand Down Expand Up @@ -655,6 +656,34 @@ Comparison:
inject block: 14063.1 i/s - 1.35x slower
```

### BigDecimal

##### `BigDecimal('1')` vs `BigDecimal('1.0')` vs `'1'.to_d` vs `'1.0'.to_d` vs `BigDecimal(1)` vs `1.to_d` vs `BigDecimal(1.0, 2)` vs `1.0.to_d` [code](code/bigdecimal/string-vs-numeric.rb)

```
$ ruby -v code/bigdecimal/string-vs-numeric.rb
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18]
Calculating -------------------------------------
integer string new 2.497M (± 2.0%) i/s - 12.645M in 5.066385s
float string new 2.414M (± 2.0%) i/s - 12.182M in 5.048473s
integer string to_d 2.402M (± 1.8%) i/s - 12.010M in 5.001784s
float string to_d 2.318M (± 1.8%) i/s - 11.663M in 5.032429s
integer new 1.601M (± 1.2%) i/s - 8.022M in 5.010201s
integer to_d 1.563M (± 1.8%) i/s - 7.817M in 5.001726s
float new 517.635k (± 4.5%) i/s - 2.604M in 5.042605s
float to_d 529.413k (± 3.6%) i/s - 2.671M in 5.051477s

Comparison:
integer string new: 2496860.3 i/s
float string new: 2414122.8 i/s - same-ish: difference falls within error
integer string to_d: 2401929.3 i/s - 1.04x slower
float string to_d: 2318272.7 i/s - 1.08x slower
integer new: 1601402.4 i/s - 1.56x slower
integer to_d: 1563335.6 i/s - 1.60x slower
float to_d: 529412.7 i/s - 4.72x slower
float new: 517634.5 i/s - 4.82x slower
```

### Date

##### `Date.iso8601` vs `Date.parse` [code](code/date/iso8601-vs-parse.rb)
Expand Down
48 changes: 48 additions & 0 deletions code/bigdecimal/string-vs-numeric.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require 'benchmark/ips'
require 'bigdecimal'
require 'bigdecimal/util'

def fastest
BigDecimal('1')
end

def fastest2
BigDecimal('1.0')
end

def fast
'1'.to_d
end

def fast2
'1.0'.to_d
end

def slow
BigDecimal(1)
end

def slow2
1.to_d
end

def slowest
BigDecimal(1.0, 2)
end

def slowest2
1.0.to_d
end


Benchmark.ips do |x|
x.report('integer string new') { fastest }
x.report('float string new') { fastest2 }
x.report('integer string to_d') { fast }
x.report('float string to_d') { fast2 }
x.report('integer new') { slow }
x.report('integer to_d') { slow2 }
x.report('float new') { slowest }
x.report('float to_d') { slowest2 }
x.compare!
end