diff mbox

[i-g-t,09/18] stats: Add functions to retrieve min/max values of the dataset

Message ID 1435417696-28115-10-git-send-email-damien.lespiau@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lespiau, Damien June 27, 2015, 3:08 p.m. UTC
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
 lib/igt_stats.c       | 33 +++++++++++++++++++++++++++++++++
 lib/igt_stats.h       |  3 +++
 lib/tests/igt_stats.c | 12 ++++++++++++
 3 files changed, 48 insertions(+)
diff mbox

Patch

diff --git a/lib/igt_stats.c b/lib/igt_stats.c
index bd05550..477d204 100644
--- a/lib/igt_stats.c
+++ b/lib/igt_stats.c
@@ -28,6 +28,8 @@ 
 #include "igt_core.h"
 #include "igt_stats.h"
 
+#define U64_MAX         ((uint64_t)~0ULL)
+
 /**
  * SECTION:igt_stats
  * @short_description: Tools for statistical analysis
@@ -78,6 +80,9 @@  void igt_stats_init(igt_stats_t *stats, unsigned int capacity)
 	stats->values = calloc(capacity, sizeof(*stats->values));
 	igt_assert(stats->values);
 	stats->capacity = capacity;
+
+	stats->min = U64_MAX;
+	stats->max = 0;
 }
 
 /**
@@ -151,7 +156,35 @@  void igt_stats_push(igt_stats_t *stats, uint64_t value)
 {
 	igt_assert(stats->n_values < stats->capacity);
 	stats->values[stats->n_values++] = value;
+
 	stats->mean_variance_valid = false;
+
+	if (value < stats->min)
+		stats->min = value;
+	if (value > stats->max)
+		stats->max = value;
+}
+
+/**
+ * igt_stats_get_min:
+ * @stats: An #igt_stats_t instance
+ *
+ * Retrieves the minimal value in @stats
+ */
+uint64_t igt_stats_get_min(igt_stats_t *stats)
+{
+	return stats->min;
+}
+
+/**
+ * igt_stats_get_max:
+ * @stats: An #igt_stats_t instance
+ *
+ * Retrieves the maximum value in @stats
+ */
+uint64_t igt_stats_get_max(igt_stats_t *stats)
+{
+	return stats->max;
 }
 
 /*
diff --git a/lib/igt_stats.h b/lib/igt_stats.h
index ebc28ca..145b77b 100644
--- a/lib/igt_stats.h
+++ b/lib/igt_stats.h
@@ -41,6 +41,7 @@  typedef struct {
 	unsigned int capacity;
 	unsigned int is_population  : 1;
 	unsigned int mean_variance_valid : 1;
+	uint64_t min, max;
 	double mean, variance;
 } igt_stats_t;
 
@@ -49,6 +50,8 @@  void igt_stats_fini(igt_stats_t *stats);
 bool igt_stats_is_population(igt_stats_t *stats);
 void igt_stats_set_population(igt_stats_t *stats, bool full_population);
 void igt_stats_push(igt_stats_t *stats, uint64_t value);
+uint64_t igt_stats_get_min(igt_stats_t *stats);
+uint64_t igt_stats_get_max(igt_stats_t *stats);
 double igt_stats_get_mean(igt_stats_t *stats);
 double igt_stats_get_variance(igt_stats_t *stats);
 double igt_stats_get_std_deviation(igt_stats_t *stats);
diff --git a/lib/tests/igt_stats.c b/lib/tests/igt_stats.c
index 6916f25..dc5fe39 100644
--- a/lib/tests/igt_stats.c
+++ b/lib/tests/igt_stats.c
@@ -57,6 +57,17 @@  static void test_init(void)
 	igt_assert(igt_stats_is_population(&stats) == false);
 }
 
+static void test_min_max(void)
+{
+	igt_stats_t stats;
+
+	igt_stats_init(&stats, 5);
+	push_fixture_1(&stats);
+
+	igt_assert(igt_stats_get_min(&stats) == 2);
+	igt_assert(igt_stats_get_max(&stats) == 10);
+}
+
 static void test_mean(void)
 {
 	igt_stats_t stats;
@@ -127,6 +138,7 @@  igt_simple_main
 {
 	test_init_zero();
 	test_init();
+	test_min_max();
 	test_mean();
 	test_invalidate_mean();
 	test_std_deviation();