[PATCH i-g-t 4/5] stats: Add a way to retrieve the standard deviation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Damien Lespiau <damien.lespiau@xxxxxxxxx>
---
 lib/igt_stats.c              |  9 +++++++++
 lib/igt_stats.h              |  1 +
 lib/tests/Makefile.am        |  2 +-
 lib/tests/igt_stats.c        | 33 +++++++++++++++++++++++++++++++++
 tools/Makefile.am            |  2 +-
 tools/quick_dump/Makefile.am |  1 +
 6 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/lib/igt_stats.c b/lib/igt_stats.c
index 20db806..65c0ac6 100644
--- a/lib/igt_stats.c
+++ b/lib/igt_stats.c
@@ -22,6 +22,8 @@
  *
  */
 
+#include <math.h>
+
 #include "igt_core.h"
 #include "igt_stats.h"
 
@@ -86,3 +88,10 @@ double igt_stats_get_variance(igt_stats_t *stats)
 
 	return stats->variance;
 }
+
+double igt_stats_get_std_deviation(igt_stats_t *stats)
+{
+	igt_stats_knuth_mean_variance(stats);
+
+	return sqrt(stats->variance);
+}
diff --git a/lib/igt_stats.h b/lib/igt_stats.h
index acb86a6..371def3 100644
--- a/lib/igt_stats.h
+++ b/lib/igt_stats.h
@@ -37,3 +37,4 @@ void igt_stats_fini(igt_stats_t *stats);
 void igt_stats_push(igt_stats_t *stats, uint64_t value);
 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/Makefile.am b/lib/tests/Makefile.am
index e59065b..938d2ab 100644
--- a/lib/tests/Makefile.am
+++ b/lib/tests/Makefile.am
@@ -15,5 +15,5 @@ AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) \
 
 LDADD = ../libintel_tools.la $(PCIACCESS_LIBS) $(DRM_LIBS) $(LIBUNWIND_LIBS)
 
-LDADD += $(CAIRO_LIBS) $(LIBUDEV_LIBS) $(GLIB_LIBS)
+LDADD += $(CAIRO_LIBS) $(LIBUDEV_LIBS) $(GLIB_LIBS) -lm
 AM_CFLAGS += $(CAIRO_CFLAGS) $(LIBUDEV_CFLAGS) $(GLIB_CFLAGS)
diff --git a/lib/tests/igt_stats.c b/lib/tests/igt_stats.c
index c20b453..172e4b3 100644
--- a/lib/tests/igt_stats.c
+++ b/lib/tests/igt_stats.c
@@ -45,7 +45,40 @@ static void test_mean(void)
 	igt_stats_fini(&stats);
 }
 
+/*
+ * Taken from the "Basic examples" section of:
+ * https://en.wikipedia.org/wiki/Standard_deviation
+ */
+static void test_std_deviation(void)
+{
+	igt_stats_t stats;
+	double mean, variance, std_deviation;
+
+	igt_stats_init(&stats, 8);
+
+	igt_stats_push(&stats, 2);
+	igt_stats_push(&stats, 4);
+	igt_stats_push(&stats, 4);
+	igt_stats_push(&stats, 4);
+	igt_stats_push(&stats, 5);
+	igt_stats_push(&stats, 5);
+	igt_stats_push(&stats, 7);
+	igt_stats_push(&stats, 9);
+
+	mean = igt_stats_get_mean(&stats);
+	igt_assert(mean == (2 + 3 * 4 + 2 * 5 + 7 + 9) / 8.);
+
+	variance = igt_stats_get_variance(&stats);
+	igt_assert(variance == 4);
+
+	std_deviation = igt_stats_get_std_deviation(&stats);
+	igt_assert(std_deviation == 2);
+
+	igt_stats_fini(&stats);
+}
+
 igt_simple_main
 {
 	test_mean();
+	test_std_deviation();
 }
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 04bfd12..8288248 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -8,5 +8,5 @@ endif
 
 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/lib
 AM_CFLAGS = $(DRM_CFLAGS) $(PCIACCESS_CFLAGS) $(CWARNFLAGS) $(CAIRO_CFLAGS) $(LIBUNWIND_CFLAGS)
-LDADD = $(top_builddir)/lib/libintel_tools.la $(DRM_LIBS) $(PCIACCESS_LIBS) $(CAIRO_LIBS) $(LIBUDEV_LIBS) $(LIBUNWIND_LIBS)
+LDADD = $(top_builddir)/lib/libintel_tools.la $(DRM_LIBS) $(PCIACCESS_LIBS) $(CAIRO_LIBS) $(LIBUDEV_LIBS) $(LIBUNWIND_LIBS) -lm
 
diff --git a/tools/quick_dump/Makefile.am b/tools/quick_dump/Makefile.am
index 3d0bd23..0643a81 100644
--- a/tools/quick_dump/Makefile.am
+++ b/tools/quick_dump/Makefile.am
@@ -15,6 +15,7 @@ I915ChipsetPython_la_LIBADD =			\
 	$(CAIRO_LIBS)				\
 	$(LIBUNWIND_LIBS)			\
 	-lrt					\
+	-lm					\
 	$(NULL)
 
 chipset.py: chipset_wrap_python.c
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux