summaryrefslogtreecommitdiff
path: root/ucoo/utils/test
diff options
context:
space:
mode:
authorNicolas Schodet2015-06-03 13:46:44 +0200
committerNicolas Schodet2019-10-07 00:44:44 +0200
commit574480980dcffbfa7cd6dbe71e88253eb4c9feba (patch)
tree5f1c1261341a7c2a56de01d8c6d0815b164be8ba /ucoo/utils/test
parentd415a0646e874848cd06482c5d57916cca5cff4a (diff)
Rename ucoolib modules directory from ucoolib to ucoo
Diffstat (limited to 'ucoo/utils/test')
-rw-r--r--ucoo/utils/test/Makefile12
-rw-r--r--ucoo/utils/test/test_crc.cc49
-rw-r--r--ucoo/utils/test/test_delay.cc64
-rw-r--r--ucoo/utils/test/test_fifo.cc78
4 files changed, 203 insertions, 0 deletions
diff --git a/ucoo/utils/test/Makefile b/ucoo/utils/test/Makefile
new file mode 100644
index 0000000..01fb2ce
--- /dev/null
+++ b/ucoo/utils/test/Makefile
@@ -0,0 +1,12 @@
+BASE = ../../..
+
+TARGETS = host stm32f4
+PROGS = test_fifo test_crc
+stm32f4_PROGS = test_delay
+test_fifo_SOURCES = test_fifo.cc
+test_delay_SOURCES = test_delay.cc
+test_crc_SOURCES = test_crc.cc
+
+MODULES = utils base/test hal/usb
+
+include $(BASE)/build/top.mk
diff --git a/ucoo/utils/test/test_crc.cc b/ucoo/utils/test/test_crc.cc
new file mode 100644
index 0000000..c20600d
--- /dev/null
+++ b/ucoo/utils/test/test_crc.cc
@@ -0,0 +1,49 @@
+// ucoolib - Microcontroller object oriented library. {{{
+//
+// Copyright (C) 2013 Nicolas Schodet
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+// }}}
+#include "ucoo/utils/crc.hh"
+#include "ucoo/arch/arch.hh"
+#include "ucoo/base/test/test.hh"
+
+#include <cstring>
+
+int
+main (int argc, const char **argv)
+{
+ ucoo::arch_init (argc, argv);
+ ucoo::TestSuite tsuite ("crc");
+ {
+ ucoo::Test test (tsuite, "crc8 test vector");
+ static const uint8_t test_vector[] = { 0x02, 0x1c, 0xb8, 0x01, 0, 0, 0, 0xa2 };
+ if (ucoo::crc8_compute (test_vector, lengthof (test_vector)) != 0)
+ test.fail ();
+ }
+ {
+ ucoo::Test test (tsuite, "crc32 test vector");
+ const char *check_str = "123456789";
+ if (ucoo::crc32_compute ((const uint8_t *) check_str,
+ std::strlen (check_str)) != 0xCBF43926)
+ test.fail ();
+ }
+ return tsuite.report () ? 0 : 1;
+}
diff --git a/ucoo/utils/test/test_delay.cc b/ucoo/utils/test/test_delay.cc
new file mode 100644
index 0000000..90a53e5
--- /dev/null
+++ b/ucoo/utils/test/test_delay.cc
@@ -0,0 +1,64 @@
+// ucoolib - Microcontroller object oriented library. {{{
+//
+// Copyright (C) 2012 Nicolas Schodet
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+// }}}
+#include "ucoo/utils/delay.hh"
+#include "ucoo/arch/arch.hh"
+
+#include <libopencm3/stm32/f4/rcc.h>
+#include <libopencm3/stm32/f4/gpio.h>
+
+int
+main (int argc, const char **argv)
+{
+ ucoo::arch_init (argc, argv);
+ rcc_peripheral_enable_clock (&RCC_AHB1ENR, RCC_AHB1ENR_IOPDEN);
+ gpio_mode_setup (GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,
+ GPIO12 | GPIO13 | GPIO14 | GPIO15);
+ gpio_clear (GPIOD, GPIO12 | GPIO13 | GPIO14 | GPIO15);
+ int i, j;
+ while (1)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ gpio_toggle (GPIOD, GPIO12 << (i % 4));
+ ucoo::delay (1);
+ }
+ for (i = 0; i < 16; i++)
+ {
+ gpio_toggle (GPIOD, GPIO12 << (i % 4));
+ ucoo::delay_ms (250);
+ }
+ for (i = 0; i < 16000; i++)
+ {
+ gpio_toggle (GPIOD, GPIO12 << (i % 4));
+ ucoo::delay_us (250);
+ }
+ for (i = 0; i < 16; i++)
+ {
+ gpio_toggle (GPIOD, GPIO12 << (i % 4));
+ for (j = 0; j < 1000; j++)
+ ucoo::delay_us (250);
+ }
+ }
+ return 0;
+}
diff --git a/ucoo/utils/test/test_fifo.cc b/ucoo/utils/test/test_fifo.cc
new file mode 100644
index 0000000..dd9aa8e
--- /dev/null
+++ b/ucoo/utils/test/test_fifo.cc
@@ -0,0 +1,78 @@
+// ucoolib - Microcontroller object oriented library. {{{
+//
+// Copyright (C) 2012 Nicolas Schodet
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+// }}}
+#include "ucoo/utils/fifo.hh"
+#include "ucoo/arch/arch.hh"
+#include "ucoo/base/test/test.hh"
+
+int
+main (int argc, const char **argv)
+{
+ ucoo::arch_init (argc, argv);
+ ucoo::TestSuite tsuite ("fifo");
+ {
+ ucoo::Test test (tsuite, "push pop");
+ ucoo::Fifo<int, 16> fifo;
+ fifo.push (1);
+ fifo.push (2);
+ fifo.push (3);
+ if (fifo.pop () != 1 || fifo.pop () != 2 || fifo.pop () != 3)
+ test.fail ();
+ }
+ {
+ ucoo::Test test (tsuite, "full empty");
+ ucoo::Fifo<int, 4> fifo;
+ do
+ {
+ test_fail_break_unless (test, fifo.empty () && !fifo.full ());
+ fifo.push (1);
+ test_fail_break_unless (test, !fifo.empty () && !fifo.full ());
+ fifo.push (2);
+ test_fail_break_unless (test, !fifo.empty () && !fifo.full ());
+ fifo.push (3);
+ test_fail_break_unless (test, !fifo.empty () && fifo.full ());
+ } while (0);
+ }
+ {
+ ucoo::Test test (tsuite, "write read");
+ ucoo::Fifo<int, 8> fifo;
+ static const int b[] = { 1, 2, 3, 4, 5 };
+ int c[8];
+ int r;
+ do
+ {
+ r = fifo.write (b, 5);
+ test_fail_break_unless (test, r == 5);
+ r = fifo.read (c, 2);
+ test_fail_break_unless (test, r == 2 && c[0] == 1 && c[1] == 2);
+ r = fifo.write (b, 5);
+ test_fail_break_unless (test, r == 4);
+ r = fifo.read (c, 8);
+ test_fail_break_unless (test, r == 7);
+ test_fail_break_unless (test, c[0] == 3 && c[1] == 4 && c[2] == 5);
+ test_fail_break_unless (test, c[3] == 1 && c[4] == 2 && c[5] == 3
+ && c[6] == 4);
+ } while (0);
+ }
+ return tsuite.report () ? 0 : 1;
+}