Merge pull request #12687 from aabadie/pr/pkg/libfixmath_update
pkg/libfixmath: several improvements and 8bit fix
This commit is contained in:
commit
8f90da6040
@ -6,6 +6,7 @@ PKG_LICENSE := MIT
|
|||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
|
||||||
all:
|
all:
|
||||||
$(Q)"$(MAKE)" -C $(PKG_BUILDDIR)
|
$(Q)cp $(CURDIR)/Makefile.$(PKG_NAME) $(PKG_BUILDDIR)/$(PKG_NAME)/Makefile
|
||||||
|
$(Q)cp $(CURDIR)/Makefile.$(PKG_NAME)-unittests $(PKG_BUILDDIR)/unittests/Makefile
|
||||||
|
|
||||||
include $(RIOTBASE)/pkg/pkg.mk
|
include $(RIOTBASE)/pkg/pkg.mk
|
||||||
|
|||||||
8
pkg/libfixmath/Makefile.dep
Normal file
8
pkg/libfixmath/Makefile.dep
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
|
||||||
|
# libfixmath unittests use shift operand incompatible with 8bit
|
||||||
|
# architecture int type.
|
||||||
|
FEATURES_BLACKLIST += arch_8bit
|
||||||
|
|
||||||
|
# The round function is not provided by the msp430 toolchain
|
||||||
|
FEATURES_BLACKLIST += arch_msp430
|
||||||
|
endif
|
||||||
@ -3,8 +3,14 @@ PKG_BUILDDIR ?= $(PKGDIRBASE)/libfixmath
|
|||||||
# The static cache is huge, disable it.
|
# The static cache is huge, disable it.
|
||||||
CFLAGS += -DFIXMATH_NO_CACHE
|
CFLAGS += -DFIXMATH_NO_CACHE
|
||||||
|
|
||||||
|
ifneq (,$(filter arch_8bit,$(FEATURES_USED)))
|
||||||
|
CFLAGS += -DFIXMATH_OPTIMIZE_8BIT
|
||||||
|
endif
|
||||||
|
|
||||||
|
DIRS += $(PKG_BUILDDIR)/libfixmath
|
||||||
INCLUDES += -I$(PKG_BUILDDIR)/libfixmath
|
INCLUDES += -I$(PKG_BUILDDIR)/libfixmath
|
||||||
|
|
||||||
ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
|
ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
|
||||||
|
DIRS += $(PKG_BUILDDIR)/unittests
|
||||||
INCLUDES += -I$(PKG_BUILDDIR)/unittests
|
INCLUDES += -I$(PKG_BUILDDIR)/unittests
|
||||||
endif
|
endif
|
||||||
|
|||||||
3
pkg/libfixmath/Makefile.libfixmath
Normal file
3
pkg/libfixmath/Makefile.libfixmath
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
MODULE = libfixmath
|
||||||
|
|
||||||
|
include $(RIOTBASE)/Makefile.base
|
||||||
3
pkg/libfixmath/Makefile.libfixmath-unittests
Normal file
3
pkg/libfixmath/Makefile.libfixmath-unittests
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
MODULE = libfixmath-unittests
|
||||||
|
|
||||||
|
include $(RIOTBASE)/Makefile.base
|
||||||
@ -1,22 +1,20 @@
|
|||||||
From 14eaa181746c7fe54b554a9dd98c2c37fd41b5bd Mon Sep 17 00:00:00 2001
|
From 7bcfa3205fc5f36445cc9b03d400278be2dad673 Mon Sep 17 00:00:00 2001
|
||||||
From: Martine Lenders <mail@martine-lenders.eu>
|
From: Martine Lenders <mail@martine-lenders.eu>
|
||||||
Date: Thu, 12 May 2016 16:07:35 +0200
|
Date: Thu, 12 May 2016 16:07:35 +0200
|
||||||
Subject: [PATCH 2/4] Fix warnings
|
Subject: [PATCH] Fix warnings
|
||||||
|
|
||||||
---
|
---
|
||||||
libfixmath/fix16_str.c | 8 ++++----
|
libfixmath/fix16_str.c | 8 ++++----
|
||||||
libfixmath/uint32.c | 10 +++++-----
|
libfixmath/uint32.c | 10 +++++-----
|
||||||
unittests/libfixmath-unittests.h | 18 ++++++++++++++++++
|
unittests/{unittests.h => libfixmath-unittests.h} | 1 -
|
||||||
unittests/unittests.h | 18 ------------------
|
3 files changed, 9 insertions(+), 10 deletions(-)
|
||||||
4 files changed, 27 insertions(+), 27 deletions(-)
|
rename unittests/{unittests.h => libfixmath-unittests.h} (99%)
|
||||||
create mode 100644 unittests/libfixmath-unittests.h
|
|
||||||
delete mode 100644 unittests/unittests.h
|
|
||||||
|
|
||||||
diff --git a/libfixmath/fix16_str.c b/libfixmath/fix16_str.c
|
diff --git a/libfixmath/fix16_str.c b/libfixmath/fix16_str.c
|
||||||
index eff906f..2c02c21 100644
|
index 07df864..f533907 100644
|
||||||
--- a/libfixmath/fix16_str.c
|
--- a/libfixmath/fix16_str.c
|
||||||
+++ b/libfixmath/fix16_str.c
|
+++ b/libfixmath/fix16_str.c
|
||||||
@@ -59,7 +59,7 @@ void fix16_to_str(fix16_t value, char *buf, int decimals)
|
@@ -71,7 +71,7 @@ void fix16_to_str(fix16_t value, char *buf, int decimals)
|
||||||
|
|
||||||
fix16_t fix16_from_str(const char *buf)
|
fix16_t fix16_from_str(const char *buf)
|
||||||
{
|
{
|
||||||
@ -25,7 +23,7 @@ index eff906f..2c02c21 100644
|
|||||||
buf++;
|
buf++;
|
||||||
|
|
||||||
/* Decode the sign */
|
/* Decode the sign */
|
||||||
@@ -70,7 +70,7 @@ fix16_t fix16_from_str(const char *buf)
|
@@ -82,7 +82,7 @@ fix16_t fix16_from_str(const char *buf)
|
||||||
/* Decode the integer part */
|
/* Decode the integer part */
|
||||||
uint32_t intpart = 0;
|
uint32_t intpart = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@ -34,7 +32,7 @@ index eff906f..2c02c21 100644
|
|||||||
{
|
{
|
||||||
intpart *= 10;
|
intpart *= 10;
|
||||||
intpart += *buf++ - '0';
|
intpart += *buf++ - '0';
|
||||||
@@ -90,7 +90,7 @@ fix16_t fix16_from_str(const char *buf)
|
@@ -102,7 +102,7 @@ fix16_t fix16_from_str(const char *buf)
|
||||||
|
|
||||||
uint32_t fracpart = 0;
|
uint32_t fracpart = 0;
|
||||||
uint32_t scale = 1;
|
uint32_t scale = 1;
|
||||||
@ -43,7 +41,7 @@ index eff906f..2c02c21 100644
|
|||||||
{
|
{
|
||||||
scale *= 10;
|
scale *= 10;
|
||||||
fracpart *= 10;
|
fracpart *= 10;
|
||||||
@@ -103,7 +103,7 @@ fix16_t fix16_from_str(const char *buf)
|
@@ -115,7 +115,7 @@ fix16_t fix16_from_str(const char *buf)
|
||||||
/* Verify that there is no garbage left over */
|
/* Verify that there is no garbage left over */
|
||||||
while (*buf != '\0')
|
while (*buf != '\0')
|
||||||
{
|
{
|
||||||
@ -65,61 +63,25 @@ index 2980ab9..855774d 100644
|
|||||||
- if(inVal >= (1 << 4)) { inVal >>= 4; tempOut += 4; }
|
- if(inVal >= (1 << 4)) { inVal >>= 4; tempOut += 4; }
|
||||||
- if(inVal >= (1 << 2)) { inVal >>= 2; tempOut += 2; }
|
- if(inVal >= (1 << 2)) { inVal >>= 2; tempOut += 2; }
|
||||||
- if(inVal >= (1 << 1)) { tempOut += 1; }
|
- if(inVal >= (1 << 1)) { tempOut += 1; }
|
||||||
+ if(inVal >= ((uint32_t) 1 << 16)) { inVal >>= 16; tempOut += 16; }
|
+ if(inVal >= ((uint32_t) 1 << 16)) { inVal >>= 16; tempOut += 16; }
|
||||||
+ if(inVal >= ((uint32_t) 1 << 8)) { inVal >>= 8; tempOut += 8; }
|
+ if(inVal >= ((uint32_t) 1 << 8)) { inVal >>= 8; tempOut += 8; }
|
||||||
+ if(inVal >= ((uint32_t) 1 << 4)) { inVal >>= 4; tempOut += 4; }
|
+ if(inVal >= ((uint32_t) 1 << 4)) { inVal >>= 4; tempOut += 4; }
|
||||||
+ if(inVal >= ((uint32_t) 1 << 2)) { inVal >>= 2; tempOut += 2; }
|
+ if(inVal >= ((uint32_t) 1 << 2)) { inVal >>= 2; tempOut += 2; }
|
||||||
+ if(inVal >= ((uint32_t) 1 << 1)) { tempOut += 1; }
|
+ if(inVal >= ((uint32_t) 1 << 1)) { tempOut += 1; }
|
||||||
return tempOut;
|
return tempOut;
|
||||||
}
|
}
|
||||||
diff --git a/unittests/libfixmath-unittests.h b/unittests/libfixmath-unittests.h
|
diff --git a/unittests/unittests.h b/unittests/libfixmath-unittests.h
|
||||||
new file mode 100644
|
similarity index 99%
|
||||||
index 0000000..bac57d2
|
rename from unittests/unittests.h
|
||||||
--- /dev/null
|
rename to unittests/libfixmath-unittests.h
|
||||||
+++ b/unittests/libfixmath-unittests.h
|
index bac57d2..57ad8f8 100644
|
||||||
@@ -0,0 +1,18 @@
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
+#define COMMENT(x) printf("\n----" x "----\n");
|
|
||||||
+#define STR(x) #x
|
|
||||||
+#define STR2(x) STR(x)
|
|
||||||
+#define TEST(x) \
|
|
||||||
+ if (!(x)) { \
|
|
||||||
+ fflush(stdout); \
|
|
||||||
+ fflush(stderr); \
|
|
||||||
+ fprintf(stderr, "\033[31;1mFAILED:\033[22;39m " __FILE__ ":" STR2(__LINE__) " " #x "\n"); \
|
|
||||||
+ status = 1; \
|
|
||||||
+ } else { \
|
|
||||||
+ fflush(stdout); \
|
|
||||||
+ fflush(stderr); \
|
|
||||||
+ printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
diff --git a/unittests/unittests.h b/unittests/unittests.h
|
|
||||||
deleted file mode 100644
|
|
||||||
index bac57d2..0000000
|
|
||||||
--- a/unittests/unittests.h
|
--- a/unittests/unittests.h
|
||||||
+++ /dev/null
|
+++ b/unittests/libfixmath-unittests.h
|
||||||
@@ -1,18 +0,0 @@
|
@@ -15,4 +15,3 @@
|
||||||
-#include <stdio.h>
|
printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
||||||
-
|
}
|
||||||
-#define COMMENT(x) printf("\n----" x "----\n");
|
|
||||||
-#define STR(x) #x
|
|
||||||
-#define STR2(x) STR(x)
|
|
||||||
-#define TEST(x) \
|
|
||||||
- if (!(x)) { \
|
|
||||||
- fflush(stdout); \
|
|
||||||
- fflush(stderr); \
|
|
||||||
- fprintf(stderr, "\033[31;1mFAILED:\033[22;39m " __FILE__ ":" STR2(__LINE__) " " #x "\n"); \
|
|
||||||
- status = 1; \
|
|
||||||
- } else { \
|
|
||||||
- fflush(stdout); \
|
|
||||||
- fflush(stderr); \
|
|
||||||
- printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
-
|
-
|
||||||
--
|
--
|
||||||
2.7.4
|
2.20.1
|
||||||
|
|
||||||
@ -1,164 +0,0 @@
|
|||||||
From 0f5bcfdbc93d40c47da70ea6aade3fbe89120b10 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Martine Lenders <mail@martine-lenders.eu>
|
|
||||||
Date: Thu, 12 May 2016 14:55:13 +0200
|
|
||||||
Subject: [PATCH 1/4] Move to RIOT Makefiles
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile | 8 ++++++
|
|
||||||
libfixmath/Makefile | 51 +++----------------------------------
|
|
||||||
unittests/Makefile | 73 ++---------------------------------------------------
|
|
||||||
3 files changed, 13 insertions(+), 119 deletions(-)
|
|
||||||
create mode 100644 Makefile
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..b65e4b5
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+ifneq (,$(filter libfixmath,$(USEMODULE)))
|
|
||||||
+ DIRS += libfixmath
|
|
||||||
+endif
|
|
||||||
+ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
|
|
||||||
+ DIRS += unittests
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
+include $(RIOTBASE)/Makefile.base
|
|
||||||
diff --git a/libfixmath/Makefile b/libfixmath/Makefile
|
|
||||||
index b284590..c875b98 100644
|
|
||||||
--- a/libfixmath/Makefile
|
|
||||||
+++ b/libfixmath/Makefile
|
|
||||||
@@ -1,48 +1,3 @@
|
|
||||||
-#Project settings
|
|
||||||
-PROJECT = libfixmath
|
|
||||||
-LIB =
|
|
||||||
-SRC = .
|
|
||||||
-INC =
|
|
||||||
-
|
|
||||||
-#Compiler settings
|
|
||||||
-CPP = gcc
|
|
||||||
-CC = gcc
|
|
||||||
-AS = gcc
|
|
||||||
-LD = gcc
|
|
||||||
-AR = ar
|
|
||||||
-CPP_FLAGS = -O2 $(INC) -Wall -Wextra -c
|
|
||||||
-CC_FLAGS = -O2 $(INC) -Wall -Wextra -c
|
|
||||||
-AS_FLAGS = $(CC_FLAGS) -D_ASSEMBLER_
|
|
||||||
-LD_FLAGS = -Wall
|
|
||||||
-
|
|
||||||
-# Find all source files
|
|
||||||
-SRC_CPP = $(foreach dir, $(SRC), $(wildcard $(dir)/*.cpp))
|
|
||||||
-SRC_C = $(foreach dir, $(SRC), $(wildcard $(dir)/*.c))
|
|
||||||
-SRC_S = $(foreach dir, $(SRC), $(wildcard $(dir)/*.S))
|
|
||||||
-OBJ_CPP = $(patsubst %.cpp, %.o, $(SRC_CPP))
|
|
||||||
-OBJ_C = $(patsubst %.c, %.o, $(SRC_C))
|
|
||||||
-OBJ_S = $(patsubst %.S, %.o, $(SRC_S))
|
|
||||||
-OBJ = $(OBJ_CPP) $(OBJ_C) $(OBJ_S)
|
|
||||||
-
|
|
||||||
-# Compile rules.
|
|
||||||
-.PHONY : all
|
|
||||||
-all: $(PROJECT).a
|
|
||||||
-
|
|
||||||
-$(PROJECT).a: $(OBJ)
|
|
||||||
- $(AR) rcs $(PROJECT).a $(OBJ)
|
|
||||||
-
|
|
||||||
-$(OBJ_CPP) : %.o : %.cpp
|
|
||||||
- $(CPP) $(CPP_FLAGS) -o $@ $<
|
|
||||||
-
|
|
||||||
-$(OBJ_C) : %.o : %.c
|
|
||||||
- $(CC) $(CC_FLAGS) -o $@ $<
|
|
||||||
-
|
|
||||||
-$(OBJ_S) : %.o : %.S
|
|
||||||
- $(AS) $(AS_FLAGS) -o $@ $<
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-# Clean rules
|
|
||||||
-.PHONY : clean
|
|
||||||
-clean:
|
|
||||||
- rm -f $(PROJECT).a $(OBJ)
|
|
||||||
+MODULE = libfixmath
|
|
||||||
+
|
|
||||||
+include $(RIOTBASE)/Makefile.base
|
|
||||||
diff --git a/unittests/Makefile b/unittests/Makefile
|
|
||||||
index 329caf4..245ffb9 100644
|
|
||||||
--- a/unittests/Makefile
|
|
||||||
+++ b/unittests/Makefile
|
|
||||||
@@ -1,72 +1,3 @@
|
|
||||||
-# Makefile for running the unittests of libfixmath.
|
|
||||||
-CC = gcc
|
|
||||||
-
|
|
||||||
-# Basic CFLAGS for debugging
|
|
||||||
-CFLAGS = -g -O0 -I../libfixmath -Wall -Wextra -Werror
|
|
||||||
-
|
|
||||||
-# The files required for tests
|
|
||||||
-FIX16_SRC = ../libfixmath/fix16.c ../libfixmath/fix16_sqrt.c ../libfixmath/fix16_str.c \
|
|
||||||
- ../libfixmath/fix16_exp.c ../libfixmath/fix16.h
|
|
||||||
-
|
|
||||||
-all: run_fix16_unittests run_fix16_exp_unittests run_fix16_str_unittests run_fix16_macros_unittests
|
|
||||||
-
|
|
||||||
-clean:
|
|
||||||
- rm -f fix16_unittests_????
|
|
||||||
-
|
|
||||||
-# The library is tested automatically under different compilations
|
|
||||||
-# options.
|
|
||||||
-#
|
|
||||||
-# Test naming:
|
|
||||||
-# r = rounding, n = no rounding
|
|
||||||
-# o = overflow detection, n = no overflow detection
|
|
||||||
-# 64 = int64_t math, 32 = int32_t math
|
|
||||||
-
|
|
||||||
-run_fix16_unittests: \
|
|
||||||
- fix16_unittests_ro64 fix16_unittests_no64 \
|
|
||||||
- fix16_unittests_rn64 fix16_unittests_nn64 \
|
|
||||||
- fix16_unittests_ro32 fix16_unittests_no32 \
|
|
||||||
- fix16_unittests_rn32 fix16_unittests_nn32 \
|
|
||||||
- fix16_unittests_ro08 fix16_unittests_no08 \
|
|
||||||
- fix16_unittests_rn08 fix16_unittests_nn08
|
|
||||||
- $(foreach test, $^, \
|
|
||||||
- echo $(test) && \
|
|
||||||
- ./$(test) > /dev/null && \
|
|
||||||
- ) true
|
|
||||||
-
|
|
||||||
-fix16_unittests_no64: DEFINES=-DFIXMATH_NO_ROUNDING
|
|
||||||
-fix16_unittests_rn64: DEFINES=-DFIXMATH_NO_OVERFLOW
|
|
||||||
-fix16_unittests_nn64: DEFINES=-DFIXMATH_NO_ROUNDING -DFIXMATH_NO_OVERFLOW
|
|
||||||
-fix16_unittests_ro32: DEFINES=-DFIXMATH_NO_64BIT
|
|
||||||
-fix16_unittests_no32: DEFINES=-DFIXMATH_NO_ROUNDING -DFIXMATH_NO_64BIT
|
|
||||||
-fix16_unittests_rn32: DEFINES=-DFIXMATH_NO_OVERFLOW -DFIXMATH_NO_64BIT
|
|
||||||
-fix16_unittests_nn32: DEFINES=-DFIXMATH_NO_OVERFLOW -DFIXMATH_NO_ROUNDING -DFIXMATH_NO_64BIT
|
|
||||||
-fix16_unittests_ro08: DEFINES=-DFIXMATH_OPTIMIZE_8BIT
|
|
||||||
-fix16_unittests_no08: DEFINES=-DFIXMATH_NO_ROUNDING -DFIXMATH_OPTIMIZE_8BIT
|
|
||||||
-fix16_unittests_rn08: DEFINES=-DFIXMATH_NO_OVERFLOW -DFIXMATH_OPTIMIZE_8BIT
|
|
||||||
-fix16_unittests_nn08: DEFINES=-DFIXMATH_NO_OVERFLOW -DFIXMATH_NO_ROUNDING -DFIXMATH_OPTIMIZE_8BIT
|
|
||||||
-
|
|
||||||
-fix16_unittests_% : fix16_unittests.c $(FIX16_SRC)
|
|
||||||
- $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ -lm
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-# Tests for the exponential function, run only in default config
|
|
||||||
-run_fix16_exp_unittests: fix16_exp_unittests
|
|
||||||
- ./fix16_exp_unittests > /dev/null
|
|
||||||
-
|
|
||||||
-fix16_exp_unittests: fix16_exp_unittests.c $(FIX16_SRC)
|
|
||||||
- $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ -lm
|
|
||||||
-
|
|
||||||
-# Tests for string conversion, run only in default config
|
|
||||||
-run_fix16_str_unittests: fix16_str_unittests
|
|
||||||
- ./fix16_str_unittests > /dev/null
|
|
||||||
-
|
|
||||||
-fix16_str_unittests: fix16_str_unittests.c $(FIX16_SRC)
|
|
||||||
- $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ -lm
|
|
||||||
-
|
|
||||||
-# Tests for literal macros, run only in default config
|
|
||||||
-run_fix16_macros_unittests: fix16_macros_unittests
|
|
||||||
- ./fix16_macros_unittests > /dev/null
|
|
||||||
-
|
|
||||||
-fix16_macros_unittests: fix16_macros_unittests.c $(FIX16_SRC)
|
|
||||||
- $(CC) $(CFLAGS) $(DEFINES) -o $@ $^ -lm
|
|
||||||
+MODULE = libfixmath-unittests
|
|
||||||
|
|
||||||
+include $(RIOTBASE)/Makefile.base
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
From bf974ff27fd48b8964bbe4813511adbe4c673a98 Mon Sep 17 00:00:00 2001
|
From 00aa19d5a431e414008e1475421cae8704ad775a Mon Sep 17 00:00:00 2001
|
||||||
From: Martine Lenders <mail@martine-lenders.eu>
|
From: Martine Lenders <mail@martine-lenders.eu>
|
||||||
Date: Thu, 12 May 2016 15:08:39 +0200
|
Date: Thu, 12 May 2016 15:08:39 +0200
|
||||||
Subject: [PATCH 3/4] Adapt unittests for RIOT
|
Subject: [PATCH] Adapt unittests for RIOT
|
||||||
|
|
||||||
---
|
---
|
||||||
unittests/fix16_exp_unittests.c | 12 ++++++------
|
unittests/fix16_exp_unittests.c | 12 ++++++------
|
||||||
@ -74,7 +74,7 @@ index cdfcfaf..6141021 100644
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
-#include "unittests.h"
|
-#include "unittests.h"
|
||||||
+#include "libfixmath-unittests.h"
|
+#include "libfixmath-unittests.h"
|
||||||
|
|
||||||
#define DO_TEST(i,m) \
|
#define DO_TEST(i,m) \
|
||||||
TEST(F16(i ## . ## m) == F16C(i,m)) \
|
TEST(F16(i ## . ## m) == F16C(i,m)) \
|
||||||
TEST(F16(i ## . ## m) == fix16_from_dbl(i ## . ## m))
|
TEST(F16(i ## . ## m) == fix16_from_dbl(i ## . ## m))
|
||||||
@ -145,7 +145,7 @@ index 9a301a1..b9fbf1a 100644
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
-#include "unittests.h"
|
-#include "unittests.h"
|
||||||
+#include "libfixmath-unittests.h"
|
+#include "libfixmath-unittests.h"
|
||||||
|
|
||||||
const fix16_t testcases[] = {
|
const fix16_t testcases[] = {
|
||||||
// Small numbers
|
// Small numbers
|
||||||
@@ -47,7 +47,7 @@ const fix16_t max_delta = 1;
|
@@ -47,7 +47,7 @@ const fix16_t max_delta = 1;
|
||||||
@ -247,10 +247,10 @@ index 9a301a1..b9fbf1a 100644
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
diff --git a/unittests/libfixmath-unittests.h b/unittests/libfixmath-unittests.h
|
diff --git a/unittests/libfixmath-unittests.h b/unittests/libfixmath-unittests.h
|
||||||
index bac57d2..a72d025 100644
|
index 57ad8f8..a3324bf 100644
|
||||||
--- a/unittests/libfixmath-unittests.h
|
--- a/unittests/libfixmath-unittests.h
|
||||||
+++ b/unittests/libfixmath-unittests.h
|
+++ b/unittests/libfixmath-unittests.h
|
||||||
@@ -5,14 +5,14 @@
|
@@ -5,13 +5,13 @@
|
||||||
#define STR2(x) STR(x)
|
#define STR2(x) STR(x)
|
||||||
#define TEST(x) \
|
#define TEST(x) \
|
||||||
if (!(x)) { \
|
if (!(x)) { \
|
||||||
@ -265,11 +265,10 @@ index bac57d2..a72d025 100644
|
|||||||
printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
+int fix16_exp_unittests(void);
|
+int fix16_exp_unittests(void);
|
||||||
+int fix16_macros_unittests(void);
|
+int fix16_macros_unittests(void);
|
||||||
+int fix16_str_unittests(void);
|
+int fix16_str_unittests(void);
|
||||||
+int fix16_unittests(void);
|
+int fix16_unittests(void);
|
||||||
--
|
--
|
||||||
2.7.4
|
2.20.1
|
||||||
|
|
||||||
@ -1,20 +1,19 @@
|
|||||||
From 8d0c6f21ba52fb0b00e95a218fd60a4f16b7ccde Mon Sep 17 00:00:00 2001
|
From 6033cf22749bfa20fe0a9b039b7725f9a372b6ad Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de>
|
From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de>
|
||||||
Date: Thu, 26 Jul 2018 17:47:59 +0200
|
Date: Thu, 26 Jul 2018 17:47:59 +0200
|
||||||
Subject: [PATCH 5/5] Replace __FILE__ by RIOT_FILE_NOPATH
|
Subject: [PATCH] Replace __FILE__ by RIOT_FILE_NOPATH
|
||||||
|
|
||||||
The binary file size changes when the RIOT directory is moved.
|
The binary file size changes when the RIOT directory is moved.
|
||||||
This caused the `libfixmath_unittests` to fail on my computer.
|
This caused the `libfixmath_unittests` to fail on my computer.
|
||||||
|
|
||||||
I used RIOT_FILE_NOPATH instead of RIOT_FILE_RELATIVE as 'TEST' is used a lot
|
I used RIOT_FILE_NOPATH instead of RIOT_FILE_RELATIVE as 'TEST' is used a lot
|
||||||
and it would allow more boards to be tested, full path is not that important.
|
and it would allow more boards to be tested, full path is not that important.
|
||||||
|
|
||||||
---
|
---
|
||||||
unittests/libfixmath-unittests.h | 2 +-
|
unittests/libfixmath-unittests.h | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/unittests/libfixmath-unittests.h b/unittests/libfixmath-unittests.h
|
diff --git a/unittests/libfixmath-unittests.h b/unittests/libfixmath-unittests.h
|
||||||
index a72d025..52ad7cb 100644
|
index a3324bf..bf6b063 100644
|
||||||
--- a/unittests/libfixmath-unittests.h
|
--- a/unittests/libfixmath-unittests.h
|
||||||
+++ b/unittests/libfixmath-unittests.h
|
+++ b/unittests/libfixmath-unittests.h
|
||||||
@@ -5,7 +5,7 @@
|
@@ -5,7 +5,7 @@
|
||||||
@ -26,6 +25,6 @@ index a72d025..52ad7cb 100644
|
|||||||
status = 1; \
|
status = 1; \
|
||||||
} else { \
|
} else { \
|
||||||
printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
printf("\033[32;1mOK:\033[22;39m " #x "\n"); \
|
||||||
--
|
--
|
||||||
2.7.4
|
2.20.1
|
||||||
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
From a32404a5acb702ffb28bada70cd6204ab74a771d Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de>
|
|
||||||
Date: Tue, 7 Nov 2017 16:42:27 +0100
|
|
||||||
Subject: [PATCH 4/4] Change conflicting module name for pkg root directory
|
|
||||||
|
|
||||||
Root directory and libfixmath both had 'libfixmath' module name.
|
|
||||||
---
|
|
||||||
Makefile | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index b65e4b5..2cc24d1 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
+MODULE = pkg-libfixmath
|
|
||||||
+
|
|
||||||
ifneq (,$(filter libfixmath,$(USEMODULE)))
|
|
||||||
DIRS += libfixmath
|
|
||||||
endif
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import sys
|
|
||||||
from testrunner import run, test_utils_interactive_sync
|
|
||||||
|
|
||||||
|
|
||||||
def expect_unary(child):
|
|
||||||
for _ in range(20):
|
|
||||||
for op_name in ('abs', 'sq', 'atan', 'exp'):
|
|
||||||
child.expect('{}\(-?\d+\.\d+\) = -?\d+\.\d+'.format(op_name))
|
|
||||||
|
|
||||||
for _ in range(20):
|
|
||||||
for op_name in ('sin', 'cos', 'tan'):
|
|
||||||
child.expect('{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
|
||||||
|
|
||||||
for _ in range(20):
|
|
||||||
for op_name in ('asin', 'acos'):
|
|
||||||
child.expect('{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
|
||||||
|
|
||||||
for _ in range(20):
|
|
||||||
for op_name in ('sqrt', 'log', 'log2', 'slog2'):
|
|
||||||
child.expect('{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
|
||||||
|
|
||||||
|
|
||||||
def expect_binary(child):
|
|
||||||
for _ in range(1500):
|
|
||||||
for op_name in ('add', 'sub', 'mul', 'div', 'mod', 'sadd', 'ssub',
|
|
||||||
'smul', 'sdiv', 'min', 'max'):
|
|
||||||
child.expect('{}\(-?\d+.\d+\, -?\d+.\d+\) = -?\d+.\d+'
|
|
||||||
.format(op_name))
|
|
||||||
|
|
||||||
|
|
||||||
def testfunc(child):
|
|
||||||
test_utils_interactive_sync(child)
|
|
||||||
child.expect_exact('Unary.')
|
|
||||||
expect_unary(child)
|
|
||||||
child.expect_exact('Binary.')
|
|
||||||
expect_binary(child)
|
|
||||||
child.expect_exact('SUCCESS')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(run(testfunc))
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
include ../Makefile.tests_common
|
|
||||||
|
|
||||||
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
|
|
||||||
arduino-mega2560 arduino-nano arduino-uno avr-rss2 \
|
|
||||||
atmega328p atmega256rfr2-xpro atmega1284p mega-xplained \
|
|
||||||
microduino-corerf waspmote-pro
|
|
||||||
# arduino-mega2560: builds locally but breaks travis (possibly because of
|
|
||||||
# differences in the toolchain)
|
|
||||||
# The MSP boards don't feature round(), exp(), and log(), which are used in the unittests
|
|
||||||
BOARD_BLACKLIST += chronos msb-430 msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1
|
|
||||||
|
|
||||||
USEMODULE += libfixmath-unittests
|
|
||||||
|
|
||||||
ifneq (,$(filter native,$(BOARD)))
|
|
||||||
export LINKFLAGS += -lm
|
|
||||||
endif
|
|
||||||
|
|
||||||
USEMODULE += printf_float
|
|
||||||
|
|
||||||
TEST_ON_CI_WHITELIST += native
|
|
||||||
|
|
||||||
include $(RIOTBASE)/Makefile.include
|
|
||||||
@ -78,12 +78,16 @@ def main():
|
|||||||
abs_error = abs(res_locals['result'] - float(res_locals['expected']))
|
abs_error = abs(res_locals['result'] - float(res_locals['expected']))
|
||||||
res_locals['result'] = '{:.4f}'.format(res_locals['result'])
|
res_locals['result'] = '{:.4f}'.format(res_locals['result'])
|
||||||
if abs_error > ABS_ERROR_LIMIT:
|
if abs_error > ABS_ERROR_LIMIT:
|
||||||
print('{}: {} != {}, {:.4f} > {}'.format(res_locals['input'], res_locals['result'], res_locals['expected'],
|
print('{}: {} != {}, {:.4f} > {}'.format(
|
||||||
abs_error, ABS_ERROR_LIMIT))
|
res_locals['input'],
|
||||||
|
res_locals['result'],
|
||||||
|
res_locals['expected'],
|
||||||
|
abs_error,
|
||||||
|
ABS_ERROR_LIMIT))
|
||||||
errors += 1
|
errors += 1
|
||||||
except:
|
except Exception as exc:
|
||||||
errors += 1
|
errors += 1
|
||||||
print('ERROR {}'.format(line))
|
print('ERROR: {}: {}'.format(line, exc))
|
||||||
|
|
||||||
print('{} calculations passed.'.format(total - errors))
|
print('{} calculations passed.'.format(total - errors))
|
||||||
if errors:
|
if errors:
|
||||||
@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "kernel_defines.h"
|
#include "kernel_defines.h"
|
||||||
#include "fix16.h"
|
#include "fix16.h"
|
||||||
@ -59,8 +60,20 @@ static void binary_ops(void)
|
|||||||
{ "max", fix16_max },
|
{ "max", fix16_max },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (fix16_t a = fix16_from_dbl(-5.0); a < fix16_from_dbl(5.0); a += fix16_from_dbl(0.25)) {
|
#ifdef BOARD_NATIVE
|
||||||
for (fix16_t b = fix16_from_dbl(-5.0); b < fix16_from_dbl(5.0); b += fix16_from_dbl(0.25)) {
|
fix16_t _min = fix16_from_dbl(-5.0);
|
||||||
|
fix16_t _max = fix16_from_dbl(5.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#else
|
||||||
|
fix16_t _min = fix16_from_dbl(-2.0);
|
||||||
|
fix16_t _max = fix16_from_dbl(2.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint16_t _range = (uint16_t)((fix16_to_int(_max) - fix16_to_int(_min)) / fix16_to_dbl(_step));
|
||||||
|
printf("COUNT: %u\n", (unsigned)(_range * (_range - 1)));
|
||||||
|
for (fix16_t a = _min; a < _max; a += _step) {
|
||||||
|
for (fix16_t b = _min; b < _max; b += _step) {
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -95,8 +108,18 @@ static void unary_ops(void)
|
|||||||
|
|
||||||
{ "exp", fix16_exp },
|
{ "exp", fix16_exp },
|
||||||
};
|
};
|
||||||
|
#ifdef BOARD_NATIVE
|
||||||
for (fix16_t input = fix16_from_dbl(-10.0); input < fix16_from_dbl(+10.0); input += fix16_from_dbl(0.25)) {
|
fix16_t _min = fix16_from_dbl(-10.0);
|
||||||
|
fix16_t _max = fix16_from_dbl(10.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#else
|
||||||
|
fix16_t _min = fix16_from_dbl(-2.0);
|
||||||
|
fix16_t _max = fix16_from_dbl(2.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#endif
|
||||||
|
uint8_t _count = (uint8_t)((fix16_to_int(_max) - fix16_to_int(_min)) / fix16_to_dbl(_step));
|
||||||
|
printf("COUNT: %d\n", _count);
|
||||||
|
for (fix16_t input = _min; input < _max; input += _step) {
|
||||||
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
||||||
fix16_t result = ops[o].fun(input);
|
fix16_t result = ops[o].fun(input);
|
||||||
|
|
||||||
@ -121,7 +144,16 @@ static void unary_ops(void)
|
|||||||
{ "tan", fix16_tan },
|
{ "tan", fix16_tan },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (fix16_t input = fix16_from_dbl(-M_PI/2); input < fix16_from_dbl(+M_PI/2); input += fix16_from_dbl(0.05)) {
|
fix16_t _min = fix16_from_dbl(-M_PI/2);
|
||||||
|
fix16_t _max = fix16_from_dbl(+M_PI/2);
|
||||||
|
#ifdef BOARD_NATIVE
|
||||||
|
fix16_t _step = fix16_from_dbl(0.05);
|
||||||
|
#else
|
||||||
|
fix16_t _step = fix16_from_dbl(0.1);
|
||||||
|
#endif
|
||||||
|
uint8_t _count = (uint8_t)((fix16_to_dbl(_max) - fix16_to_dbl(_min)) / fix16_to_dbl(_step));
|
||||||
|
printf("COUNT: %d\n", _count);
|
||||||
|
for (fix16_t input = _min; input < _max; input += _step) {
|
||||||
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
||||||
fix16_t result = ops[o].fun(input);
|
fix16_t result = ops[o].fun(input);
|
||||||
|
|
||||||
@ -144,7 +176,16 @@ static void unary_ops(void)
|
|||||||
{ "acos", fix16_acos },
|
{ "acos", fix16_acos },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (fix16_t input = fix16_from_dbl(-1.0); input < fix16_from_dbl(+1.0); input += fix16_from_dbl(0.05)) {
|
fix16_t _min = fix16_from_dbl(-1.0);
|
||||||
|
fix16_t _max = fix16_from_dbl(1.0);
|
||||||
|
#ifdef BOARD_NATIVE
|
||||||
|
fix16_t _step = fix16_from_dbl(0.05);
|
||||||
|
#else
|
||||||
|
fix16_t _step = fix16_from_dbl(0.2);
|
||||||
|
#endif
|
||||||
|
uint8_t _count = (uint8_t)((fix16_to_int(_max) - fix16_to_int(_min)) / fix16_to_dbl(_step));
|
||||||
|
printf("COUNT: %d\n", _count);
|
||||||
|
for (fix16_t input = _min; input < _max; input += _step) {
|
||||||
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
||||||
fix16_t result = ops[o].fun(input);
|
fix16_t result = ops[o].fun(input);
|
||||||
|
|
||||||
@ -170,7 +211,18 @@ static void unary_ops(void)
|
|||||||
{ "slog2", fix16_slog2 },
|
{ "slog2", fix16_slog2 },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (fix16_t input = fix16_from_dbl(0.05); input < fix16_from_dbl(+10.0); input += fix16_from_dbl(0.25)) {
|
#ifdef BOARD_NATIVE
|
||||||
|
fix16_t _min = fix16_from_dbl(0.05);
|
||||||
|
fix16_t _max = fix16_from_dbl(+10.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#else
|
||||||
|
fix16_t _min = fix16_from_dbl(0.05);
|
||||||
|
fix16_t _max = fix16_from_dbl(+5.0);
|
||||||
|
fix16_t _step = fix16_from_dbl(0.25);
|
||||||
|
#endif
|
||||||
|
uint8_t _count = (uint8_t)((fix16_to_int(_max) - fix16_to_int(_min)) / fix16_to_dbl(_step));
|
||||||
|
printf("COUNT: %d\n", _count);
|
||||||
|
for (fix16_t input = _min; input < _max; input += _step) {
|
||||||
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
for (unsigned o = 0; o < ARRAY_SIZE(ops); ++o) {
|
||||||
fix16_t result = ops[o].fun(input);
|
fix16_t result = ops[o].fun(input);
|
||||||
|
|
||||||
58
tests/pkg_libfixmath/tests/01-run.py
Executable file
58
tests/pkg_libfixmath/tests/01-run.py
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from testrunner import run, test_utils_interactive_sync
|
||||||
|
|
||||||
|
|
||||||
|
def expect_unary(child):
|
||||||
|
child.expect(r'COUNT: (\d+)')
|
||||||
|
count = int(child.match.group(1))
|
||||||
|
assert count > 0
|
||||||
|
for _ in range(count):
|
||||||
|
for op_name in ('abs', 'sq', 'atan', 'exp'):
|
||||||
|
child.expect(r'{}\(-?\d+\.\d+\) = -?\d+\.\d+'.format(op_name))
|
||||||
|
|
||||||
|
child.expect(r'COUNT: (\d+)')
|
||||||
|
count = int(child.match.group(1))
|
||||||
|
assert count > 0
|
||||||
|
for _ in range(count):
|
||||||
|
for op_name in ('sin', 'cos', 'tan'):
|
||||||
|
child.expect(r'{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
||||||
|
|
||||||
|
child.expect(r'COUNT: (\d+)')
|
||||||
|
count = int(child.match.group(1))
|
||||||
|
assert count > 0
|
||||||
|
for _ in range(count):
|
||||||
|
for op_name in ('asin', 'acos'):
|
||||||
|
child.expect(r'{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
||||||
|
|
||||||
|
child.expect(r'COUNT: (\d+)')
|
||||||
|
count = int(child.match.group(1))
|
||||||
|
assert count > 0
|
||||||
|
for _ in range(count):
|
||||||
|
for op_name in ('sqrt', 'log', 'log2', 'slog2'):
|
||||||
|
child.expect(r'{}\(-?\d+.\d+\) = -?\d+.\d+'.format(op_name))
|
||||||
|
|
||||||
|
|
||||||
|
def expect_binary(child):
|
||||||
|
child.expect(r'COUNT: (\d+)')
|
||||||
|
count = int(child.match.group(1))
|
||||||
|
assert count > 0
|
||||||
|
for _ in range(count):
|
||||||
|
for op_name in ('add', 'sub', 'mul', 'div', 'mod', 'sadd', 'ssub',
|
||||||
|
'smul', 'sdiv', 'min', 'max'):
|
||||||
|
child.expect(r'{}\(-?\d+.\d+\, -?\d+.\d+\) = -?\d+.\d+'
|
||||||
|
.format(op_name))
|
||||||
|
|
||||||
|
|
||||||
|
def testfunc(child):
|
||||||
|
test_utils_interactive_sync(child)
|
||||||
|
child.expect_exact('Unary.')
|
||||||
|
expect_unary(child)
|
||||||
|
child.expect_exact('Binary.')
|
||||||
|
expect_binary(child)
|
||||||
|
child.expect_exact('SUCCESS')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(run(testfunc))
|
||||||
13
tests/pkg_libfixmath_unittests/Makefile
Normal file
13
tests/pkg_libfixmath_unittests/Makefile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
include ../Makefile.tests_common
|
||||||
|
|
||||||
|
USEMODULE += libfixmath-unittests
|
||||||
|
|
||||||
|
ifneq (,$(filter native,$(BOARD)))
|
||||||
|
export LINKFLAGS += -lm
|
||||||
|
endif
|
||||||
|
|
||||||
|
USEMODULE += printf_float
|
||||||
|
|
||||||
|
TEST_ON_CI_WHITELIST += native
|
||||||
|
|
||||||
|
include $(RIOTBASE)/Makefile.include
|
||||||
Loading…
x
Reference in New Issue
Block a user