From b9d8f931eb43e37c7fa93c8226d89c11119ce07d Mon Sep 17 00:00:00 2001
From: Kaspar Schleiser <kaspar@schleiser.de>
Date: Fri, 15 Jun 2018 10:15:54 +0200
Subject: [PATCH] tests/bench_msg_pingpong: initial commit

---
 tests/bench_msg_pingpong/Makefile        | 12 ++++
 tests/bench_msg_pingpong/README.md       |  9 +++
 tests/bench_msg_pingpong/main.c          | 81 ++++++++++++++++++++++++
 tests/bench_msg_pingpong/tests/01-run.py | 21 ++++++
 4 files changed, 123 insertions(+)
 create mode 100644 tests/bench_msg_pingpong/Makefile
 create mode 100644 tests/bench_msg_pingpong/README.md
 create mode 100644 tests/bench_msg_pingpong/main.c
 create mode 100755 tests/bench_msg_pingpong/tests/01-run.py

diff --git a/tests/bench_msg_pingpong/Makefile b/tests/bench_msg_pingpong/Makefile
new file mode 100644
index 0000000000..85437c51a2
--- /dev/null
+++ b/tests/bench_msg_pingpong/Makefile
@@ -0,0 +1,12 @@
+include ../Makefile.tests_common
+
+BOARD_INSUFFICIENT_MEMORY := nucleo-f031k6
+
+USEMODULE += xtimer
+
+TEST_ON_CI_WHITELIST += all
+
+include $(RIOTBASE)/Makefile.include
+
+test:
+	tests/01-run.py
diff --git a/tests/bench_msg_pingpong/README.md b/tests/bench_msg_pingpong/README.md
new file mode 100644
index 0000000000..850f1d4027
--- /dev/null
+++ b/tests/bench_msg_pingpong/README.md
@@ -0,0 +1,9 @@
+# About
+
+This test will measure the amount of messages that could be sent from one
+thread to another during an interval of one second. The result amounts to the
+number of messages sent, which is half the number of context switches incurred
+through sending the messages.
+
+This test application intentionally duplicates code with some similar benchmark
+applications in order to be able to compare code sizes.
diff --git a/tests/bench_msg_pingpong/main.c b/tests/bench_msg_pingpong/main.c
new file mode 100644
index 0000000000..00799676e3
--- /dev/null
+++ b/tests/bench_msg_pingpong/main.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2017 Kaspar Schleiser <kaspar@schleiser.de>
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup     tests
+ * @{
+ *
+ * @file
+ * @brief       Measure messages send per second
+ *
+ * @author      Kaspar Schleiser <kaspar@schleiser.de>
+ *
+ * @}
+ */
+
+#include <stdio.h>
+#include "thread.h"
+
+#include "msg.h"
+#include "xtimer.h"
+
+#ifndef TEST_DURATION
+#define TEST_DURATION       (1000000U)
+#endif
+
+volatile unsigned _flag = 0;
+static char _stack[THREAD_STACKSIZE_MAIN];
+
+static void _timer_callback(void*arg)
+{
+    (void)arg;
+
+    _flag = 1;
+}
+
+static void *_second_thread(void *arg)
+{
+    (void)arg;
+    msg_t test;
+
+    while(1) {
+        msg_receive(&test);
+    }
+
+    return NULL;
+}
+
+int main(void)
+{
+    printf("main starting\n");
+
+    kernel_pid_t other = thread_create(_stack,
+                                       sizeof(_stack),
+                                       (THREAD_PRIORITY_MAIN - 1),
+                                       THREAD_CREATE_STACKTEST,
+                                       _second_thread,
+                                       NULL,
+                                       "second_thread");
+
+    xtimer_t timer;
+    timer.callback = _timer_callback;
+
+    msg_t test;
+
+    uint32_t n = 0;
+
+    xtimer_set(&timer, TEST_DURATION);
+    while(!_flag) {
+        msg_send(&test, other);
+        n++;
+    }
+
+    printf("{ \"result\" : %"PRIu32" }\n", n);
+
+    return 0;
+}
diff --git a/tests/bench_msg_pingpong/tests/01-run.py b/tests/bench_msg_pingpong/tests/01-run.py
new file mode 100755
index 0000000000..3a1e733980
--- /dev/null
+++ b/tests/bench_msg_pingpong/tests/01-run.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2018 Kaspar Schleiser <kaspar@schleiser.de>
+#               2017 Sebastian Meiling <s@mlng.net>
+#
+# This file is subject to the terms and conditions of the GNU Lesser
+# General Public License v2.1. See the file LICENSE in the top level
+# directory for more details.
+
+import os
+import sys
+
+
+def testfunc(child):
+    child.expect(r"{ \"result\" : \d+ }")
+
+
+if __name__ == "__main__":
+    sys.path.append(os.path.join(os.environ['RIOTTOOLS'], 'testrunner'))
+    from testrunner import run
+    sys.exit(run(testfunc))
-- 
GitLab