Misc #15925 ยป sorted-set-min-max-sum.patch
| benchmark/set_min_max_sum.yml | ||
|---|---|---|
| 
     prelude: | 
   | 
||
| 
       require 'set' 
   | 
||
| 
       set = SortedSet.new((0..1000).sort{rand}) 
   | 
||
| 
     benchmark: 
   | 
||
| 
       min: set.min 
   | 
||
| 
       max: set.max 
   | 
||
| 
       minmax: set.minmax 
   | 
||
| 
       sum: set.sum 
   | 
||
| lib/set.rb | ||
|---|---|---|
| 
                   super 
   | 
||
| 
                 end 
   | 
||
| 
                 def min 
   | 
||
| 
                   to_a.first 
   | 
||
| 
                 end 
   | 
||
| 
                 def max 
   | 
||
| 
                   to_a.last 
   | 
||
| 
                 end 
   | 
||
| 
                 def minmax 
   | 
||
| 
                   [min, max] 
   | 
||
| 
                 end 
   | 
||
| 
                 def sum 
   | 
||
| 
                   to_a.sum 
   | 
||
| 
                 end 
   | 
||
| 
                 def add(o) 
   | 
||
| 
                   o.respond_to?(:<=>) or raise ArgumentError, "value must respond to <=>" 
   | 
||
| 
                   @keys = nil 
   | 
||
| test/test_set.rb | ||
|---|---|---|
| 
         s = SortedSet[4,5,3,1,2] 
   | 
||
| 
         assert_equal([1,2,3,4,5], s.to_a) 
   | 
||
| 
         assert_equal(1, s.min) 
   | 
||
| 
         assert_equal(5, s.max) 
   | 
||
| 
         assert_equal([1,5], s.minmax) 
   | 
||
| 
         assert_equal(15, s.sum) 
   | 
||
| 
         prev = nil 
   | 
||
| 
         s.each { |o| assert(prev < o) if prev; prev = o } 
   | 
||