diff mbox

[i-g-t,18/18] stats: Add support for the interquartile range (IQR)

Message ID 1435417696-28115-19-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
IQR is a good measure of dispersion.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
 lib/igt_stats.c       | 18 +++++++++++++++++-
 lib/igt_stats.h       |  1 +
 lib/tests/igt_stats.c |  2 ++
 3 files changed, 20 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/lib/igt_stats.c b/lib/igt_stats.c
index 66fd563..caf3f37 100644
--- a/lib/igt_stats.c
+++ b/lib/igt_stats.c
@@ -216,7 +216,7 @@  uint64_t igt_stats_get_max(igt_stats_t *stats)
  *
  * The range can be a deceiving characterization of the values, because there
  * can be extreme minimal and maximum values that are just anomalies. Prefer
- * the interquatile range or an histogram.
+ * the interquatile range (see igt_stats_get_iqr()) or an histogram.
  */
 uint64_t igt_stats_get_range(igt_stats_t *stats)
 {
@@ -340,6 +340,22 @@  void igt_stats_get_quartiles(igt_stats_t *stats,
 }
 
 /**
+ * igt_stats_get_iqr:
+ * @stats: An #igt_stats_t instance
+ *
+ * Retrieves the
+ * [interquartile range](https://en.wikipedia.org/wiki/Interquartile_range)
+ * (IQR) of the @stats dataset.
+ */
+double igt_stats_get_iqr(igt_stats_t *stats)
+{
+	double q1, q3;
+
+	igt_stats_get_quartiles(stats, &q1, NULL, &q3);
+	return (q3 - q1);
+}
+
+/**
  * igt_stats_get_median:
  * @stats: An #igt_stats_t instance
  *
diff --git a/lib/igt_stats.h b/lib/igt_stats.h
index 887fa79..6ee3ae6 100644
--- a/lib/igt_stats.h
+++ b/lib/igt_stats.h
@@ -59,6 +59,7 @@  uint64_t igt_stats_get_max(igt_stats_t *stats);
 uint64_t igt_stats_get_range(igt_stats_t *stats);
 void igt_stats_get_quartiles(igt_stats_t *stats,
 			     double *q1, double *q2, double *q3);
+double igt_stats_get_iqr(igt_stats_t *stats);
 double igt_stats_get_mean(igt_stats_t *stats);
 double igt_stats_get_median(igt_stats_t *stats);
 double igt_stats_get_variance(igt_stats_t *stats);
diff --git a/lib/tests/igt_stats.c b/lib/tests/igt_stats.c
index c4c6776..c0649f3 100644
--- a/lib/tests/igt_stats.c
+++ b/lib/tests/igt_stats.c
@@ -102,6 +102,7 @@  static void test_quartiles(void)
 	igt_assert_eq_double(q2, 40);
 	igt_assert_eq_double(q3, 42.5);
 	igt_assert_eq_double(igt_stats_get_median(&stats), 40);
+	igt_assert_eq_double(igt_stats_get_iqr(&stats), 42.5 - 25.5);
 
 	igt_stats_fini(&stats);
 
@@ -114,6 +115,7 @@  static void test_quartiles(void)
 	igt_assert_eq_double(q2, 37.5);
 	igt_assert_eq_double(q3, 40);
 	igt_assert_eq_double(igt_stats_get_median(&stats), 37.5);
+	igt_assert_eq_double(igt_stats_get_iqr(&stats), 40 - 15);
 
 	igt_stats_fini(&stats);
 }