ROUNDS=ARGV[0].to_i

class Dotter
  def initialize
    @dot_track = 0
    tmp = 0
    (1..ROUNDS).each {
      print '-' if tmp % (ROUNDS/60.0).ceil == 0
      tmp = tmp + 1
    }
    print "\n"
  end
  def call
    print '.' if @dot_track % (ROUNDS/60.0).ceil == 0
    @dot_track = @dot_track + 1
  end
  def reset
    print "\n"
    @dot_track = 0
  end
end


PID = Process.pid
def mem
  mem = `ps -o rss= -p #{PID}`.to_i
  puts "Memory Usage: #{mem}"
end

mem

dot = Dotter.new

# replicating environment
begin
  dup = {}
  ENV.each_pair {|k,v|
    dup[k] = v
  }

  # Empty env
  dup.keys.each {|k|
    ENV[k] = nil
  }
  raise "Not empty" unless ENV.length == 0

  # Put env back
  dup.each_pair {|k,v|
    ENV[k] = v
  }

  # Empty it again.
  dup.keys.each {|k|
    ENV[k] = nil
  }
  raise "Not empty" unless ENV.length == 0

  # Put env back again
  dup.each_pair {|k,v|
    ENV[k] = v
  }
end

# setenv()
begin
  (1..ROUNDS).each {|i|
    ENV["VARIABLE_TEST_#{i}"] = "VARIABLE_VALUE_#{i}"
    dot.call
  }
  dot.reset

  (1..ROUNDS).each {|i|
    raise "Invalid Value" unless ENV["VARIABLE_TEST_#{i}"] == "VARIABLE_VALUE_#{i}"
    dot.call
  }
  dot.reset
end

# unsetenv()
begin
  (1..ROUNDS).each {|i|
    ENV["VARIABLE_TEST_#{i}"] = nil
    dot.call
  }
  dot.reset

  (1..ROUNDS).each {|i|
    raise "Invalid Value" unless ENV["VARIABLE_TEST_#{i}"].nil?
    dot.call
  }
  dot.reset
end

mem

# EOF
