Class | MiniTest::Unit::TestCase |
In: |
lib/minitest/benchmark.rb
lib/minitest/unit.rb |
Parent: | Object |
__send__ | -> | run_test |
Returns a set of ranges stepped exponentially from min to max by powers of base. Eg:
bench_exp(2, 16, 2) # => [2, 4, 8, 16]
Returns a set of ranges stepped linearly from min to max by step. Eg:
bench_linear(20, 40, 10) # => [20, 30, 40]
Specifies the ranges used for benchmarking for that class. Defaults to exponential growth from 1 to 10k by powers of 10. Override if you need different ranges for your benchmarks.
See also: ::bench_exp and ::bench_linear.
Call this at the top of your tests when you absolutely positively need to have ordered tests. In doing so, you‘re admitting that you suck and your tests are weak.
Make diffs for this TestCase use pretty_inspect so that diff in assert_equal can be more details. NOTE: this is much slower than the regular inspect but much more usable for complex objects.
Call this at the top of your tests when you want to run your tests in parallel. In doing so, you‘re admitting that you rule and your tests are awesome.
Runs the given work, gathering the times of each run. Range and times are then passed to a given validation proc. Outputs the benchmark name and times in tab-separated format, making it easy to paste into a spreadsheet for graphing or further analysis.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm validation = proc { |x, y| ... } assert_performance validation do |n| @obj.algorithm(n) end end
Runs the given work and asserts that the times gathered fit to match a constant rate (eg, linear slope == 0) within a given threshold. Note: because we‘re testing for a slope of 0, R^2 is not a good determining factor for the fit, so the threshold is applied against the slope itself. As such, you probably want to tighten it from the default.
See www.graphpad.com/curvefit/goodness_of_fit.htm for more details.
Fit is calculated by fit_linear.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm assert_performance_constant 0.9999 do |n| @obj.algorithm(n) end end
Runs the given work and asserts that the times gathered fit to match a exponential curve within a given error threshold.
Fit is calculated by fit_exponential.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm assert_performance_exponential 0.9999 do |n| @obj.algorithm(n) end end
Runs the given work and asserts that the times gathered fit to match a straight line within a given error threshold.
Fit is calculated by fit_linear.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm assert_performance_linear 0.9999 do |n| @obj.algorithm(n) end end
Runs the given work and asserts that the times gathered fit to match a logarithmic curve within a given error threshold.
Fit is calculated by fit_logarithmic.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm assert_performance_logarithmic 0.9999 do |n| @obj.algorithm(n) end end
Runs the given work and asserts that the times gathered curve fit to match a power curve within a given error threshold.
Fit is calculated by fit_power.
Ranges are specified by ::bench_range.
Eg:
def bench_algorithm assert_performance_power 0.9999 do |x| @obj.algorithm end end
To fit a functional form: y = ae^(bx).
Takes x and y values and returns [a, b, r^2].
See: mathworld.wolfram.com/LeastSquaresFittingExponential.html
To fit a functional form: y = a + b*ln(x).
Takes x and y values and returns [a, b, r^2].
See: mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
Enumerates over enum mapping block if given, returning the sum of the result. Eg:
sigma([1, 2, 3]) # => 1 + 2 + 3 => 7 sigma([1, 2, 3]) { |n| n ** 2 } # => 1 + 4 + 9 => 14