Patches item #2769, was opened at 2005-11-02 21:30
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1700&aid=2769&group_id=426

Category: None
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Daniel Berger (djberg96)
Assigned to: Nobody (None)
Summary: Patch for Array#insert

Initial Comment:
Hi all,

I've attached a patch for Array#insert (array.c).  This gets rid of the manual argc counting, and improves performance when dealing with negative indexes.  I handled a -1 index specially, since all it does is append.

Some benchmarks:

# Without patch
djberge@linux:~/programming/ruby> ruby insertbench.rb
                                    user     system      total        real
Array#insert(2)                 2.810000   0.010000   2.820000 (  2.844887)
Array#insert(-1)                1.730000   0.020000   1.750000 (  1.792738)
Array#insert(-2)                1.600000   0.000000   1.600000 (  1.632053)

# With patch
djberge@linux:~/programming/ruby> /opt/local/bin/ruby insertbench.rb
                                    user     system      total        real
Array#insert(2)                 2.800000   0.010000   2.810000 (  2.840690)
Array#insert(-1)                0.790000   0.010000   0.800000 (  0.818543)
Array#insert(-2)                0.950000   0.000000   0.950000 (  0.969453)

# bench_insert.rb
require "benchmark"

MAX = 30000

Benchmark.bm(30) do |x|
   x.report("Array#insert(2)"){
      array = [1,2,3,4]
      MAX.times{ array.insert(2, "a", "b") }
   }

   x.report("Array#insert(-1)"){
      array = [1,2,3,4]
      MAX.times{ array.insert(-1, "a", "b") }
   }

   x.report("Array#insert(-2)"){
      array = [1,2,3,4]
      MAX.times{ array.insert(-2, "a", "b") }
   }
end

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1700&aid=2769&group_id=426