require 'benchmark'

class BenchVar

  def self.run(loops=100000)
    bv = new
    bv.bench_var_get_set(loops)
  end

  def initialize
    @var1 = 1
    @var2 = 2
    @var3 = 3
    @var4 = 4
    @var5 = 5
    @var6 = 6
    @var7 = 7
    @var8 = 8
    @var9 = 9
    @var10 = 10
    @var11 = 11
    @var12 = 12
    @var13 = 13
    @var14 = 14
    @var15 = 15
    @var16 = 16
    @var17 = 17
    @var18 = 18
    @var19 = 19
    @var20 = 20
  end

  def bench_var_get_set(loops=100000)
    puts "Measure instance var access time, #{loops} loops"
    5.times { 
      puts Benchmark.measure { 
        loops.times { 
          temp = @var1 
          @var1 = @var2
          @var2 = @var3
          @var3 = @var4
          @var4 = @var5
          @var5 = @var6
          @var6 = @var7
          @var7 = @var8
          @var8 = @var9
          @var9 = @var10
          @var10 = @var11 
          @var11 = @var12
          @var12 = @var13
          @var13 = @var14
          @var14 = @var15
          @var15 = @var16
          @var16 = @var17
          @var17 = @var18
          @var18 = @var19
          @var19 = @var20
          @var20 = temp
        } 
      } 
    }
  end

end

BenchVar.run 100000
