prelude: |
  f = File
  pwd = Dir.pwd
  Dir.mkdir('b') unless f.directory?('b')
  f.write('b/a', '') unless f.file?('b/a')

  relative = 'b/a'
  absolute = File.join(pwd, relative)
  dir = 'b'
  file = 'a'

  relative_dir = 'b/c'
  absolute_dir = File.join(pwd, relative_dir)
  file_dir = 'c'
benchmark:
  relative_nil: "f.realpath(relative, nil)"
  absolute_nil: "f.realpath(absolute, nil)"
  relative_relative: "f.realpath(file, dir)"
  absolute_relative: "f.realpath(absolute, dir)"
  relative_absolute: "f.realpath(relative, pwd)"
  relative_nil_dir: "f.realdirpath(relative_dir, nil)"
  absolute_nil_dir: "f.realdirpath(absolute_dir, nil)"
  relative_relative_dir: "f.realdirpath(file_dir, dir)"
  absolute_relative_dir: "f.realdirpath(absolute_dir, dir)"
  relative_absolute_dir: "f.realdirpath(relative_dir, pwd)"
  relative_nil_notexist: "f.realpath(relative_dir, nil) rescue nil"
  absolute_nil_notexist: "f.realpath(absolute_dir, nil) rescue nil"
  relative_relative_notexist: "f.realpath(file_dir, dir) rescue nil"
  absolute_relative_notexist: "f.realpath(absolute_dir, dir) rescue nil"
  relative_absolute_notexist: "f.realpath(relative_dir, pwd) rescue nil"
