metrics: print std_dev for each metric
authorAlexandre Terrasa <alexandre@moz-code.org>
Fri, 7 Mar 2014 06:18:12 +0000 (01:18 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Fri, 7 Mar 2014 06:20:23 +0000 (01:20 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/metrics/metrics_base.nit

index ef85ca5..2bb61cb 100644 (file)
@@ -175,13 +175,18 @@ interface Metric
                        print "{"\t" * indent}  avg: {avg}".light_gray
                        print "{"\t" * indent}  max: {max} ({self[max]})".light_gray
                        print "{"\t" * indent}  min: {min} ({self[min]})".light_gray
+                       print "{"\t" * indent}  std: {std_dev}".light_gray
                else
                        print "{"\t" * indent}{name}: {desc}"
                        print "{"\t" * indent}  avg: {avg}"
                        print "{"\t" * indent}  max: {max} ({self[max]})"
                        print "{"\t" * indent}  min: {min} ({self[min]})"
+                       print "{"\t" * indent}  std: {std_dev}"
                end
        end
+
+       # The values standard derivation
+       fun std_dev: Float is abstract
 end
 
 # A Metric that collects integer data
@@ -216,6 +221,8 @@ class IntMetric
 
        # Values average
        redef fun avg: Float do return values_cache.avg
+
+       redef fun std_dev: Float do return values_cache.std_dev
 end
 
 # A Metric that collects float datas
@@ -267,6 +274,14 @@ class FloatMetric
                end
                return sum / values.length.to_f
        end
+
+       redef fun std_dev: Float do
+               var sum = 0.0
+               for value in values.values do
+                       sum += (value - avg).pow(2.to_f)
+               end
+               return (sum / values.length.to_f).sqrt
+       end
 end
 
 # A MetricSet is a metric holder