Module: Bullshit::EvaluationModule
- Included in:
- RangeCase, RepeatCase, TimeCase
- Defined in:
- lib/bullshit.rb
Overview
This module contains methods, that can be used in the evaluation method of benchmark cases.
Instance Method Summary collapse
- #detect_autocorrelation(clock) ⇒ Object
- #detect_outliers(clock) ⇒ Object
- #histogram(clock) ⇒ Object
- #statistics_table(clock) ⇒ Object
Instance Method Details
#detect_autocorrelation(clock) ⇒ Object
977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 |
# File 'lib/bullshit.rb', line 977 def detect_autocorrelation(clock) result = '' clock.case.autocorrelation.enabled or return result if r = clock.detect_autocorrelation(clock.case.compare_time) result << "\nLjung-Box statistics: q=%.5f (alpha=#{r[:alpha_level]},"\ " df=#{r[:lags]}).\n" % r[:q] if r[:detected] result << "%.5f >= %.5f => Autocorrelation was detected.\n" % [ r[:p], 1 - r[:alpha_level] ] else result << "%.5f < %.5f => No autocorrelation was detected.\n" % [ r[:p], 1 - r[:alpha_level] ] end else result << "\nDidn't have enough lags to compute Ljung-Box statistics.\n" end result end |
#detect_outliers(clock) ⇒ Object
960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 |
# File 'lib/bullshit.rb', line 960 def detect_outliers(clock) result = '' if clock.case.detect_outliers and outliers = clock.detect_outliers(clock.case.compare_time) then result << "\nOutliers detected with box plot algo "\ "(median=%.5f, iqr=%.5f, factor=%.2f):\n" % outliers.values_at(:median, :iqr, :factor) result << outliers.select { |n, | [ :very_low, :low, :high, :very_high ].include?(n) }.map { |n, v| "#{n}=#{v}" } * ' ' result << "\n" else result << "\nNo outliers detected with box plot algo.\n" end result end |
#histogram(clock) ⇒ Object
952 953 954 955 956 957 958 |
# File 'lib/bullshit.rb', line 952 def histogram(clock) result = "\n" if clock.case.histogram.enabled clock.histogram(clock.case.compare_time).display(result, 50) end result end |
#statistics_table(clock) ⇒ Object
933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 |
# File 'lib/bullshit.rb', line 933 def statistics_table(clock) result = ' ' * NAME_COLUMN_SIZE << ('%17s ' * 4) % times << "\n" result << evaluation_line('sum', times.map { |t| clock.sum(t) }) result << evaluation_line('min', times.map { |t| clock.min(t) }) result << evaluation_line('std-', times.map { |t| clock.arithmetic_mean(t) - clock.sample_standard_deviation(t) }) result << evaluation_line('mean', times.map { |t| clock.arithmetic_mean(t) }) result << evaluation_line('std+', times.map { |t| clock.arithmetic_mean(t) + clock.sample_standard_deviation(t) }) result << evaluation_line('max', times.map { |t| clock.max(t) }) result << evaluation_line('std', times.map { |t| clock.sample_standard_deviation(t) }) result << evaluation_line('std%', times.map { |t| clock.sample_standard_deviation_percentage(t) }) result << evaluation_line('harm', times.map { |t| clock.harmonic_mean(t) }) result << evaluation_line('geo', times.map { |t| clock.geometric_mean(t) }) result << evaluation_line('q1', times.map { |t| clock.percentile(t, 25) }) result << evaluation_line('med', times.map { |t| clock.median(t) }) result << evaluation_line('q3', times.map { |t| clock.percentile(t, 75) }) result << ' ' * NAME_COLUMN_SIZE << "%17u %17.5f %17.9f\n" % [ clock.repeat, clock.calls_mean, clock.call_time_mean ] result << ' ' * NAME_COLUMN_SIZE << "%17s %17s %17s\n" % %w[calls calls/sec secs/call] end |