benchmark-bigo, 为 ruby 提供大的O 符号

分享于 

7分钟阅读

GitHub

  繁體 雙語
Provides big o notation benchmarking for Ruby
  • 源代码名称:benchmark-bigo
  • 源代码网址:http://www.github.com/davy/benchmark-bigo
  • benchmark-bigo源代码文档
  • benchmark-bigo源代码下载
  • Git URL:
    git://www.github.com/davy/benchmark-bigo.git
    Git Clone代码到本地:
    git clone http://www.github.com/davy/benchmark-bigo
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/davy/benchmark-bigo
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Build Status

    基准 BigO

    帮助计算大O 行为的基准对象

    安装

    在你的应用程序的Gemfile中:

    gem 'benchmark-bigo'

    或者手动安装:

    $ gem install benchmark-bigo

    用法

    require'benchmark/bigo'Benchmark.bigo do |x|
     # generator should construct a test object of the given size# example of an Array generator x.generator {|size| (0...size).to_a.shuffle }
     # or you can use the built in array generator# x.generate :array# steps is the total number of data points to collect# default is 10 x.steps =6# step_size is the size between steps# default is 100 x.step_size =200# indicates the starting size of the object to test# default is 100 x.min_size =1000# report takes a label and a block.# block is passed in the generated object and the size of that object x.report("#at") {|array, size| array.at rand(size) }
     x.report("#index") {|array, size| array.index rand(size) }
     x.report("#index-miss") {|array, size| array.index (size +rand(size)) }
     # generate HTML chart using ChartKick x.chart! 'chart_array_simple.html'# for each report, create a comparison chart showing the report# and scaled series for O(log n), O(n), O(n log n), and O(n squared) x.compare!
     # generate an ASCII chart using gnuplot# works best with only one or two reports# otherwise the lines often overlap each other x.termplot!
     # generate JSON output x.json! 'chart_array_simple.json'# generate CSV output x.csv! 'chart_array_simple.csv'end

    生成器

    为了测试一个不同大小的输入的代码块,基准工具必须知道如何生成这种不同的输入。 生成器用于创建这里输入以进行测试。 在许多情况下生成器创建一个对象,但这不是生成器可以使用的唯一方法。

    有几个内置生成器可以方便地测试通用对象。

    array

    array 生成器通过调用

    
    Benchmark.bigo do |x|
    
    
     x.generate :array
    
    
    . . .
    
    
    end
    
    
    
    

    这个生成器知道如何创建不同大小的数组。 生成的array 包含 0和( size-1 ) 之间的数字集,随机打乱。 例如生成的大小为 5的array 可能看起来如下所示:

     
    [3,2,4,1,0]
    
    
    
     

    字符串

    字符串生成器是通过调用

    
    Benchmark.bigo do |x|
    
    
     x.generate :string
    
    
    . . .
    
    
    end
    
    
    
    

    这里生成器使用 SecureRandom.hex 创建大小不同的随机十六进制字符串。 在这种情况下,大小表示要生成的字符串的长度( 以字节为单位)。 这意味着生成的字符串将为 2 * 大小。 例如生成的大小为 10的字符串可能看起来如下所示:

    
    "70fd739c8640b8c9212b"
    
    
    
    

    大小

    当没有直接对象进行测试时,这个生成器是非常有用的,而是测试报表块中大小的影响。 此时,传递给报表块的两个变量都将是大小值。 这个例子展示了如何测试迭代操作的性能差异。

    例如:

    
    Benchmark.bigo do |x|
    
    
     x.generate :size
    
    
    
     x.report("#times") {|size,_|
    
    
    
     size.times do |i|
    
    
     # do things here
    
    
     end
    
    
     }
    
    
    
     x.report("for") {|size,_|
    
    
    
     for i in size
    
    
     # do things here
    
    
     end
    
    
     }
    
    
    
    end
    
    
    
    

    自定义

    在许多情况下需要定制生成器。 如果你希望基准测试的代码针对特定的输入类型运行,则这种情况是。 通过指定接受单个大小参数并返回该大小的对象的块来创建自定义生成器。

    以下生成器创建一个哈希,其中每个键都是大小的整数,而该值是随机字符串 10个字符。

    
    Benchmark.bigo do |x|
    
    
     x.generator do |size|
    
    
     h = {}
    
    
     (0...size).each {|i| h[i] = SecureRandom.hex(10)}
    
    
     h
    
    
     end
    
    
    . . .
    
    
    end
    
    
    
    # for size 5
    
    
    # => { 0 =>"1fb3e5bb88815d824fff",
    
    
    # 1 =>"63006b6e810502f5bedd",
    
    
    # 2 =>"7bef4e15a2b4f9e44fa9",
    
    
    # 3 =>"f78319925f8c0790b409",
    
    
    # 4 =>"2bfc6a0a91c4949dc6ae"
    
    
    # }
    
    
    
    

    在签出源代码之后,运行测试:

    
    $ git clone git@github.com:davy/benchmark-bigo.git
    
    
    $ cd benchmark-bigo
    
    
    $ bundle install
    
    
    $ bundle exec rake test
    
    
    
    

    你还可以生成 RDoc:

    
    $ bundle exec rdoc --main README.md
    
    
    
    

    许可证

    ( MIT许可证)

    版权所有( c ) 2014大卫 Stevenson

    若要在取得该软件副本时免费授予任何人,如有下列条件的软件,请免费授予该软件的副本,并与相关的文档文件('软件') 进行许可,包括不受限制的权利,包括以下条件:

    上述版权声明和本许可声明须包括在所有的副本或实质性部分的软件。

    软件是'是',没有任何保证,表示或者隐含,包括但不限于销售,适合特定用途和 NONINFRINGEMENT。 作者或者版权持有人在合同。侵权或者它的他与软件或者它的他用户交易的行为。


    相关文章