diff options
author | joshua <joshua@joshuayun.com> | 2023-12-30 23:54:31 -0500 |
---|---|---|
committer | joshua <joshua@joshuayun.com> | 2023-12-30 23:54:31 -0500 |
commit | 86608c6770cf08c138a2bdab5855072f64be09ef (patch) | |
tree | 494a61b3ef37e76f9235a0d10f5c93d97290a35f /Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common | |
download | sdr-software-86608c6770cf08c138a2bdab5855072f64be09ef.tar.gz |
Diffstat (limited to 'Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common')
157 files changed, 17483 insertions, 0 deletions
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/arr_desc/arr_desc.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/arr_desc/arr_desc.h new file mode 100644 index 0000000..effab26 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/arr_desc/arr_desc.h @@ -0,0 +1,220 @@ +#ifndef _ARR_DESC_H_
+#define _ARR_DESC_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include <stdint.h>
+#include <string.h> /* memset() */
+#include "../util/util.h" /* CONCAT() */
+
+/*--------------------------------------------------------------------------------*/
+/* Type Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Array-descriptor struct.
+ */
+typedef struct ARR_DESC_struct
+{
+ void * data_ptr; /* Pointer to the array contents. */
+ int32_t element_count; /* Number of current elements. */
+ int32_t element_size; /* Size of current elements in bytes. */
+ int32_t underlying_size; /* Size of underlying array in bytes. */
+} ARR_DESC_t;
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Prefix of the array variable's name when creating an array and an array
+ * descriptor at the same time.
+ */
+#define ARR_DESC_ARR_PREFIX ARR_DESC_ARR_
+
+/**
+ * Evaluate to the array variable's name when creating an array and an array
+ * descriptor at the same time.
+ */
+#define ARR_DESC_ARR_NAME(name) \
+ CONCAT(ARR_DESC_ARR_PREFIX, name)
+
+/**
+ * Define an #ARR_DESC_t by itself.
+ *
+ * @note The user must supply an array to store the data used by the
+ * #ARR_DESC_t.
+ */
+#define ARR_DESC_INTERNAL_DEFINE(name, data_ptr, \
+ element_count, element_size) \
+ ARR_DESC_t name = { \
+ data_ptr, \
+ element_count, \
+ element_size, \
+ element_count * element_size \
+ } \
+
+/**
+ * Define both an array and an #ARR_DESC_t that describes it.
+ *
+ * @note Use the #CURLY() macro for the content field; it provides the curly
+ * braces necessary for an array initialization.
+ */
+#define ARR_DESC_DEFINE(type, name, element_count, content) \
+ type ARR_DESC_ARR_NAME(name)[element_count] = content; \
+ ARR_DESC_INTERNAL_DEFINE(name, \
+ &ARR_DESC_ARR_NAME(name), \
+ element_count, \
+ sizeof(type)) /* Note the lacking semicolon */
+
+/**
+ * Create a #ARR_DESC_t which refers to a subset of the data in another.
+ *
+ * The new #ARR_DESC_t shares the same underlying array as the aliased
+ * #ARR_DESC_t, but only describes a subset of the originals values.
+ */
+#define ARR_DESC_DEFINE_SUBSET(name, original, element_cnt) \
+ ARR_DESC_INTERNAL_DEFINE(name, \
+ &ARR_DESC_ARR_NAME(original), \
+ element_cnt, \
+ sizeof(ARR_DESC_ARR_NAME(original)[0]) \
+ ) /* Note the lacking semicolon */
+
+/**
+ * Creat an #ARR_DESC_t which points to the data in an existing array.
+ *
+ * @param start_idx Offset in array_ptr of first element.
+ * @param element_cnt Number of elements to include in the #ARR_DESC_t.
+ *
+ * @example
+ *
+ * float my_floats[4] = {0.0f, 1.0f, 2.0f, 3.0f};
+ *
+ * ARR_DESC_DEFINE_USING_ARR(my_arr_desc, my_floats, 1, 3);
+ *
+ * printf("Element 0: %f\n", ARR_DESC_ELT(float, 0, &my_arr_desc));
+ * printf("Element 1: %f\n", ARR_DESC_ELT(float, 1, &my_arr_desc));
+ *
+ * Outputs:
+ *
+ * Element 0: 1.000000
+ * Element 1: 2.000000
+ *
+ * @warning There are no checks in place to catch invalid start indices; This
+ * is left to the user.
+ */
+#define ARR_DESC_DEFINE_USING_ARR(type, name, array_ptr, start_idx, element_cnt) \
+ ARR_DESC_INTERNAL_DEFINE( \
+ name, \
+ (type *) (array_ptr + start_idx), \
+ element_cnt, \
+ sizeof(type) \
+ ) /* Note the lacking semicolon*/
+
+/**
+ * Declare an #ARR_DESC_t object.
+ */
+#define ARR_DESC_DECLARE(name) \
+ extern ARR_DESC_t name /* Note the lacking semicolon */
+
+/**
+ * Evaluate to the number of bytes stored in the #ARR_DESC_t.
+ */
+#define ARR_DESC_BYTES(arr_desc_ptr) \
+ ((arr_desc_ptr)->element_count * (arr_desc_ptr)->element_size)
+
+/**
+ * Set the contents of #ARR_DESC_t to value.
+ */
+#define ARR_DESC_MEMSET(arr_desc_ptr, value, bytes) \
+ do \
+ { \
+ memset((arr_desc_ptr)->data_ptr, \
+ value, \
+ BOUND(0, \
+ (arr_desc_ptr)->underlying_size, \
+ bytes) \
+ ); \
+ } while (0)
+
+/**
+ * Perform a memcpy of 'bytes' bytes from the source #ARR_DESC_t to the
+ * destination #ARR_DESC_t.
+ */
+#define ARR_DESC_MEMCPY(arr_desc_dest_ptr, arr_desc_src_ptr, bytes) \
+ do \
+ { \
+ memcpy((arr_desc_dest_ptr)->data_ptr, \
+ (arr_desc_src_ptr)->data_ptr, \
+ BOUND(0, \
+ (arr_desc_dest_ptr)->underlying_size, \
+ bytes)); \
+ } while (0)
+
+/**
+ * Evaluate to true if the source #ARR_DESC_t contents will fit into the
+ * destination #ARR_DESC_t and false otherwise.
+ */
+#define ARR_DESC_COPYABLE(arr_desc_dest_ptr, arr_desc_src_ptr) \
+ (ARR_DESC_BYTES(arr_desc_src_ptr) <= \
+ (arr_desc_dest_ptr)->underlying_size)
+
+/**
+ * Copy all the data from the source #ARR_DESC_t to the destination
+ * #ARR_DESC_t.
+ *
+ * @note If the destination #ARR_DESC_t is too small to fit the source data the
+ * copy is aborted and nothing happens.
+ */
+#define ARR_DESC_COPY(arr_desc_dest_ptr, arr_desc_src_ptr) \
+ do \
+ { \
+ if (ARR_DESC_COPYABLE(arr_desc_dest_ptr, \
+ arr_desc_src_ptr)) \
+ { \
+ ARR_DESC_MEMCPY(arr_desc_dest_ptr, \
+ arr_desc_src_ptr, \
+ ARR_DESC_BYTES(arr_desc_src_ptr)); \
+ /* Update the properties*/ \
+ (arr_desc_dest_ptr)->element_count = \
+ (arr_desc_src_ptr)->element_count; \
+ (arr_desc_dest_ptr)->element_size = \
+ (arr_desc_src_ptr)->element_size; \
+ } \
+ } while (0)
+
+/**
+ * Compare the data in two #ARR_DESC_t structs for the specified number of
+ * bytes.
+ */
+#define ARR_DESC_MEMCMP(arr_desc_ptr_a, arr_desc_ptr_b, bytes) \
+ memcmp((arr_desc_ptr_a)->data_ptr, \
+ (arr_desc_ptr_b)->data_ptr, \
+ bytes) /* Note the lacking semicolon */ \
+
+/**
+ * Zero out the contents of the #ARR_DESC_t.
+ */
+#define ARR_DESC_ZERO(arr_desc_ptr) \
+ ARR_DESC_MEMSET(arr_desc_ptr, \
+ 0, \
+ (arr_desc_ptr)->underlying_size)
+
+/**
+ * Evaluate to the data address in #ARR_DESC_t at offset.
+ */
+#define ARR_DESC_DATA_ADDR(type, arr_desc_ptr, offset) \
+ ((void*)(((type *) \
+ ((arr_desc_ptr)->data_ptr)) \
+ + offset))
+
+/**
+ * Evaluate to the element in #ARR_DESC_t with type at idx.
+ */
+#define ARR_DESC_ELT(type, idx, arr_desc_ptr) \
+ (*((type *) ARR_DESC_DATA_ADDR(type, \
+ arr_desc_ptr, \
+ idx)))
+
+#endif /* _ARR_DESC_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest.h new file mode 100644 index 0000000..9d0af06 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest.h @@ -0,0 +1,17 @@ +#ifndef _JTEST_H_
+#define _JTEST_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_fw.h"
+#include "jtest_test.h"
+#include "jtest_test_define.h"
+#include "jtest_test_call.h"
+#include "jtest_group.h"
+#include "jtest_group_define.h"
+#include "jtest_group_call.h"
+#include "jtest_cycle.h"
+
+#endif /* _JTEST_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_cycle.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_cycle.h new file mode 100644 index 0000000..96d13cd --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_cycle.h @@ -0,0 +1,79 @@ +#ifndef _JTEST_CYCLE_H_
+#define _JTEST_CYCLE_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_fw.h" /* JTEST_DUMP_STRF() */
+#include "jtest_systick.h"
+#include "jtest_util.h" /* STR() */
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Module Variables */
+/*--------------------------------------------------------------------------------*/
+extern const char * JTEST_CYCLE_STRF;
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Wrap the function call, fn_call, to count execution cycles and display the
+ * results.
+ */
+/* skipp function name + param
+#define JTEST_COUNT_CYCLES(fn_call) \
+ do \
+ { \
+ uint32_t __jtest_cycle_end_count; \
+ \
+ JTEST_SYSTICK_RESET(SysTick); \
+ JTEST_SYSTICK_START(SysTick); \
+ \
+ fn_call; \
+ \
+ __jtest_cycle_end_count = \
+ JTEST_SYSTICK_VALUE(SysTick); \
+ \
+ JTEST_SYSTICK_RESET(SysTick); \
+ JTEST_DUMP_STRF(JTEST_CYCLE_STRF, \
+ STR(fn_call), \
+ (JTEST_SYSTICK_INITIAL_VALUE - \
+ __jtest_cycle_end_count)); \
+ } while (0)
+*/
+#ifndef ARMv7A
+
+#define JTEST_COUNT_CYCLES(fn_call) \
+ do \
+ { \
+ uint32_t __jtest_cycle_end_count; \
+ \
+ JTEST_SYSTICK_RESET(SysTick); \
+ JTEST_SYSTICK_START(SysTick); \
+ \
+ fn_call; \
+ \
+ __jtest_cycle_end_count = \
+ JTEST_SYSTICK_VALUE(SysTick); \
+ \
+ JTEST_SYSTICK_RESET(SysTick); \
+ JTEST_DUMP_STRF(JTEST_CYCLE_STRF, \
+ (JTEST_SYSTICK_INITIAL_VALUE - \
+ __jtest_cycle_end_count)); \
+ } while (0)
+
+#else
+/* TODO */
+#define JTEST_COUNT_CYCLES(fn_call) \
+ do \
+ { \
+ fn_call; \
+ } while (0)
+
+#endif
+
+#endif /* _JTEST_CYCLE_H_ */
+
+
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_define.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_define.h new file mode 100644 index 0000000..cbec329 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_define.h @@ -0,0 +1,37 @@ +#ifndef _JTEST_DEFINE_H_
+#define _JTEST_DEFINE_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Makes a symbol for use as a struct name. Names made this way have two parts;
+ * the first parts is a prefix common to all structs of that class. The second
+ * is a specifier which differs for each instance of that struct type.
+ */
+#define JTEST_STRUCT_NAME(prefix, specifier) \
+ CONCAT(prefix, specifier)
+
+/**
+ * Define a struct with type with a name generated by #JTEST_STRUCT_NAME().
+ */
+#define JTEST_DEFINE_STRUCT(type, struct_name) \
+ type struct_name
+
+/**
+ * Declare a struct with type with a name generated by #JTEST_STRUCT_NAME().
+ */
+#define JTEST_DECLARE_STRUCT(struct_definition) \
+ extern struct_definition
+
+/**
+ * Define and initialize a struct (created with JTEST_DEFINE_STRUCT()) and
+ * initialize it with init_values.
+ */
+#define JTEST_INIT_STRUCT(struct_definition, init_values) \
+ struct_definition = { \
+ init_values \
+ }
+
+#endif /* _JTEST_DEFINE_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_fw.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_fw.h new file mode 100644 index 0000000..8c6df9d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_fw.h @@ -0,0 +1,282 @@ +#ifndef _JTEST_FW_H_
+#define _JTEST_FW_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include <stdint.h> /* int32_t */
+#include <string.h> /* strcpy() */
+#include <stdio.h> /* sprintf() */
+#include "jtest_pf.h" /* Extend JTEST_FW_t with Pass/Fail data */
+#include "jtest_group.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Type Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * A struct used to interface with the Keil Debugger.
+ */
+typedef struct JTEST_FW_struct
+{
+ /* Action Triggers: The Keil debugger monitors these values for changes. In
+ * response to a change, the debugger executes code on the host. */
+ volatile int32_t test_start;
+ volatile int32_t test_end;
+ volatile int32_t group_start;
+ volatile int32_t group_end;
+ volatile int32_t dump_str;
+ volatile int32_t dump_data;
+ volatile int32_t exit_fw;
+
+ JTEST_GROUP_t * current_group_ptr;
+
+ /* Buffers: The C-code cannot send strings and data directly to the
+ * debugging framework. Instead, the debugger can be told to read 128 byte
+ * (by default) chunks of memory. Data received in this manner requires
+ * post-processing to be legible.*/
+ char * str_buffer;
+ char * data_buffer;
+
+ /* Pass/Fail Data */
+ JTEST_PF_MEMBERS;
+
+} JTEST_FW_t;
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Default name for the JTEST_FW struct.
+ *
+ * Define your own if you want the variable containing the #JTEST_FW_t to have
+ * a different name.
+ */
+#ifndef JTEST_FW
+#define JTEST_FW JTEST_FW
+#endif
+
+/**
+ * Default name for the JTEST_FW_STR_BUFFER.
+ *
+ * Define your own if you want the variable containing the char buffer to have
+ * a different name.
+ */
+#ifndef JTEST_FW_STR_BUFFER
+#define JTEST_FW_STR_BUFFER JTEST_FW_STR_BUFFER
+#endif
+
+/**
+ * Size of the #JTEST_FW_t, output string-buffer.
+ *
+ * If you change this value, make sure the "dump_str_fn" and "dump_data_fn"
+ * functions in jtest_fns.ini uses the same size. If you aren't sure, read the
+ * documentation Keil Debugger Command 'DISPLAY'.
+ */
+#define JTEST_BUF_SIZE 256
+
+
+/**
+ * The maximum number of bytes output at once using #JTEST_DUMP_STRF().
+ */
+#define JTEST_STR_MAX_OUTPUT_SIZE 128
+
+/**
+ * The maximum number of block transimissions needed to send a string from a
+ * buffer with JTEST_BUF_SIZE.
+ */
+#define JTEST_STR_MAX_OUTPUT_SEGMENTS \
+ (JTEST_BUF_SIZE / JTEST_STR_MAX_OUTPUT_SIZE)
+
+/**
+ * Initialize the JTEST framework.
+ */
+#define JTEST_INIT() \
+ do \
+ { \
+ JTEST_FW.str_buffer = JTEST_FW_STR_BUFFER; \
+ } while (0)
+
+/* Debugger Action-triggering Macros */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Dispatch macro to trigger various actions in the Keil Debugger.
+ */
+#define JTEST_TRIGGER_ACTION(action_name) \
+ do \
+ { \
+ action_name(); \
+ } while (0)
+
+/**
+ * Trigger the "Test Start" action in the Keil Debugger.
+ */
+#define JTEST_ACT_TEST_START() \
+ JTEST_TRIGGER_ACTION(test_start)
+
+/**
+ * Trigger the "Test End" action in the Keil Debugger.
+ */
+#define JTEST_ACT_TEST_END() \
+ JTEST_TRIGGER_ACTION(test_end)
+
+
+/**
+ * Trigger the "Group Start" action in the Keil Debugger.
+ */
+#define JTEST_ACT_GROUP_START() \
+ JTEST_TRIGGER_ACTION(group_start)
+
+/**
+ * Trigger the "Group End" action in the Keil Debugger.
+ */
+#define JTEST_ACT_GROUP_END() \
+ JTEST_TRIGGER_ACTION(group_end)
+
+
+/**
+ * Fill the buffer named buf_name with value and dump it to the Keil debugger
+ * using action.
+ */
+#if defined(ARMv7A) || defined(FILEIO)
+
+#define JTEST_ACT_DUMP(action, buf_name, value) \
+ do \
+ { \
+ JTEST_CLEAR_BUFFER(buf_name); \
+ printf("%s",value); \
+ strcpy(JTEST_FW.buf_name, (value)); \
+ JTEST_TRIGGER_ACTION(action); \
+ } while (0)
+
+#else
+
+#define JTEST_ACT_DUMP(action, buf_name, value) \
+ do \
+ { \
+ JTEST_CLEAR_BUFFER(buf_name); \
+ strcpy(JTEST_FW.buf_name, (value)); \
+ JTEST_TRIGGER_ACTION(action); \
+ } while (0)
+
+#endif
+/**
+ * Trigger the "Exit Framework" action in the Keil Debugger.
+ */
+#define JTEST_ACT_EXIT_FW() \
+ do \
+ { \
+ JTEST_TRIGGER_ACTION(exit_fw); \
+ } while (0)
+
+
+/* Buffer Manipulation Macros */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Clear the JTEST_FW buffer with name buf_name.
+ */
+#define JTEST_CLEAR_BUFFER(buf_name) \
+ do \
+ { \
+ memset(JTEST_FW.buf_name, 0, JTEST_BUF_SIZE); \
+ } while (0)
+
+/**
+ * Clear the memory needed for the JTEST_FW's string buffer.
+ */
+#define JTEST_CLEAR_STR_BUFFER() \
+ JTEST_CLEAR_BUFFER(str_buffer)
+
+/**
+ * Clear the memory needed for the JTEST_FW's data buffer.
+ */
+#define JTEST_CLEAR_DATA_BUFFER() \
+ JTEST_CLEAR_BUFFER(data_buffer)
+
+/**
+ * Dump the given string to the Keil Debugger.
+ */
+#define JTEST_DUMP_STR(string) \
+ JTEST_ACT_DUMP(dump_str, str_buffer, string)
+
+/**
+ * Dump a formatted string to the Keil Debugger.
+ */
+#if defined(ARMv7A) || defined(FILEIO)
+
+#define JTEST_DUMP_STRF(format_str, ... ) \
+ do \
+ { \
+ JTEST_CLEAR_STR_BUFFER(); \
+ sprintf(JTEST_FW.str_buffer,format_str, __VA_ARGS__); \
+ printf("%s",JTEST_FW.str_buffer); \
+ jtest_dump_str_segments(); \
+ } while (0)
+
+#else
+
+#define JTEST_DUMP_STRF(format_str, ... ) \
+ do \
+ { \
+ JTEST_CLEAR_STR_BUFFER(); \
+ sprintf(JTEST_FW.str_buffer,format_str, __VA_ARGS__); \
+ jtest_dump_str_segments(); \
+ } while (0)
+
+#endif
+
+/* Pass/Fail Macros */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Increment the number of passed tests in #JTEST_FW.
+ */
+#define JTEST_FW_INC_PASSED(amount) \
+ JTEST_PF_INC_PASSED(&JTEST_FW, amount)
+
+/**
+ * Increment the number of passed tests in #JTEST_FW.
+ */
+#define JTEST_FW_INC_FAILED(amount) \
+ JTEST_PF_INC_FAILED(&JTEST_FW, amount)
+
+/* Manipulating the Current Group */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Evaluate to the current_group_ptr in #JTEST_FW.
+ */
+#define JTEST_CURRENT_GROUP_PTR() \
+ (JTEST_FW.current_group_ptr)
+
+#define JTEST_SET_CURRENT_GROUP(group_ptr) \
+ do \
+ { \
+ JTEST_CURRENT_GROUP_PTR() = group_ptr; \
+ } while (0)
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Global Variables */
+/*--------------------------------------------------------------------------------*/
+extern char JTEST_FW_STR_BUFFER[JTEST_BUF_SIZE];
+extern volatile JTEST_FW_t JTEST_FW;
+
+/*--------------------------------------------------------------------------------*/
+/* Function Prototypes */
+/*--------------------------------------------------------------------------------*/
+void jtest_dump_str_segments(void);
+
+void test_start (void);
+void test_end (void);
+void group_start (void);
+void group_end (void);
+void dump_str (void);
+void dump_data (void);
+void exit_fw (void);
+
+
+#endif /* _JTEST_FW_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group.h new file mode 100644 index 0000000..3b37ae4 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group.h @@ -0,0 +1,66 @@ +#ifndef _JTEST_GROUP_H_
+#define _JTEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_pf.h"
+#include "jtest_util.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Type Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * A struct which represents a group of #JTEST_TEST_t structs. This struct is
+ * used to run the group of tests, and report on their outcomes.
+ */
+typedef struct JTEST_GROUP_struct
+{
+ void (* group_fn_ptr) (void); /**< Pointer to the test group */
+ char * name_str; /**< Name of the group */
+
+ /* Extend the #JTEST_GROUP_t with Pass/Fail information.*/
+ JTEST_PF_MEMBERS;
+} JTEST_GROUP_t;
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Set the name of JTEST_GROUP_t.
+ */
+#define JTEST_GROUP_SET_NAME(group_ptr, name) \
+ JTEST_SET_STRUCT_ATTRIBUTE(group_ptr, name_str, name)
+
+#define JTEST_GROUP_SET_FN(group_ptr, fn_ptr) \
+ JTEST_SET_STRUCT_ATTRIBUTE(group_ptr, group_fn_ptr, fn_ptr)
+
+/**
+ * Increment the number of tests passed in the JTEST_GROUP_t pointed to by
+ * group_ptr.
+ */
+#define JTEST_GROUP_INC_PASSED(group_ptr, amount) \
+ JTEST_PF_INC_PASSED(group_ptr, amount)
+
+/**
+ * Increment the number of tests failed in the JTEST_GROUP_t pointed to by
+ * group_ptr.
+ */
+#define JTEST_GROUP_INC_FAILED(group_ptr, amount) \
+ JTEST_PF_INC_FAILED(group_ptr, amount)
+
+/**
+ * Reset the pass/fail information of the #JTEST_GROUP_t pointed to by
+ * group_ptr.
+ */
+#define JTEST_GROUP_RESET_PF(group_ptr) \
+ do \
+ { \
+ JTEST_PF_RESET_PASSED(group_ptr); \
+ JTEST_PF_RESET_FAILED(group_ptr); \
+ } while (0)
+
+#endif /* _JTEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_call.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_call.h new file mode 100644 index 0000000..d565a4c --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_call.h @@ -0,0 +1,126 @@ +#ifndef _JTEST_GROUP_CALL_H_
+#define _JTEST_GROUP_CALL_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_fw.h"
+#include <inttypes.h>
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Execute the test in the #JTEST_GROUP_t struct associated witht he identifier
+ * group_fn.
+ */
+#define JTEST_GROUP_RUN(group_fn) \
+ do \
+ { \
+ JTEST_DUMP_STR("Group Name:\n"); \
+ JTEST_DUMP_STR(JTEST_GROUP_STRUCT_NAME(group_fn).name_str); \
+ JTEST_GROUP_STRUCT_NAME(group_fn).group_fn_ptr(); \
+ } while (0)
+
+
+/**
+ * Update the enclosing #JTEST_GROUP_t's pass/fail information using the
+ * current #JTEST_GROUP_t's.
+ *
+ * @param group_ptr Pointer to the current #JTEST_GROUP_t.
+ * @param parent_ptr Pointer to the enclosing #JTEST_GROUP_t.
+ *
+ * @warning Only run this if the current #JTEST_GROUP_t is being called within
+ * the context of another #JTEST_GROUP_t.
+ */
+#define JTEST_GROUP_UPDATE_PARENT_GROUP_PF(group_ptr, parent_group_ptr) \
+ do \
+ { \
+ JTEST_GROUP_INC_PASSED(parent_group_ptr, \
+ (group_ptr)->passed); \
+ JTEST_GROUP_INC_FAILED(parent_group_ptr, \
+ (group_ptr)->failed); \
+ } while (0)
+
+/**
+ * Update the #JTEST_FW's pass/fail information using the current
+ * #JTEST_GROUP_t's.
+ */
+#define JTEST_GROUP_UPDATE_FW_PF(group_ptr) \
+ do \
+ { \
+ JTEST_FW_INC_PASSED((group_ptr)->passed); \
+ JTEST_FW_INC_FAILED((group_ptr)->failed); \
+ } while (0)
+
+/**
+ * Update the enclosing context with the current #JTEST_GROUP_t's pass/fail
+ * information. If this group isn't in an enclosing group, it updates the
+ * #JTEST_FW's pass/fail info by default.
+ */
+#define JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF(group_ptr, \
+ parent_group_ptr) \
+ do \
+ { \
+ /* Update the pass fail counts in the parent group */ \
+ if (parent_group_ptr /* Null implies Top*/) \
+ { \
+ JTEST_GROUP_UPDATE_PARENT_GROUP_PF( \
+ group_ptr, \
+ parent_group_ptr); \
+ } else { \
+ JTEST_GROUP_UPDATE_FW_PF( \
+ group_ptr); \
+ } \
+ } while (0)
+
+/**
+ * Dump the results of running the #JTEST_GROUP_t to the Keil Debugger.
+ */
+#define JTEST_GROUP_DUMP_RESULTS(group_ptr) \
+ do \
+ { \
+ JTEST_DUMP_STRF( \
+ "Tests Run: %" PRIu32 "\n" \
+ "----------\n" \
+ " Passed: %" PRIu32 "\n" \
+ " Failed: %" PRIu32 "\n", \
+ (group_ptr)->passed + (group_ptr)->failed, \
+ (group_ptr)->passed, \
+ (group_ptr)->failed); \
+ } while (0)
+
+/**
+ * Call the #JTEST_GROUP_t associated with the identifier group_fn.
+ */
+#define JTEST_GROUP_CALL(group_fn) \
+ do \
+ { /* Save the current group from JTEST_FW_t before swapping */ \
+ /* it to this group (in order to restore it later )*/ \
+ JTEST_GROUP_t * __jtest_temp_group_ptr = \
+ JTEST_CURRENT_GROUP_PTR(); \
+ JTEST_SET_CURRENT_GROUP(&JTEST_GROUP_STRUCT_NAME(group_fn)); \
+ \
+ /* Reset this group's pass/fail count. Each group */ \
+ /* should only remember counts for its last execution. */ \
+ JTEST_GROUP_RESET_PF(JTEST_CURRENT_GROUP_PTR()); \
+ \
+ /* Run the current group */ \
+ JTEST_ACT_GROUP_START(); \
+ JTEST_GROUP_RUN(group_fn); \
+ JTEST_ACT_GROUP_END(); \
+ \
+ /* Update the pass fail counts in the parent group (or FW) */ \
+ JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF( \
+ JTEST_CURRENT_GROUP_PTR(), \
+ __jtest_temp_group_ptr); \
+ \
+ JTEST_GROUP_DUMP_RESULTS(JTEST_CURRENT_GROUP_PTR()); \
+ \
+ /* Restore the previously current group */ \
+ JTEST_SET_CURRENT_GROUP(__jtest_temp_group_ptr); \
+ } while (0)
+
+#endif /* _JTEST_GROUP_CALL_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_define.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_define.h new file mode 100644 index 0000000..b3a86c0 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_group_define.h @@ -0,0 +1,87 @@ +#ifndef _JTEST_GROUP_DEFINE_H_
+#define _JTEST_GROUP_DEFINE_H_
+
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_util.h"
+#include "jtest_define.h"
+#include "jtest_group.h"
+
+/* For defining macros with optional arguments */
+#include "opt_arg/opt_arg.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Prefix for all #JTEST_GROUP_t structs.
+ */
+#define JTEST_GROUP_STRUCT_NAME_PREFIX G_JTEST_GROUP_STRUCT_
+
+/**
+ * Define test template used by #JTEST_GROUP_t tests.
+ */
+#define JTEST_GROUP_FN_TEMPLATE(group_fn) \
+ void group_fn(void)
+
+#define JTEST_GROUP_FN_PROTOTYPE JTEST_GROUP_FN_TEMPLATE /**< Alias for
+ #JTEST_GROUP_FN_TEMPLATE. */
+
+/**
+ * Evaluate to the name of the #JTEST_GROUP_t struct associated with group_fn.
+ */
+#define JTEST_GROUP_STRUCT_NAME(group_fn) \
+ JTEST_STRUCT_NAME(JTEST_GROUP_STRUCT_NAME_PREFIX, group_fn)
+
+/**
+ * Define a #JTEST_GROUP_t struct based on the given group_fn.
+ */
+#define JTEST_GROUP_DEFINE_STRUCT(group_fn) \
+ JTEST_DEFINE_STRUCT(JTEST_GROUP_t, \
+ JTEST_GROUP_STRUCT_NAME(group_fn))
+
+/**
+ * Declare a #JTEST_GROUP_t struct based on the given group_fn.
+ */
+#define JTEST_GROUP_DECLARE_STRUCT(group_fn) \
+ JTEST_DECLARE_STRUCT(JTEST_GROUP_DEFINE_STRUCT(group_fn))
+
+/**
+ * Contents needed to initialize a JTEST_GROUP_t struct.
+ */
+#define JTEST_GROUP_STRUCT_INIT(group_fn) \
+ group_fn, \
+ STR_NL(group_fn), \
+ JTEST_PF_MEMBER_INIT
+
+/**
+ * Initialize the contents of a #JTEST_GROUP_t struct.
+ */
+#define JTEST_GROUP_INIT(group_fn) \
+ JTEST_GROUP_DEFINE_STRUCT(group_fn) = { \
+ JTEST_GROUP_STRUCT_INIT(group_fn) \
+ }
+
+/* Test Definition Macro */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Define a #JTEST_GROUP_t object and a test function.
+ */
+#define JTEST_DEFINE_GROUP(group_fn) \
+ JTEST_GROUP_FN_PROTOTYPE(group_fn); \
+ JTEST_GROUP_INIT(group_fn); \
+ JTEST_GROUP_FN_PROTOTYPE(group_fn) /* Notice the lacking semicolon */
+
+/**
+ * Declare a #JTEST_GROUP_t object and a test function prototype.
+ */
+#define JTEST_DECLARE_GROUP(group_fn) \
+ JTEST_GROUP_FN_PROTOTYPE(group_fn); \
+ JTEST_GROUP_DECLARE_STRUCT(group_fn) /* Note the lacking semicolon */
+
+#endif /* _JTEST_GROUP_DEFINE_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_pf.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_pf.h new file mode 100644 index 0000000..2b005b6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_pf.h @@ -0,0 +1,85 @@ +#ifndef _JTEST_PF_H_
+#define _JTEST_PF_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Purpose */
+/*--------------------------------------------------------------------------------*/
+/* jtest_pf.h Contains macros useful for capturing pass/fail data. */
+
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Members that can be added to other structs to extend them pass/fail data and
+ * corresponding functionality.
+ */
+#define JTEST_PF_MEMBERS \
+ uint32_t passed; \
+ uint32_t failed /* Note the lacking semicolon*/ \
+
+/**
+ * Used for initializing JTEST_PF_MEMBERS in a struct declaration.
+ */
+#define JTEST_PF_MEMBER_INIT \
+ 0, \
+ 0
+
+/* Member-Incrementing Macros */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Dispatch macro for incrementing #JTEST_PF_MEMBERS.
+ *
+ * @param xxx Values: 'passed', 'failed'
+ */
+#define JTEST_PF_INC_XXX(xxx, struct_pf_ptr, amount) \
+ do \
+ { \
+ ((struct_pf_ptr)->xxx) += (amount); \
+ } while (0)
+
+/**
+ * Specialization of the #JTEST_PF_INC_XXX macro to increment the passed
+ * member.
+ */
+#define JTEST_PF_INC_PASSED(struct_pf_ptr, amount) \
+ JTEST_PF_INC_XXX(passed, struct_pf_ptr, amount)
+
+
+/**
+ * Specialization of the #JTEST_PF_INC_XXX macro to increment the failed
+ * member.
+ */
+#define JTEST_PF_INC_FAILED(struct_pf_ptr, amount) \
+ JTEST_PF_INC_XXX(failed, struct_pf_ptr, amount)
+
+
+/* Member-Resetting Macros */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Dispatch macro for setting #JTEST_PF_MEMBERS to zero.
+ *
+ * @param xxx Values: 'passed', 'failed'
+ */
+#define JTEST_PF_RESET_XXX(xxx, struct_pf_ptr) \
+ do \
+ { \
+ ((struct_pf_ptr)->xxx) = UINT32_C(0); \
+ } while (0)
+
+/**
+ * Specialization of #JTEST_PF_RESET_XXX for the 'passed' member.
+ */
+#define JTEST_PF_RESET_PASSED(struct_pf_ptr) \
+ JTEST_PF_RESET_XXX(passed, struct_pf_ptr)
+
+/**
+ * Specialization of #JTEST_PF_RESET_XXX for the 'failed' member.
+ */
+#define JTEST_PF_RESET_FAILED(struct_pf_ptr) \
+ JTEST_PF_RESET_XXX(failed, struct_pf_ptr)
+
+#endif /* _JTEST_PF_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_systick.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_systick.h new file mode 100644 index 0000000..9f320b2 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_systick.h @@ -0,0 +1,94 @@ +#ifndef _JTEST_SYSTICK_H_
+#define _JTEST_SYSTICK_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+/* Get access to the SysTick structure. */
+#if defined ARMCM0
+ #include "ARMCM0.h"
+#elif defined ARMCM0P
+ #include "ARMCM0plus.h"
+#elif defined ARMCM0P_MPU
+ #include "ARMCM0plus_MPU.h"
+#elif defined ARMCM3
+ #include "ARMCM3.h"
+#elif defined ARMCM4
+ #include "ARMCM4.h"
+#elif defined ARMCM4_FP
+ #include "ARMCM4_FP.h"
+#elif defined ARMCM7
+ #include "ARMCM7.h"
+#elif defined ARMCM7_SP
+ #include "ARMCM7_SP.h"
+#elif defined ARMCM7_DP
+ #include "ARMCM7_DP.h"
+#elif defined ARMSC000
+ #include "ARMSC000.h"
+#elif defined ARMSC300
+ #include "ARMSC300.h"
+#elif defined ARMv8MBL
+ #include "ARMv8MBL.h"
+#elif defined ARMv8MML
+ #include "ARMv8MML.h"
+#elif defined ARMv8MML_DSP
+ #include "ARMv8MML_DSP.h"
+#elif defined ARMv8MML_SP
+ #include "ARMv8MML_SP.h"
+#elif defined ARMv8MML_DSP_SP
+ #include "ARMv8MML_DSP_SP.h"
+#elif defined ARMv8MML_DP
+ #include "ARMv8MML_DP.h"
+#elif defined ARMv8MML_DSP_DP
+ #include "ARMv8MML_DSP_DP.h"
+#elif defined ARMv7A
+ /* TODO */
+#else
+ #warning "no appropriate header file found!"
+#endif
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Initial value for the SysTick module.
+ *
+ * This is also the maximum value, important as SysTick is a decrementing counter.
+ */
+#define JTEST_SYSTICK_INITIAL_VALUE 0xFFFFFF
+
+/**
+ * Reset the SysTick, decrementing timer to it's maximum value and disable it.
+ *
+ * This macro should leave the SysTick timer in a state that's ready for cycle
+ * counting.
+ */
+#define JTEST_SYSTICK_RESET(systick_ptr) \
+ do \
+ { \
+ (systick_ptr)->CTRL = SysTick_CTRL_CLKSOURCE_Msk; \
+ \
+ (systick_ptr)->LOAD = JTEST_SYSTICK_INITIAL_VALUE; \
+ (systick_ptr)->VAL = JTEST_SYSTICK_INITIAL_VALUE; \
+ } while (0)
+
+/**
+ * Start the SysTick timer, sourced by the processor clock.
+ */
+#define JTEST_SYSTICK_START(systick_ptr) \
+ do \
+ { \
+ (systick_ptr)->CTRL = \
+ SysTick_CTRL_ENABLE_Msk | \
+ SysTick_CTRL_CLKSOURCE_Msk; \
+ } while (0)
+
+/**
+ * Evaluate to the current value of the SysTick timer.
+ */
+#define JTEST_SYSTICK_VALUE(systick_ptr) \
+ ((systick_ptr)->VAL)
+
+#endif /* _JTEST_SYSTICK_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test.h new file mode 100644 index 0000000..023145f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test.h @@ -0,0 +1,100 @@ +#ifndef _JTEST_TEST_H_
+#define _JTEST_TEST_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include <stdint.h>
+#include "jtest_util.h"
+#include "jtest_test_ret.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Type Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * A struct which represents a Test in the JTEST framework. This struct is
+ * used to enable, run, and describe the test it represents.
+ */
+typedef struct JTEST_TEST_struct
+{
+ JTEST_TEST_RET_t ( * test_fn_ptr)(void); /**< Pointer to the test function. */
+ char * test_fn_str; /**< Name of the test function */
+ char * fut_str; /**< Name of the function under test. */
+
+ /**
+ * Flags that govern how the #JTEST_TEST_t behaves.
+ */
+ union {
+ struct {
+ unsigned enabled : 1;
+ unsigned unused : 7;
+ } bits;
+ uint8_t byte; /* Access all flags at once. */
+ } flags;
+
+} JTEST_TEST_t;
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Assign a test function to the #JTEST_TEST_t struct.
+ */
+#define JTEST_TEST_SET_FN(jtest_test_ptr, fn_ptr) \
+ JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, test_fn_ptr, fn_ptr)
+
+/**
+ * Specify a function under test (FUT) for the #JTEST_TEST_t struct.
+ */
+#define JTEST_TEST_SET_FUT(jtest_test_ptr, str) \
+ JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, fut_str, str)
+
+/* Macros concerning JTEST_TEST_t flags */
+/*--------------------------------------------------------------------------------*/
+
+#define JTEST_TEST_FLAG_SET 1 /**< Value of a set #JTEST_TEST_t flag. */
+#define JTEST_TEST_FLAG_CLR 0 /**< Value of a cleared #JTEST_TEST_t flag. */
+
+/**
+ * Evaluate to the flag in #JTEST_TEST_t having flag_name.
+ */
+#define JTEST_TEST_FLAG(jtest_test_ptr, flag_name) \
+ ((jtest_test_ptr)->flags.bits.flag_name)
+
+/**
+ * Dispatch macro for setting and clearing #JTEST_TEST_t flags.
+ *
+ * @param jtest_test_ptr Pointer to a #JTEST_TEST_t struct.
+ * @param flag_name Name of the flag to set in #JTEST_TEST_t.flags.bits
+ * @param xxx Vaid values: "SET" or "CLR"
+ *
+ * @note This function depends on JTEST_TEST_FLAG_SET and JTEST_TEST_FLAG_CLR.
+ */
+#define JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, xxx) \
+ do \
+ { \
+ JTEST_TEST_FLAG(jtest_test_ptr, flag_name) = JTEST_TEST_FLAG_##xxx ; \
+ } while (0)
+
+/**
+ * Specification of #JTEST_TEST_XXX_FLAG to set #JTEST_TEST_t flags.
+ */
+#define JTEST_TEST_SET_FLAG(jtest_test_ptr, flag_name) \
+ JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, SET)
+
+/**
+ * Specification of #JTEST_TEST_XXX_FLAG to clear #JTEST_TEST_t flags.
+ */
+#define JTEST_TEST_CLR_FLAG(jtest_test_ptr, flag_name) \
+ JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, CLR)
+
+/**
+ * Evaluate to true if the #JTEST_TEST_t is enabled.
+ */
+#define JTEST_TEST_IS_ENABLED(jtest_test_ptr) \
+ (JTEST_TEST_FLAG(jtest_test_ptr, enabled) == JTEST_TEST_FLAG_SET)
+
+#endif /* _JTEST_TEST_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_call.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_call.h new file mode 100644 index 0000000..9325185 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_call.h @@ -0,0 +1,121 @@ +#ifndef _JTEST_TEST_CALL_H_
+#define _JTEST_TEST_CALL_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "jtest_test.h"
+#include "jtest_test_define.h"
+#include "jtest_fw.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Exectute the test in the #JTEST_TEST_t struct associated with the identifier
+ * test_fn and store the result in retval.
+ */
+#define JTEST_TEST_RUN(retval, test_fn) \
+ do \
+ { \
+ JTEST_DUMP_STR("Test Name:\n"); \
+ JTEST_DUMP_STR(JTEST_TEST_STRUCT_NAME(test_fn).test_fn_str); \
+ JTEST_DUMP_STR("Function Under Test:\n"); \
+ JTEST_DUMP_STR(JTEST_TEST_STRUCT_NAME(test_fn).fut_str); \
+ retval = JTEST_TEST_STRUCT_NAME(test_fn).test_fn_ptr(); \
+ } while (0)
+
+/**
+ * Update the enclosing #JTEST_GROUP_t's pass/fail information based on
+ * test_retval.
+ *
+ * @param test_retval A #JTEST_TEST_RET_enum for the current test.
+ *
+ * @warning Only use if #JTEST_TEST_t is called in the context of a
+ * #JTEST_GROUP_t.
+ */
+#define JTEST_TEST_UPDATE_PARENT_GROUP_PF(test_retval) \
+ do \
+ { \
+ /* Update enclosing JTEST_GROUP_t with pass/fail info */ \
+ if (test_retval == JTEST_TEST_PASSED) \
+ { \
+ JTEST_GROUP_INC_PASSED(JTEST_CURRENT_GROUP_PTR(), 1); \
+ } else { \
+ JTEST_GROUP_INC_FAILED(JTEST_CURRENT_GROUP_PTR(), 1); \
+ } \
+ } while (0)
+
+/**
+ * Update the #JTEST_FW with pass/fail information based on test_retval.
+ *
+ * @param test_retval A #JTEST_TEST_RET_enum for the current test.
+ */
+#define JTEST_TEST_UPDATE_FW_PF(test_retval) \
+ do \
+ { \
+ /* Update the JTEST_FW with pass/fail info */ \
+ if (test_retval == JTEST_TEST_PASSED) \
+ { \
+ JTEST_FW_INC_PASSED( 1); \
+ } else { \
+ JTEST_FW_INC_FAILED(1); \
+ } \
+ } while (0)
+
+/**
+ * Update the enclosing JTEST_GROUP_t's pass/fail information, or the
+ * #JTEST_FW's if this test has no enclosing #JTEST_GROUP_t.
+ *
+ * @param test_retval A #JTEST_TEST_RET_enum for the current test.
+ */
+#define JTEST_TEST_UPDATE_PARENT_GROUP_OR_FW_PF(test_retval) \
+ do \
+ { \
+ /* Update pass-fail information */ \
+ if (JTEST_CURRENT_GROUP_PTR() /* Non-null */) \
+ { \
+ JTEST_TEST_UPDATE_PARENT_GROUP_PF(test_retval); \
+ } else { \
+ JTEST_TEST_UPDATE_FW_PF(test_retval); \
+ } \
+ } while (0)
+
+/**
+ * Dump the results of the test to the Keil Debugger.
+ */
+#define JTEST_TEST_DUMP_RESULTS(test_retval) \
+ do \
+ { \
+ if (test_retval == JTEST_TEST_PASSED) \
+ { \
+ JTEST_DUMP_STR("Test Passed\n"); \
+ } else { \
+ JTEST_DUMP_STR("Test Failed\n"); \
+ } \
+ } while (0)
+
+/**
+ * Call the #JTEST_TEST_t assocaited with the identifier test_fn.
+ */
+#define JTEST_TEST_CALL(test_fn) \
+ do \
+ { \
+ if (JTEST_TEST_IS_ENABLED(&JTEST_TEST_STRUCT_NAME(test_fn))) \
+ { \
+ /* Default to failure */ \
+ JTEST_TEST_RET_t __jtest_test_ret = JTEST_TEST_FAILED; \
+ \
+ JTEST_ACT_TEST_START(); \
+ JTEST_TEST_RUN(__jtest_test_ret, test_fn); \
+ \
+ /* Update pass-fail information */ \
+ JTEST_TEST_UPDATE_PARENT_GROUP_OR_FW_PF(__jtest_test_ret); \
+ \
+ JTEST_TEST_DUMP_RESULTS(__jtest_test_ret); \
+ JTEST_ACT_TEST_END(); \
+ } \
+ } while (0)
+
+#endif /* _JTEST_TEST_CALL_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_define.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_define.h new file mode 100644 index 0000000..1447dd0 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_define.h @@ -0,0 +1,133 @@ +#ifndef _JTEST_TEST_DEFINE_H_
+#define _JTEST_TEST_DEFINE_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "jtest_util.h"
+#include "jtest_define.h"
+#include "jtest_test.h"
+
+/* For defining macros with optional arguments */
+#include "opt_arg/opt_arg.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Prefix for all #JTEST_TEST_t structs.
+ */
+#define JTEST_TEST_STRUCT_NAME_PREFIX G_JTEST_TEST_STRUCT_
+
+/**
+ * Define test template used by #JTEST_TEST_t tests.
+ */
+#define JTEST_TEST_FN_TEMPLATE(test_fn) \
+ JTEST_TEST_RET_t test_fn(void)
+
+#define JTEST_TEST_FN_PROTOTYPE JTEST_TEST_FN_TEMPLATE /**< Alias for
+ * #JTEST_TEST_FN_TEMPLATE. */
+
+/**
+ * Evaluate to the name of the #JTEST_TEST_t struct associated with test_fn.
+ */
+#define JTEST_TEST_STRUCT_NAME(test_fn) \
+ JTEST_STRUCT_NAME(JTEST_TEST_STRUCT_NAME_PREFIX, test_fn)
+
+/**
+ * Define a #JTEST_TEST_t struct based on the given test_fn.
+ */
+#define JTEST_TEST_DEFINE_STRUCT(test_fn) \
+ JTEST_DEFINE_STRUCT(JTEST_TEST_t, \
+ JTEST_TEST_STRUCT_NAME(test_fn))
+
+/**
+ * Declare a #JTEST_TEST_t struct based on the given test_fn.
+ */
+#define JTEST_TEST_DECLARE_STRUCT(test_fn) \
+ JTEST_DECLARE_STRUCT(JTEST_TEST_DEFINE_STRUCT(test_fn))
+
+/**
+ * Contents needed to initialize a JTEST_TEST_t struct.
+ */
+#define JTEST_TEST_STRUCT_INIT(test_fn, fut, enable) \
+ test_fn, \
+ STR_NL(test_fn), \
+ STR_NL(fut), \
+ { \
+ { \
+ enable, \
+ 0 \
+ } \
+ } \
+
+
+/**
+ * Initialize the contents of a #JTEST_TEST_t struct.
+ */
+#define JTEST_TEST_INIT(test_fn, fut, enable) \
+ JTEST_TEST_DEFINE_STRUCT(test_fn) = { \
+ JTEST_TEST_STRUCT_INIT(test_fn, fut, enable) \
+ }
+
+/* Test Definition Macro */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Define a #JTEST_TEST_t object and a test function.
+ */
+#define _JTEST_DEFINE_TEST(test_fn, fut, enable) \
+ JTEST_TEST_FN_PROTOTYPE(test_fn); \
+ JTEST_TEST_INIT(test_fn, fut, enable); \
+ JTEST_TEST_FN_PROTOTYPE(test_fn) /* Notice the lacking semicolon */
+
+/**
+ * Declare a #JTEST_TEST_t object and a test function prototype.
+ */
+#define JTEST_DECLARE_TEST(test_fn) \
+ JTEST_TEST_FN_PROTOTYPE(test_fn); \
+ JTEST_TEST_DECLARE_STRUCT(test_fn) /* Note the lacking semicolon */
+
+/*--------------------------------------------------------------------------------*/
+/* Macros with optional arguments */
+/*--------------------------------------------------------------------------------*/
+
+/* Top-level Interface */
+#define JTEST_DEFINE_TEST(...) \
+ JTEST_DEFINE_TEST_(PP_NARG(__VA_ARGS__), ##__VA_ARGS__)
+
+/* Dispatch Macro*/
+#define JTEST_DEFINE_TEST_(N, ...) \
+ SPLICE(JTEST_DEFINE_TEST_, N)(__VA_ARGS__)
+
+/* Default Arguments */
+#define JTEST_DEFINE_TEST_DEFAULT_FUT /* Blank */
+#define JTEST_DEFINE_TEST_DEFAULT_ENABLE \
+ JTEST_TRUE /* Tests enabled by
+ * default. */
+
+/* Dispatch Cases*/
+#define JTEST_DEFINE_TEST_1(_1) \
+ _JTEST_DEFINE_TEST( \
+ _1, \
+ JTEST_DEFINE_TEST_DEFAULT_FUT, \
+ JTEST_DEFINE_TEST_DEFAULT_ENABLE \
+ )
+
+#define JTEST_DEFINE_TEST_2(_1, _2) \
+ _JTEST_DEFINE_TEST( \
+ _1, \
+ _2, \
+ JTEST_DEFINE_TEST_DEFAULT_ENABLE \
+ )
+
+#define JTEST_DEFINE_TEST_3(_1, _2, _3) \
+ _JTEST_DEFINE_TEST( \
+ _1, \
+ _2, \
+ _3 \
+ )
+
+#endif /* _JTEST_TEST_DEFINE_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_ret.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_ret.h new file mode 100644 index 0000000..c3176e5 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_ret.h @@ -0,0 +1,17 @@ +#ifndef _JTEST_TEST_RET_H_
+#define _JTEST_TEST_RET_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Type Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Values a #JTEST_TEST_t can return.
+ */
+typedef enum JTEST_TEST_RET_enum
+{
+ JTEST_TEST_PASSED,
+ JTEST_TEST_FAILED
+} JTEST_TEST_RET_t;
+
+#endif /* _JTEST_TEST_RET_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_util.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_util.h new file mode 100644 index 0000000..3e07d2e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_util.h @@ -0,0 +1,27 @@ +#ifndef _JTEST_UTIL_H_
+#define _JTEST_UTIL_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "util/util.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/* Define boolean values for the framework. */
+#define JTEST_TRUE 1 /**< Value used for TRUE in JTEST. */
+#define JTEST_FALSE 0 /**< Value used for FALSE in JTEST. */
+
+/**
+ * Set the value of the attribute in the struct to by struct_ptr to value.
+ */
+#define JTEST_SET_STRUCT_ATTRIBUTE(struct_ptr, attribute, value) \
+ do \
+ { \
+ (struct_ptr)->attribute = (value); \
+ } while (0)
+
+#endif /* _JTEST_UTIL_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/opt_arg.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/opt_arg.h new file mode 100644 index 0000000..683be1d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/opt_arg.h @@ -0,0 +1,15 @@ +#ifndef _OPT_ARG_H_
+#define _OPT_ARG_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "pp_narg.h"
+#include "splice.h"
+
+/* If you are Joseph Jaoudi, you have a snippet which expands into an
+ example. If you are not Joseph, but possess his code, study the examples. If
+ you have no examples, turn back contact Joseph. */
+
+#endif /* _OPT_ARG_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/pp_narg.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/pp_narg.h new file mode 100644 index 0000000..d3248f4 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/pp_narg.h @@ -0,0 +1,25 @@ +#ifndef _PP_NARG_H_
+#define _PP_NARG_H_
+
+#define PP_NARG(...) \
+ PP_NARG_(__VA_ARGS__,PP_RSEQ_N())
+#define PP_NARG_(...) \
+ PP_ARG_N(__VA_ARGS__)
+#define PP_ARG_N( \
+ _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \
+ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \
+ _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \
+ _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \
+ _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \
+ _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \
+ _61,_62,_63,N,...) N
+#define PP_RSEQ_N() \
+ 63,62,61,60, \
+ 59,58,57,56,55,54,53,52,51,50, \
+ 49,48,47,46,45,44,43,42,41,40, \
+ 39,38,37,36,35,34,33,32,31,30, \
+ 29,28,27,26,25,24,23,22,21,20, \
+ 19,18,17,16,15,14,13,12,11,10, \
+ 9,8,7,6,5,4,3,2,1,0
+
+#endif /* _PP_NARG_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/splice.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/splice.h new file mode 100644 index 0000000..ec9142b --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/opt_arg/splice.h @@ -0,0 +1,8 @@ +#ifndef _SPLICE_H_
+#define _SPLICE_H_
+
+#define SPLICE(a,b) SPLICE_1(a,b)
+#define SPLICE_1(a,b) SPLICE_2(a,b)
+#define SPLICE_2(a,b) a##b
+
+#endif /* _SPLICE_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/util/util.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/util/util.h new file mode 100644 index 0000000..f56e0e6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/util/util.h @@ -0,0 +1,52 @@ +#ifndef _UTIL_H_
+#define _UTIL_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Convert a symbol to a string and add a 'NewLine'.
+ */
+#define STR_NL(x) STR1_NL(x)
+#define STR1_NL(x) (STR2_NL(x)"\n")
+#define STR2_NL(x) #x
+
+/**
+ * Convert a symbol to a string.
+ */
+#define STR(x) STR1(x)
+#define STR1(x) STR2(x)
+#define STR2(x) #x
+
+/**
+ * Concatenate two symbols.
+ */
+#define CONCAT(a, b) CONCAT1(a, b)
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a##b
+
+
+/**
+ * Place curly braces around a varaible number of macro arguments.
+ */
+#define CURLY(...) {__VA_ARGS__}
+
+/**
+ * Place parenthesis around a variable number of macro arguments.
+ */
+#define PAREN(...) (__VA_ARGS__)
+
+/* Standard min/max macros. */
+#define MIN(x,y) (((x) < (y)) ? (x) : (y) )
+#define MAX(x,y) (((x) > (y)) ? (x) : (y) )
+
+/**
+ * Bound value using low and high limits.
+ *
+ * Evaluate to a number in the range, endpoint inclusive.
+ */
+#define BOUND(low, high, value) \
+ MAX(MIN(high, value), low)
+
+#endif /* _UTIL_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_cycle.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_cycle.c new file mode 100644 index 0000000..24d552d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_cycle.c @@ -0,0 +1,9 @@ +#include "../inc/jtest_cycle.h"
+#include <inttypes.h>
+
+/*--------------------------------------------------------------------------------*/
+/* Define Module Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* const char * JTEST_CYCLE_STRF = "Running: %s\nCycles: %" PRIu32 "\n"; */
+const char * JTEST_CYCLE_STRF = "Cycles: %" PRIu32 "\n"; /* function name + parameter string skipped */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_dump_str_segments.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_dump_str_segments.c new file mode 100644 index 0000000..c3a9bf8 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_dump_str_segments.c @@ -0,0 +1,36 @@ +#include "jtest_fw.h"
+
+/**
+ * Dump the JTEST_FW.str_buffer the Keil framework in pieces.
+ *
+ * The JTEST_FW.str_buffer contains more characters than the Keil framework can
+ * dump at once. This function dumps them in blocks.
+ */
+void jtest_dump_str_segments(void)
+{
+ uint32_t seg_idx = 0;
+ uint32_t memmove_idx = 0;
+ uint32_t seg_cnt =
+ (strlen(JTEST_FW.str_buffer) / JTEST_STR_MAX_OUTPUT_SIZE) + 1;
+
+ for( seg_idx = 0; seg_idx < seg_cnt; ++seg_idx)
+ {
+ JTEST_TRIGGER_ACTION(dump_str);
+
+ if (seg_idx < JTEST_STR_MAX_OUTPUT_SEGMENTS)
+ {
+ memmove_idx = 0;
+ while (memmove_idx < (seg_cnt - seg_idx -1) )
+ {
+ memmove(
+ JTEST_FW.str_buffer+
+ (memmove_idx* JTEST_STR_MAX_OUTPUT_SIZE),
+ JTEST_FW.str_buffer+
+ ((memmove_idx+1)*JTEST_STR_MAX_OUTPUT_SIZE),
+ JTEST_BUF_SIZE);
+ ++memmove_idx;
+ }
+ }
+ }
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_fw.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_fw.c new file mode 100644 index 0000000..69d7a63 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_fw.c @@ -0,0 +1,9 @@ +#include "../inc/jtest.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Define Global Variables */
+/*--------------------------------------------------------------------------------*/
+
+char JTEST_FW_STR_BUFFER[JTEST_BUF_SIZE] = {0};
+
+volatile JTEST_FW_t JTEST_FW = {0};
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_trigger_action.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_trigger_action.c new file mode 100644 index 0000000..a3901da --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/src/jtest_trigger_action.c @@ -0,0 +1,37 @@ +
+#include "jtest_fw.h"
+
+void test_start (void) {
+// ;
+ JTEST_FW.test_start++;
+}
+
+void test_end (void) {
+// ;
+ JTEST_FW.test_end++;
+}
+
+void group_start (void) {
+// ;
+ JTEST_FW.group_start++;
+}
+
+void group_end (void) {
+// ;
+ JTEST_FW.group_end++;
+}
+
+void dump_str (void) {
+// ;
+ JTEST_FW.dump_str++;
+}
+
+void dump_data (void) {
+// ;
+ JTEST_FW.dump_data++;
+}
+
+void exit_fw (void) {
+// ;
+ JTEST_FW.exit_fw++;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/all_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/all_tests.h new file mode 100644 index 0000000..df1e998 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/all_tests.h @@ -0,0 +1,9 @@ +#ifndef _ALL_TESTS_H_
+#define _ALL_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(all_tests);
+
+#endif /* _ALL_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_templates.h new file mode 100644 index 0000000..958ef78 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_templates.h @@ -0,0 +1,267 @@ +#ifndef _BASIC_MATH_TEMPLATES_H_
+#define _BASIC_MATH_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Compare the outputs used by basic math tests for the function under test and
+ * the reference function.
+ */
+#define BASIC_MATH_COMPARE_INTERFACE(block_size, output_type) \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ basic_math_output_ref.data_ptr, \
+ basic_math_output_fut.data_ptr, \
+ block_size * sizeof(output_type))
+
+/*
+ * Comparison SNR thresholds for the data types used in basic_math_tests.
+ */
+#define BASIC_MATH_SNR_THRESHOLD_float32_t 120
+#define BASIC_MATH_SNR_THRESHOLD_q31_t 100
+#define BASIC_MATH_SNR_THRESHOLD_q15_t 75
+#define BASIC_MATH_SNR_THRESHOLD_q7_t 25
+
+/**
+ * Compare reference and fut outputs using SNR.
+ *
+ * @note The outputs are converted to float32_t before comparison.
+ */
+#define BASIC_MATH_SNR_COMPARE_INTERFACE(block_size, output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ basic_math_output_f32_ref, \
+ basic_math_output_ref.data_ptr, \
+ basic_math_output_f32_fut, \
+ basic_math_output_fut.data_ptr, \
+ block_size, \
+ output_type, \
+ BASIC_MATH_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+
+/**
+ * Compare reference and fut outputs using SNR.
+ *
+ * @note The outputs are converted to float32_t before comparison.
+ */
+#define BASIC_MATH_SNR_ELT1_COMPARE_INTERFACE(block_size, output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ basic_math_output_f32_ref, \
+ basic_math_output_ref.data_ptr, \
+ basic_math_output_f32_fut, \
+ basic_math_output_fut.data_ptr, \
+ 1, \
+ output_type, \
+ BASIC_MATH_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define ARM_abs_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, basic_math_output_fut.data_ptr, block_size)
+
+#define REF_abs_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, basic_math_output_ref.data_ptr, block_size)
+
+#define ARM_add_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_add_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_ref.data_ptr, block_size) \
+
+#define ARM_dot_prod_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, block_size, basic_math_output_fut.data_ptr) \
+
+#define REF_dot_prod_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, block_size, basic_math_output_ref.data_ptr) \
+
+#define ARM_mult_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_mult_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_ref.data_ptr, block_size) \
+
+#define ARM_negate_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, basic_math_output_fut.data_ptr, block_size)
+
+#define REF_negate_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, basic_math_output_ref.data_ptr, block_size)
+
+#define ARM_offset_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_offset_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_ref.data_ptr, block_size) \
+
+#define ARM_shift_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_shift_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_ref.data_ptr, block_size) \
+
+#define ARM_scale_float_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_scale_float_INPUT_INTERFACE(input, elt, block_size) \
+ PAREN(input, elt, basic_math_output_ref.data_ptr, block_size) \
+
+/* These two are for the fixed point functions */
+#define ARM_scale_INPUT_INTERFACE(input, elt1, elt2, block_size) \
+ PAREN(input, elt1, elt2, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_scale_INPUT_INTERFACE(input, elt1, elt2, block_size) \
+ PAREN(input, elt1, elt2, basic_math_output_ref.data_ptr, block_size) \
+
+#define ARM_sub_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_fut.data_ptr, block_size) \
+
+#define REF_sub_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, basic_math_output_ref.data_ptr, block_size) \
+
+
+/*--------------------------------------------------------------------------------*/
+/* Test Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_BLK() for basic math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_BLK( \
+ basic_math_f_all, \
+ basic_math_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ BASIC_MATH_COMPARE_INTERFACE); \
+ }
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF2_BLK() for basic math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF2_BLK( \
+ basic_math_f_all, \
+ basic_math_f_all, \
+ basic_math_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_ELT1_BLK() for basic math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_ELT1_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ elt_type, \
+ output_type) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_ELT1_BLK( \
+ basic_math_f_all, \
+ basic_math_elts, \
+ basic_math_block_sizes, \
+ input_type, \
+ elt_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ BASIC_MATH_COMPARE_INTERFACE); \
+ }
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_ELT2_BLK() for basic math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_ELT2_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ elt1_type, \
+ elt2_type, \
+ output_type) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_ELT2_BLK( \
+ basic_math_f_all, \
+ basic_math_elts, \
+ basic_math_elts2, \
+ basic_math_block_sizes, \
+ input_type, \
+ elt1_type, \
+ elt2_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ BASIC_MATH_COMPARE_INTERFACE); \
+ }
+
+#endif /* _BASIC_MATH_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_data.h new file mode 100644 index 0000000..2f0b239 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_data.h @@ -0,0 +1,46 @@ +#ifndef ARM_BASIC_MATH_TEST_DATA_H
+#define ARM_BASIC_MATH_TEST_DATA_H
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+#define BASIC_MATH_MAX_INPUT_ELEMENTS 32
+#define BASIC_MATH_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+ARR_DESC_DECLARE(basic_math_output_fut);
+ARR_DESC_DECLARE(basic_math_output_ref);
+
+extern BASIC_MATH_BIGGEST_INPUT_TYPE
+basic_math_output_f32_ref[BASIC_MATH_MAX_INPUT_ELEMENTS];
+
+extern BASIC_MATH_BIGGEST_INPUT_TYPE
+basic_math_output_f32_fut[BASIC_MATH_MAX_INPUT_ELEMENTS];
+
+/* Block Sizes*/
+ARR_DESC_DECLARE(basic_math_block_sizes);
+
+/* Numbers */
+ARR_DESC_DECLARE(basic_math_elts);
+ARR_DESC_DECLARE(basic_math_elts2);
+ARR_DESC_DECLARE(basic_math_eltsf);
+
+/* Float Inputs */
+ARR_DESC_DECLARE(basic_math_zeros);
+ARR_DESC_DECLARE(basic_math_f_2);
+ARR_DESC_DECLARE(basic_math_f_15);
+ARR_DESC_DECLARE(basic_math_f_32);
+ARR_DESC_DECLARE(basic_math_f_all);
+
+#endif
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_group.h new file mode 100644 index 0000000..ece92c7 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_test_group.h @@ -0,0 +1,9 @@ +#ifndef _BASIC_MATH_TEST_GROUP_H_
+#define _BASIC_MATH_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(basic_math_tests);
+
+#endif /* _BASIC_MATH_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_tests.h new file mode 100644 index 0000000..0550444 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/basic_math_tests/basic_math_tests.h @@ -0,0 +1,17 @@ +#ifndef _BASIC_MATH_TESTS_H_
+#define _BASIC_MATH_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(abs_tests);
+JTEST_DECLARE_GROUP(add_tests);
+JTEST_DECLARE_GROUP(dot_prod_tests);
+JTEST_DECLARE_GROUP(mult_tests);
+JTEST_DECLARE_GROUP(negate_tests);
+JTEST_DECLARE_GROUP(offset_tests);
+JTEST_DECLARE_GROUP(scale_tests);
+JTEST_DECLARE_GROUP(shift_tests);
+JTEST_DECLARE_GROUP(sub_tests);
+
+#endif /* _BASIC_MATH_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_templates.h new file mode 100644 index 0000000..3b7f22f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_templates.h @@ -0,0 +1,222 @@ +#ifndef _COMPLEX_MATH_TEMPLATES_H_
+#define _COMPLEX_MATH_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Compare the real outputs from the function under test and the reference
+ * function.
+ */
+#define COMPLEX_MATH_COMPARE_RE_INTERFACE(block_size, output_type) \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ complex_math_output_ref_a.data_ptr, \
+ complex_math_output_fut_a.data_ptr, \
+ block_size * sizeof(output_type))
+
+/**
+ * Compare the real and imaginary outputs from the function under test and the
+ * reference function.
+ */
+#define COMPLEX_MATH_COMPARE_CMPLX_INTERFACE(block_size, output_type) \
+ do \
+ { \
+ COMPLEX_MATH_COMPARE_RE_INTERFACE(block_size * 2, output_type); \
+ } while (0)
+
+
+/*
+ * Comparison SNR thresholds for the data types used in complex_math_tests.
+ */
+#define COMPLEX_MATH_SNR_THRESHOLD_float32_t 120
+#define COMPLEX_MATH_SNR_THRESHOLD_q31_t 100
+#define COMPLEX_MATH_SNR_THRESHOLD_q15_t 75
+
+/**
+ * Compare reference and fut outputs using SNR.
+ *
+ * The output_suffix specifies which output buffers to use for the
+ * comparison. An output_suffix of 'a' expands to the following buffers:
+ *
+ * - complex_math_output_f32_ref_a
+ * - complex_math_output_f32_fut_a
+ * - complex_math_output_ref_a
+ * - complex_math_output_fut_a
+ *
+ * @note The outputs are converted to float32_t before comparison.
+ */
+#define COMPLEX_MATH_SNR_COMPARE_OUT_INTERFACE(block_size, \
+ output_type, \
+ output_suffix) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ complex_math_output_f32_ref_##output_suffix, \
+ complex_math_output_ref_##output_suffix.data_ptr, \
+ complex_math_output_f32_fut_##output_suffix, \
+ complex_math_output_fut_##output_suffix.data_ptr, \
+ block_size, \
+ output_type, \
+ COMPLEX_MATH_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+/**
+ * Specification of #COMPLEX_MATH_SNR_COMPARE_INTERFACE() for real outputs.
+ */
+#define COMPLEX_MATH_SNR_COMPARE_RE_INTERFACE(block_size, \
+ output_type) \
+ COMPLEX_MATH_SNR_COMPARE_OUT_INTERFACE(block_size, \
+ output_type, \
+ a)
+
+/**
+ * Specification of #COMPLEX_MATH_SNR_COMPARE_INTERFACE() for complex outputs.
+ */
+#define COMPLEX_MATH_SNR_COMPARE_CMPLX_INTERFACE(block_size, \
+ output_type) \
+ COMPLEX_MATH_SNR_COMPARE_OUT_INTERFACE(block_size * 2, \
+ output_type, \
+ a)
+
+/**
+ * Compare reference and fut split outputs using SNR.
+ *
+ * 'Split' refers to two separate output buffers; one for real and one for
+ * complex.
+ */
+#define COMPLEX_MATH_SNR_COMPARE_SPLIT_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ COMPLEX_MATH_SNR_COMPARE_OUT_INTERFACE(block_size, \
+ output_type, \
+ a); \
+ COMPLEX_MATH_SNR_COMPARE_OUT_INTERFACE(block_size, \
+ output_type, \
+ b); \
+ } while (0)
+
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define ARM_cmplx_conj_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_fut_a.data_ptr, block_size)
+
+#define REF_cmplx_conj_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_ref_a.data_ptr, block_size)
+
+#define ARM_cmplx_dot_prod_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, block_size, \
+ complex_math_output_fut_a.data_ptr, \
+ complex_math_output_fut_b.data_ptr)
+
+#define REF_cmplx_dot_prod_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, block_size, \
+ complex_math_output_ref_a.data_ptr, \
+ complex_math_output_ref_b.data_ptr)
+
+#define ARM_cmplx_mag_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_fut_a.data_ptr, block_size)
+
+#define REF_cmplx_mag_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_ref_a.data_ptr, block_size)
+
+#define ARM_cmplx_mag_squared_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_fut_a.data_ptr, block_size)
+
+#define REF_cmplx_mag_squared_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, complex_math_output_ref_a.data_ptr, block_size)
+
+#define ARM_cmplx_mult_cmplx_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, complex_math_output_fut_a.data_ptr, block_size)
+
+#define REF_cmplx_mult_cmplx_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, complex_math_output_ref_a.data_ptr, block_size)
+
+#define ARM_cmplx_mult_real_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, complex_math_output_fut_a.data_ptr, block_size)
+
+#define REF_cmplx_mult_real_INPUT_INTERFACE(input_a, input_b, block_size) \
+ PAREN(input_a, input_b, complex_math_output_ref_a.data_ptr, block_size)
+
+/*--------------------------------------------------------------------------------*/
+/* Test Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_BLK() for complex math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_BLK( \
+ complex_math_f_all, \
+ complex_math_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF2_BLK1() for complex math tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF2_BLK( \
+ complex_math_f_all, \
+ complex_math_f_all, \
+ complex_math_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+#endif /* _COMPLEX_MATH_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_data.h new file mode 100644 index 0000000..df561b4 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_data.h @@ -0,0 +1,50 @@ +#ifndef _COMPLEX_MATH_TEST_DATA_H_
+#define _COMPLEX_MATH_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+#define COMPLEX_MATH_MAX_INPUT_ELEMENTS 32
+#define COMPLEX_MATH_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Decalare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+ARR_DESC_DECLARE(complex_math_output_fut_a);
+ARR_DESC_DECLARE(complex_math_output_fut_b);
+ARR_DESC_DECLARE(complex_math_output_ref_a);
+ARR_DESC_DECLARE(complex_math_output_ref_b);
+
+extern COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_ref_a[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+extern COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_ref_b[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+extern COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_fut_a[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+extern COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_fut_b[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+/* Block Sizes*/
+ARR_DESC_DECLARE(complex_math_block_sizes);
+
+/* Float Inputs */
+ARR_DESC_DECLARE(complex_math_zeros);
+ARR_DESC_DECLARE(complex_math_f_2);
+ARR_DESC_DECLARE(complex_math_f_15);
+ARR_DESC_DECLARE(complex_math_f_32);
+ARR_DESC_DECLARE(complex_math_f_all);
+
+
+#endif /* _COMPLEX_MATH_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_group.h new file mode 100644 index 0000000..5c2ea1f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_test_group.h @@ -0,0 +1,9 @@ +#ifndef _COMPLEX_MATH_TEST_GROUP_H_
+#define _COMPLEX_MATH_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(complex_math_tests);
+
+#endif /* _COMPLEX_MATH_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_tests.h new file mode 100644 index 0000000..ab4f0ae --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/complex_math_tests/complex_math_tests.h @@ -0,0 +1,14 @@ +#ifndef _COMPLEX_MATH_TESTS_H_
+#define _COMPLEX_MATH_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(cmplx_conj_tests);
+JTEST_DECLARE_GROUP(cmplx_dot_prod_tests);
+JTEST_DECLARE_GROUP(cmplx_mag_tests);
+JTEST_DECLARE_GROUP(cmplx_mag_squared_tests);
+JTEST_DECLARE_GROUP(cmplx_mult_cmplx_tests);
+JTEST_DECLARE_GROUP(cmplx_mult_real_tests);
+
+#endif /* _COMPLEX_MATH_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_templates.h new file mode 100644 index 0000000..f7956fb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_templates.h @@ -0,0 +1,46 @@ +#ifndef _CONTROLLER_TEMPLATES_H_
+#define _CONTROLLER_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+#include <string.h> /* memcpy() */
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Comparison SNR thresholds for the data types used in transform_tests.
+ */
+#define CONTROLLER_SNR_THRESHOLD_float32_t 110
+#define CONTROLLER_SNR_THRESHOLD_q31_t 100
+#define CONTROLLER_SNR_THRESHOLD_q15_t 45
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR.
+ */
+#define CONTROLLER_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ controller_output_f32_ref, \
+ (output_type *) controller_output_ref, \
+ controller_output_f32_fut, \
+ (output_type *) controller_output_fut, \
+ block_size, \
+ output_type, \
+ CONTROLLER_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+
+/*--------------------------------------------------------------------------------*/
+/* TEST Templates */
+/*--------------------------------------------------------------------------------*/
+
+#endif /* _CONTROLLER_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_data.h new file mode 100644 index 0000000..5aa63eb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_data.h @@ -0,0 +1,33 @@ +#ifndef _CONTROLLER_TEST_DATA_H_
+#define _CONTROLLER_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define CONTROLLER_MAX_LEN 1024
+#define CONTROLLER_MAX_COEFFS_LEN (12 * 3)
+#define TRANFORM_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Variable Declarations */
+/*--------------------------------------------------------------------------------*/
+
+extern float32_t controller_output_fut[CONTROLLER_MAX_LEN];
+extern float32_t controller_output_ref[CONTROLLER_MAX_LEN];
+extern float32_t controller_output_f32_fut[CONTROLLER_MAX_LEN];
+extern float32_t controller_output_f32_ref[CONTROLLER_MAX_LEN];
+extern const float32_t controller_f32_inputs[CONTROLLER_MAX_LEN];
+extern const q31_t controller_q31_inputs[CONTROLLER_MAX_LEN];
+extern const q15_t * controller_q15_inputs;
+extern const float32_t controller_f32_coeffs[CONTROLLER_MAX_COEFFS_LEN];
+extern const q31_t controller_q31_coeffs[CONTROLLER_MAX_COEFFS_LEN];
+extern const q15_t controller_q15_coeffs[CONTROLLER_MAX_COEFFS_LEN];
+
+#endif /* _CONTROLLER_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_group.h new file mode 100644 index 0000000..baead25 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_test_group.h @@ -0,0 +1,9 @@ +#ifndef _CONTROLLER_TEST_GROUP_H_
+#define _CONTROLLER_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Group */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(controller_tests);
+
+#endif /* _CONTROLLER_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_tests.h new file mode 100644 index 0000000..41996a8 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/controller_tests/controller_tests.h @@ -0,0 +1,11 @@ +#ifndef _CONTROLLER_TESTS_H_
+#define _CONTROLLER_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(pid_reset_tests);
+JTEST_DECLARE_GROUP(sin_cos_tests);
+JTEST_DECLARE_GROUP(pid_tests);
+
+#endif /* _CONTROLLER_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_templates.h new file mode 100644 index 0000000..5b49512 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_templates.h @@ -0,0 +1,102 @@ +#ifndef _FAST_MATH_TEMPLATES_H_
+#define _FAST_MATH_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+#include <string.h> /* memcpy() */
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Comparison SNR thresholds for the data types used in transform_tests.
+ */
+#define FAST_MATH_SNR_THRESHOLD_float32_t 95
+#define FAST_MATH_SNR_THRESHOLD_q31_t 95
+#define FAST_MATH_SNR_THRESHOLD_q15_t 45
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR.
+ */
+#define FAST_MATH_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ fast_math_output_f32_ref, \
+ (output_type *) fast_math_output_ref, \
+ fast_math_output_f32_fut, \
+ (output_type *) fast_math_output_fut, \
+ block_size, \
+ output_type, \
+ FAST_MATH_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+
+/*--------------------------------------------------------------------------------*/
+/* TEST Templates */
+/*--------------------------------------------------------------------------------*/
+
+#define SQRT_TEST_TEMPLATE_ELT1(suffix) \
+ \
+ JTEST_DEFINE_TEST(arm_sqrt_##suffix##_test, arm_sqrt_##suffix) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<FAST_MATH_MAX_LEN;i++) \
+ { \
+ arm_sqrt_##suffix( \
+ (suffix##_t)fast_math_##suffix##_inputs[i] \
+ ,(suffix##_t*)fast_math_output_fut + i); \
+ }); \
+ \
+ for(i=0;i<FAST_MATH_MAX_LEN;i++) \
+ { \
+ ref_sqrt_##suffix( \
+ (suffix##_t)fast_math_##suffix##_inputs[i] \
+ ,(suffix##_t*)fast_math_output_ref + i); \
+ } \
+ \
+ FAST_MATH_SNR_COMPARE_INTERFACE( \
+ FAST_MATH_MAX_LEN, \
+ suffix##_t); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+
+#define SIN_COS_TEST_TEMPLATE_ELT1(suffix, type, func) \
+ \
+ JTEST_DEFINE_TEST(arm_##func##_##suffix##_test, arm_##func##_##suffix) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<FAST_MATH_MAX_LEN;i++) \
+ { \
+ *((type*)fast_math_output_fut + i) = arm_##func##_##suffix( \
+ fast_math_##suffix##_inputs[i]); \
+ }); \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<FAST_MATH_MAX_LEN;i++) \
+ { \
+ *((type*)fast_math_output_ref + i) = ref_##func##_##suffix( \
+ fast_math_##suffix##_inputs[i]); \
+ }); \
+ \
+ FAST_MATH_SNR_COMPARE_INTERFACE( \
+ FAST_MATH_MAX_LEN, \
+ type); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#endif /* _FAST_MATH_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_data.h new file mode 100644 index 0000000..0279be0 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_data.h @@ -0,0 +1,29 @@ +#ifndef _FAST_MATH_TEST_DATA_H_
+#define _FAST_MATH_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define FAST_MATH_MAX_LEN 1024
+#define TRANFORM_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Variable Declarations */
+/*--------------------------------------------------------------------------------*/
+
+extern float32_t fast_math_output_fut[FAST_MATH_MAX_LEN];
+extern float32_t fast_math_output_ref[FAST_MATH_MAX_LEN];
+extern float32_t fast_math_output_f32_fut[FAST_MATH_MAX_LEN];
+extern float32_t fast_math_output_f32_ref[FAST_MATH_MAX_LEN];
+extern const float32_t fast_math_f32_inputs[FAST_MATH_MAX_LEN];
+extern const q31_t fast_math_q31_inputs[FAST_MATH_MAX_LEN];
+extern const q15_t * fast_math_q15_inputs;
+
+#endif /* _FAST_MATH_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_group.h new file mode 100644 index 0000000..3282118 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/fast_math_tests/fast_math_test_group.h @@ -0,0 +1,9 @@ +#ifndef _FAST_MATH_TEST_GROUP_H_
+#define _FAST_MATH_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(fast_math_tests);
+
+#endif /* _FAST_MATH_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_templates.h new file mode 100644 index 0000000..f3eb564 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_templates.h @@ -0,0 +1,91 @@ +#ifndef _FILTERING_TEMPLATES_H_
+#define _FILTERING_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ * Comparison SNR thresholds for the data types used in statistics_tests.
+ */
+#define FILTERING_SNR_THRESHOLD_float64_t 120
+#define FILTERING_SNR_THRESHOLD_float32_t 99
+#define FILTERING_SNR_THRESHOLD_q31_t 90
+#define FILTERING_SNR_THRESHOLD_q15_t 60
+#define FILTERING_SNR_THRESHOLD_q7_t 30
+
+/**
+ * Compare reference and fut outputs using SNR.
+ *
+ * @note The outputs are converted to float32_t before comparison.
+ */
+#define FILTERING_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ FILTERING_SNR_COMPARE_INTERFACE_OFFSET(0, block_size, output_type)
+
+/**
+ * Compare reference and fut outputs starting at some offset using SNR.
+ */
+#define FILTERING_SNR_COMPARE_INTERFACE_OFFSET(offset, \
+ block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ filtering_output_f32_ref, \
+ (output_type *) filtering_output_ref + offset, \
+ filtering_output_f32_fut, \
+ (output_type *) filtering_output_fut + offset, \
+ block_size, \
+ output_type, \
+ FILTERING_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+/**
+ * Compare reference and fut outputs starting at some offset using SNR.
+ * Special case for float64_t
+ */
+#define FILTERING_DBL_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_ASSERT_DBL_SNR( \
+ (float64_t*)filtering_output_ref, \
+ (float64_t*)filtering_output_fut, \
+ block_size, \
+ FILTERING_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+
+/*--------------------------------------------------------------------------------*/
+/* Test Templates */
+/*--------------------------------------------------------------------------------*/
+
+
+
+#endif /* _FILTERING_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_data.h new file mode 100644 index 0000000..ee07291 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_data.h @@ -0,0 +1,81 @@ +#ifndef FILTERING_TEST_DATA_H
+#define FILTERING_TEST_DATA_H
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define FILTERING_MAX_BLOCKSIZE 33
+#define LMS_MAX_BLOCKSIZE 512
+#define FILTERING_MAX_NUMTAPS 34
+#define FILTERING_MAX_NUMSTAGES 14
+#define FILTERING_MAX_POSTSHIFT 8
+#define FILTERING_MAX_TAP_DELAY 0xFF
+#define FILTERING_MAX_L 3
+#define FILTERING_MAX_M 33
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+extern float32_t filtering_output_fut[LMS_MAX_BLOCKSIZE*2];
+extern float32_t filtering_output_ref[LMS_MAX_BLOCKSIZE*2];
+extern float32_t filtering_output_f32_fut[LMS_MAX_BLOCKSIZE*2];
+extern float32_t filtering_output_f32_ref[LMS_MAX_BLOCKSIZE*2];
+extern float32_t filtering_input_lms[LMS_MAX_BLOCKSIZE*2];
+extern float32_t filtering_pState[LMS_MAX_BLOCKSIZE + FILTERING_MAX_NUMTAPS];
+extern float32_t filtering_scratch[FILTERING_MAX_BLOCKSIZE * 3];
+extern float32_t filtering_scratch2[FILTERING_MAX_BLOCKSIZE * 3];
+extern float32_t filtering_coeffs_lms[FILTERING_MAX_NUMTAPS];
+
+extern const float64_t filtering_f64_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS];
+extern const float32_t filtering_f32_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS];
+extern const q31_t filtering_q31_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS];
+extern const q15_t * filtering_q15_inputs;
+extern const q7_t * filtering_q7_inputs;
+
+/* Block Sizes */
+ARR_DESC_DECLARE(filtering_blocksizes);
+ARR_DESC_DECLARE(lms_blocksizes);
+ARR_DESC_DECLARE(filtering_numtaps);
+ARR_DESC_DECLARE(filtering_numtaps2);
+ARR_DESC_DECLARE(filtering_postshifts);
+ARR_DESC_DECLARE(filtering_numstages);
+ARR_DESC_DECLARE(filtering_Ls);
+ARR_DESC_DECLARE(filtering_Ms);
+
+/* Coefficient Lists */
+extern const float64_t filtering_coeffs_f64[FILTERING_MAX_NUMSTAGES * 6 + 2];
+extern const float64_t filtering_coeffs_b_f64[FILTERING_MAX_NUMSTAGES * 6 + 2];
+extern const float32_t filtering_coeffs_f32[FILTERING_MAX_NUMSTAGES * 6 + 2];
+extern const float32_t filtering_coeffs_b_f32[FILTERING_MAX_NUMSTAGES * 6 + 2];
+extern const float32_t *filtering_coeffs_c_f32;
+extern float32_t filtering_coeffs_lms_f32[FILTERING_MAX_NUMTAPS];
+extern const q31_t filtering_coeffs_q31[FILTERING_MAX_NUMSTAGES * 6 + 2];
+extern const q31_t *filtering_coeffs_b_q31;
+extern const q31_t *filtering_coeffs_c_q31;
+extern q31_t filtering_coeffs_lms_q31[FILTERING_MAX_NUMTAPS];
+extern const q15_t filtering_coeffs_q15[FILTERING_MAX_NUMSTAGES * 6 + 4];
+extern const q15_t *filtering_coeffs_b_q15;
+extern const q15_t *filtering_coeffs_c_q15;
+extern q15_t filtering_coeffs_lms_q15[FILTERING_MAX_NUMTAPS];
+extern const q7_t filtering_coeffs_q7[FILTERING_MAX_NUMSTAGES * 6 + 8];
+extern const q7_t *filtering_coeffs_b_q7;
+extern const q7_t *filtering_coeffs_c_q7;
+
+/* Tap Delay Lists */
+extern const int32_t filtering_tap_delay[FILTERING_MAX_NUMTAPS];
+
+/* Numbers */
+
+/* Float Inputs */
+
+#endif
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_group.h new file mode 100644 index 0000000..a5f6877 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_test_group.h @@ -0,0 +1,9 @@ +#ifndef _FILTERING_TEST_GROUP_H_
+#define _FILTERING_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(filtering_tests);
+
+#endif /* _FILTERING_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_tests.h new file mode 100644 index 0000000..4caeca9 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/filtering_tests/filtering_tests.h @@ -0,0 +1,15 @@ +#ifndef _FILTERING_TESTS_H_
+#define _FILTERING_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DECLARE_GROUP(biquad_tests);
+JTEST_DECLARE_GROUP(conv_tests);
+JTEST_DECLARE_GROUP(correlate_tests);
+JTEST_DECLARE_GROUP(fir_tests);
+JTEST_DECLARE_GROUP(iir_tests);
+JTEST_DECLARE_GROUP(lms_tests);
+
+#endif /* _FILTERING_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_templates.h new file mode 100644 index 0000000..5872fe9 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_templates.h @@ -0,0 +1,166 @@ +#ifndef _INTRINSICS_TEMPLATES_H_
+#define _INTRINSICS_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+#include <string.h> /* memcpy() */
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+* Comparison SNR thresholds for the data types used in transform_tests.
+*/
+#define INTRINSICS_SNR_THRESHOLD_q63_t 120
+#define INTRINSICS_SNR_THRESHOLD_q31_t 95
+
+/**
+* Compare the outputs from the function under test and the reference
+* function using SNR.
+*/
+#define INTRINSICS_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ intrinsics_output_f32_ref, \
+ (output_type##_t *) intrinsics_output_ref, \
+ intrinsics_output_f32_fut, \
+ (output_type##_t *) intrinsics_output_fut, \
+ block_size, \
+ output_type, \
+ INTRINSICS_SNR_THRESHOLD_##output_type##_t \
+ ); \
+ } while (0)
+
+
+/*--------------------------------------------------------------------------------*/
+/* TEST Templates */
+/*--------------------------------------------------------------------------------*/
+
+#define INTRINSICS_TEST_TEMPLATE_ELT1(functionName, dataType) \
+ \
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_fut + i) = \
+ functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ }); \
+ \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_ref + i) = \
+ ref##functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ } \
+ \
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
+ INTRINSICS_MAX_LEN, \
+ dataType); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define INTRINSICS_TEST_TEMPLATE_ELT2(functionName, dataType) \
+ \
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_fut + i) = \
+ functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ }); \
+ \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_ref + i) = \
+ ref##functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ } \
+ \
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
+ INTRINSICS_MAX_LEN, \
+ dataType); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define INTRINSICS_TEST_TEMPLATE_ELT3(functionName, dataType) \
+ \
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_fut + i) = \
+ functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ }); \
+ \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType##_t*)intrinsics_output_ref + i) = \
+ ref##functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
+ } \
+ \
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
+ INTRINSICS_MAX_LEN, \
+ dataType); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define INTRINSICS_TEST_TEMPLATE_ELT4(functionName, dataType, dataType2) \
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
+ { \
+ uint32_t i; \
+ \
+ JTEST_COUNT_CYCLES( \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType2##_t*)intrinsics_output_fut + i) = \
+ functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType2##_t)intrinsics_##dataType2##_inputs[i]); \
+ }); \
+ \
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
+ { \
+ *((dataType2##_t*)intrinsics_output_ref + i) = \
+ ref##functionName( \
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
+ ,(dataType2##_t)intrinsics_##dataType2##_inputs[i]); \
+ } \
+ \
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
+ INTRINSICS_MAX_LEN, \
+ dataType2); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#endif /* _INTRINSICS_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_data.h new file mode 100644 index 0000000..130e4e8 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_data.h @@ -0,0 +1,27 @@ +#ifndef _INTRINSICS_TEST_DATA_H_
+#define _INTRINSICS_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define INTRINSICS_MAX_LEN 1024
+
+/*--------------------------------------------------------------------------------*/
+/* Variable Declarations */
+/*--------------------------------------------------------------------------------*/
+
+extern q63_t intrinsics_output_fut[INTRINSICS_MAX_LEN];
+extern q63_t intrinsics_output_ref[INTRINSICS_MAX_LEN];
+extern float32_t intrinsics_output_f32_fut[INTRINSICS_MAX_LEN];
+extern float32_t intrinsics_output_f32_ref[INTRINSICS_MAX_LEN];
+extern const q63_t intrinsics_q63_inputs[INTRINSICS_MAX_LEN];
+extern const q31_t *intrinsics_q31_inputs;
+
+#endif /* _INTRINSICS_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_group.h new file mode 100644 index 0000000..d21d626 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/intrinsics_tests/intrinsics_test_group.h @@ -0,0 +1,9 @@ +#ifndef _INTRINSICS_TEST_GROUP_H_
+#define _INTRINSICS_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(intrinsics_tests);
+
+#endif /* _INTRINSICS_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/math_helper.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/math_helper.h new file mode 100644 index 0000000..1ca7acb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/math_helper.h @@ -0,0 +1,52 @@ +/* ----------------------------------------------------------------------
+* Copyright (C) 2010 ARM Limited. All rights reserved.
+*
+* $Date: 29. November 2010
+* $Revision: V1.0.3
+*
+* Project: CMSIS DSP Library
+*
+* Title: math_helper.h
+*
+*
+* Description: Prototypes of all helper functions required.
+*
+* Target Processor: Cortex-M4/Cortex-M3
+*
+* Version 1.0.3 2010/11/29
+* Re-organized the CMSIS folders and updated documentation.
+*
+* Version 1.0.2 2010/11/11
+* Documentation updated.
+*
+* Version 1.0.1 2010/10/05
+* Production release and review comments incorporated.
+*
+* Version 1.0.0 2010/09/20
+* Production release and review comments incorporated.
+*
+* Version 0.0.7 2010/06/10
+* Misra-C changes done
+* -------------------------------------------------------------------- */
+
+#ifndef MATH_HELPER_H
+#define MATH_HELPER_H
+
+#include "arm_math.h"
+
+float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize);
+double arm_snr_f64(double *pRef, double *pTest, uint32_t buffSize);
+void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples);
+void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits);
+void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits);
+void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples);
+void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples);
+void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples);
+void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples);
+void arm_clip_f32(float *pIn, uint32_t numSamples);
+uint32_t arm_calc_guard_bits(uint32_t num_adds);
+void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits);
+uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples);
+uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples);
+uint32_t arm_calc_2pow(uint32_t guard_bits);
+#endif
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_templates.h new file mode 100644 index 0000000..98f3552 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_templates.h @@ -0,0 +1,370 @@ +#ifndef _MATRIX_TEMPLATES_H_
+#define _MATRIX_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function.
+ */
+#define MATRIX_COMPARE_INTERFACE(output_type, output_content_type) \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ ((output_type *) &matrix_output_ref)->pData, \
+ ((output_type *) &matrix_output_fut)->pData, \
+ ((output_type *) &matrix_output_fut)->numRows * \
+ ((output_type *) &matrix_output_ref)->numCols * \
+ sizeof(output_content_type))
+
+/**
+ * Comparison SNR thresholds for the data types used in matrix_tests.
+ */
+#define MATRIX_SNR_THRESHOLD 120
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR.
+ */
+#define MATRIX_SNR_COMPARE_INTERFACE(output_type, output_content_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ (float32_t *)matrix_output_f32_ref, \
+ ((output_type *) &matrix_output_ref)->pData, \
+ (float32_t *)matrix_output_f32_fut, \
+ ((output_type *) &matrix_output_ref)->pData, \
+ ((output_type *) &matrix_output_fut)->numRows * \
+ ((output_type *) &matrix_output_ref)->numCols, \
+ output_content_type, \
+ MATRIX_SNR_THRESHOLD \
+ ); \
+ } while (0)
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR. This is special for float64_t
+ */
+#define MATRIX_DBL_SNR_COMPARE_INTERFACE(output_type) \
+ do \
+ { \
+ TEST_ASSERT_DBL_SNR( \
+ (float64_t *)matrix_output_f32_ref, \
+ (float64_t *)matrix_output_f32_fut, \
+ ((output_type *) &matrix_output_fut)->numRows * \
+ ((output_type *) &matrix_output_ref)->numCols, \
+ MATRIX_SNR_THRESHOLD \
+ ); \
+ } while (0)
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define ARM_mat_add_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_add_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_cmplx_mult_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_cmplx_mult_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_inverse_INPUT_INTERFACE(input_ptr) \
+ PAREN(input_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_inverse_INPUT_INTERFACE(input_ptr) \
+ PAREN(input_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_mult_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_mult_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_mult_fast_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_mult_fast_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_sub_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_sub_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, (void *) &matrix_output_ref)
+
+#define ARM_mat_trans_INPUT_INTERFACE(input_ptr) \
+ PAREN(input_ptr, (void *) &matrix_output_fut)
+
+#define REF_mat_trans_INPUT_INTERFACE(input_ptr) \
+ PAREN(input_ptr, (void *) &matrix_output_ref)
+
+/*--------------------------------------------------------------------------------*/
+/* Dimension Validation Interfaces */
+/*--------------------------------------------------------------------------------*/
+
+#define MATRIX_TEST_VALID_ADDITIVE_DIMENSIONS(input_type, \
+ matrix_a_ptr, \
+ matrix_b_ptr) \
+ ((((input_type) (matrix_a_ptr))->numRows == \
+ ((input_type) (matrix_b_ptr))->numRows) && \
+ (((input_type) (matrix_a_ptr))->numCols == \
+ ((input_type) (matrix_b_ptr))->numCols))
+
+#define MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS(input_type, \
+ matrix_a_ptr, \
+ matrix_b_ptr) \
+ (((input_type) (matrix_a_ptr))->numCols == \
+ ((input_type) (matrix_b_ptr))->numRows)
+
+#define MATRIX_TEST_VALID_SQUARE_DIMENSIONS(input_type, \
+ matrix_ptr) \
+ (((input_type)(matrix_ptr))->numRows == \
+ ((input_type)(matrix_ptr))->numCols)
+
+#define MATRIX_TEST_VALID_DIMENSIONS_ALWAYS(input_type, \
+ matrix_ptr) \
+ (1 == 1) \
+
+/*--------------------------------------------------------------------------------*/
+/* Output Configuration Interfaces */
+/*--------------------------------------------------------------------------------*/
+/* The matrix tests assume the output matrix is always the correct size. These
+ * interfaces size the properly size the output matrices according to the input
+ * matrices and the operation at hand.*/
+
+#define MATRIX_TEST_CONFIG_ADDITIVE_OUTPUT(input_type, \
+ matrix_a_ptr, \
+ matrix_b_ptr) \
+ do \
+ { \
+ ((input_type) &matrix_output_fut)->numRows = \
+ ((input_type)(matrix_a_ptr))->numRows; \
+ ((input_type) &matrix_output_fut)->numCols = \
+ ((input_type)(matrix_a_ptr))->numCols; \
+ ((input_type) &matrix_output_ref)->numRows = \
+ ((input_type)(matrix_a_ptr))->numRows; \
+ ((input_type) &matrix_output_ref)->numCols = \
+ ((input_type)(matrix_a_ptr))->numCols; \
+ } while (0)
+
+#define MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT(input_type, \
+ matrix_a_ptr, \
+ matrix_b_ptr) \
+ do \
+ { \
+ ((input_type) &matrix_output_fut)->numRows = \
+ ((input_type)(matrix_a_ptr))->numRows; \
+ ((input_type) &matrix_output_fut)->numCols = \
+ ((input_type)(matrix_b_ptr))->numCols; \
+ ((input_type) &matrix_output_ref)->numRows = \
+ ((input_type)(matrix_a_ptr))->numRows; \
+ ((input_type) &matrix_output_ref)->numCols = \
+ ((input_type)(matrix_b_ptr))->numCols; \
+ } while (0)
+
+#define MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(input_type, \
+ matrix_ptr) \
+ do \
+ { \
+ ((input_type) &matrix_output_fut)->numRows = \
+ ((input_type)(matrix_ptr))->numRows; \
+ ((input_type) &matrix_output_fut)->numCols = \
+ ((input_type)(matrix_ptr))->numCols; \
+ ((input_type) &matrix_output_ref)->numRows = \
+ ((input_type)(matrix_ptr))->numRows; \
+ ((input_type) &matrix_output_ref)->numCols = \
+ ((input_type)(matrix_ptr))->numCols; \
+ } while (0)
+
+#define MATRIX_TEST_CONFIG_TRANSPOSE_OUTPUT(input_type, \
+ matrix_ptr) \
+ do \
+ { \
+ ((input_type) &matrix_output_fut)->numRows = \
+ ((input_type)(matrix_ptr))->numCols; \
+ ((input_type) &matrix_output_fut)->numCols = \
+ ((input_type)(matrix_ptr))->numRows; \
+ ((input_type) &matrix_output_ref)->numRows = \
+ ((input_type)(matrix_ptr))->numCols; \
+ ((input_type) &matrix_output_ref)->numCols = \
+ ((input_type)(matrix_ptr))->numRows; \
+ } while (0)
+
+/*--------------------------------------------------------------------------------*/
+/* TEST Templates */
+/*--------------------------------------------------------------------------------*/
+
+#define MATRIX_TEST_TEMPLATE_ELT1(arr_desc_inputs, \
+ input_type, \
+ output_type, output_content_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ output_config_interface, \
+ dim_validation_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, input_type, input, arr_desc_inputs \
+ , \
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n", \
+ (int)input->numRows, \
+ (int)input->numCols); \
+ \
+ if (dim_validation_interface(input_type, \
+ input)) { \
+ output_config_interface(input_type, \
+ input); \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface(input), \
+ ref, ref_arg_interface(input)); \
+ compare_interface(output_type, \
+ output_content_type); \
+ } else { \
+ arm_status matrix_test_retval; \
+ TEST_CALL_FUT( \
+ matrix_test_retval = fut, \
+ fut_arg_interface(input)); \
+ \
+ /* If dimensions are known bad, the fut should */ \
+ /* detect it. */ \
+ if ( matrix_test_retval != ARM_MATH_SIZE_MISMATCH) { \
+ return JTEST_TEST_FAILED; \
+ } \
+ }); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+
+#define MATRIX_TEST_TEMPLATE_ELT2(arr_desc_inputs_a, \
+ arr_desc_inputs_b, \
+ input_type, \
+ output_type, output_content_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ output_config_interface, \
+ dim_validation_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_a_idx, input_type, input_a, arr_desc_inputs_a \
+ , \
+ input_type input_b = ARR_DESC_ELT( \
+ input_type, input_a_idx, \
+ &(arr_desc_inputs_b)); \
+ \
+ JTEST_DUMP_STRF("Matrix Dimensions: A %dx%d B %dx%d\n", \
+ (int)input_a->numRows, \
+ (int)input_a->numCols, \
+ (int)input_b->numRows, \
+ (int)input_b->numCols); \
+ \
+ if (dim_validation_interface(input_type, \
+ input_a, \
+ input_b)) { \
+ \
+ output_config_interface(input_type, \
+ input_a, \
+ input_b); \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface(input_a, input_b), \
+ ref, ref_arg_interface(input_a, input_b)); \
+ \
+ compare_interface(output_type, output_content_type); \
+ \
+ } else { \
+ arm_status matrix_test_retval; \
+ TEST_CALL_FUT( \
+ matrix_test_retval = fut, fut_arg_interface(input_a, input_b)); \
+ \
+ /* If dimensions are known bad, the fut should */ \
+ /* detect it. */ \
+ if ( matrix_test_retval != ARM_MATH_SIZE_MISMATCH) { \
+ return JTEST_TEST_FAILED; \
+ } \
+ }); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Specialization of #MATRIX_TEST_TEMPLATE_ELT2() for matrix tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define MATRIX_DEFINE_TEST_TEMPLATE_ELT2(fn_name, suffix, \
+ output_config_interface, \
+ dim_validation_interface, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ MATRIX_TEST_TEMPLATE_ELT2( \
+ matrix_##suffix##_a_inputs, \
+ matrix_##suffix##_b_inputs, \
+ arm_matrix_instance_##suffix * , \
+ arm_matrix_instance_##suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ output_config_interface, \
+ dim_validation_interface, \
+ comparison_interface); \
+ } \
+
+/**
+ * Specialization of #MATRIX_TEST_TEMPLATE_ELT1() for matrix tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define MATRIX_DEFINE_TEST_TEMPLATE_ELT1(fn_name, suffix, \
+ output_config_interface, \
+ dim_validation_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ MATRIX_TEST_TEMPLATE_ELT1( \
+ matrix_##suffix##_a_inputs, \
+ arm_matrix_instance_##suffix * , \
+ arm_matrix_instance_##suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ output_config_interface, \
+ dim_validation_interface, \
+ MATRIX_COMPARE_INTERFACE); \
+ } \
+
+
+#endif /* _MATRIX_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_data.h new file mode 100644 index 0000000..5940ae3 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_data.h @@ -0,0 +1,54 @@ +#ifndef _MATRIX_TEST_DATA_H_
+#define _MATRIX_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h" /* float32_t */
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+#define MATRIX_TEST_MAX_ROWS 4
+#define MATRIX_TEST_MAX_COLS 4
+#define MATRIX_TEST_BIGGEST_INPUT_TYPE float64_t
+#define MATRIX_TEST_MAX_ELTS (MATRIX_TEST_MAX_ROWS * MATRIX_TEST_MAX_COLS)
+#define MATRIX_MAX_COEFFS_LEN 16
+#define MATRIX_MAX_SHIFTS_LEN 5
+
+/**
+ * Declare the matrix inputs defined by MATRIX_DEFINE_INPUTS.
+ */
+#define MATRIX_DECLARE_INPUTS(suffix) \
+ ARR_DESC_DECLARE(matrix_##suffix##_a_inputs); \
+ ARR_DESC_DECLARE(matrix_##suffix##_b_inputs); \
+ ARR_DESC_DECLARE(matrix_##suffix##_invertible_inputs)
+
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+extern arm_matrix_instance_f32 matrix_output_fut;
+extern arm_matrix_instance_f32 matrix_output_ref;
+extern arm_matrix_instance_f64 matrix_output_fut64;
+extern arm_matrix_instance_f64 matrix_output_ref64;
+extern MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_fut[MATRIX_TEST_MAX_ELTS];
+extern MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_ref[MATRIX_TEST_MAX_ELTS];
+extern MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_scratch[MATRIX_TEST_MAX_ELTS];
+
+/* Matrix Inputs */
+MATRIX_DECLARE_INPUTS(f64);
+MATRIX_DECLARE_INPUTS(f32);
+MATRIX_DECLARE_INPUTS(q31);
+MATRIX_DECLARE_INPUTS(q15);
+
+extern const float32_t matrix_f32_scale_values[MATRIX_MAX_COEFFS_LEN];
+extern const q31_t matrix_q31_scale_values[MATRIX_MAX_COEFFS_LEN];
+extern const q15_t matrix_q15_scale_values[MATRIX_MAX_COEFFS_LEN];
+extern const int32_t matrix_shift_values[MATRIX_MAX_SHIFTS_LEN];
+
+#endif /* _MATRIX_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_group.h new file mode 100644 index 0000000..017b125 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_test_group.h @@ -0,0 +1,9 @@ +#ifndef _MATRIX_TEST_GROUP_H_
+#define _MATRIX_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(matrix_tests);
+
+#endif /* _MATRIX_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_tests.h new file mode 100644 index 0000000..9947c02 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/matrix_tests/matrix_tests.h @@ -0,0 +1,17 @@ +#ifndef _MATRIX_TESTS_H_
+#define _MATRIX_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(mat_add_tests);
+JTEST_DECLARE_GROUP(mat_cmplx_mult_tests);
+JTEST_DECLARE_GROUP(mat_init_tests);
+JTEST_DECLARE_GROUP(mat_inverse_tests);
+JTEST_DECLARE_GROUP(mat_mult_tests);
+JTEST_DECLARE_GROUP(mat_mult_fast_tests);
+JTEST_DECLARE_GROUP(mat_sub_tests);
+JTEST_DECLARE_GROUP(mat_trans_tests);
+JTEST_DECLARE_GROUP(mat_scale_tests);
+
+#endif /* _MATRIX_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_templates.h new file mode 100644 index 0000000..ddca35c --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_templates.h @@ -0,0 +1,157 @@ +#ifndef _STATISTICS_TEMPLATES_H_
+#define _STATISTICS_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Compare the outputs from the function under test and the reference function.
+ */
+#define STATISTICS_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ statistics_output_ref.data_ptr, \
+ statistics_output_fut.data_ptr, \
+ 1 * sizeof(output_type) /* All fns return one value*/ \
+ ); \
+ TEST_ASSERT_EQUAL( \
+ statistics_idx_fut, \
+ statistics_idx_ref); \
+ } while (0) \
+
+/*
+ * Comparison SNR thresholds for the data types used in statistics_tests.
+ */
+#define STATISTICS_SNR_THRESHOLD_float32_t 120
+#define STATISTICS_SNR_THRESHOLD_q31_t 100
+#define STATISTICS_SNR_THRESHOLD_q15_t 60
+#define STATISTICS_SNR_THRESHOLD_q7_t 30
+
+/**
+ * Compare reference and fut outputs using SNR.
+ *
+ * @note The outputs are converted to float32_t before comparison.
+ */
+#define STATISTICS_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ statistics_output_f32_ref, \
+ statistics_output_ref.data_ptr, \
+ statistics_output_f32_fut, \
+ statistics_output_fut.data_ptr, \
+ 1, /* All fns return one element*/ \
+ output_type, \
+ STATISTICS_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define ARM_max_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, \
+ statistics_output_fut.data_ptr, &statistics_idx_fut)
+
+#define REF_max_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, \
+ statistics_output_ref.data_ptr, &statistics_idx_ref)
+
+#define ARM_mean_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_fut.data_ptr)
+
+#define REF_mean_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_ref.data_ptr)
+
+#define ARM_min_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, \
+ statistics_output_fut.data_ptr, &statistics_idx_fut)
+
+#define REF_min_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, \
+ statistics_output_ref.data_ptr, &statistics_idx_ref)
+
+#define ARM_power_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_fut.data_ptr)
+
+#define REF_power_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_ref.data_ptr)
+
+#define ARM_rms_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_fut.data_ptr)
+
+#define REF_rms_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_ref.data_ptr)
+
+#define ARM_std_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_fut.data_ptr)
+
+#define REF_std_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_ref.data_ptr)
+
+#define ARM_var_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_fut.data_ptr)
+
+#define REF_var_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, block_size, statistics_output_ref.data_ptr)
+
+
+/*--------------------------------------------------------------------------------*/
+/* Test Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_BLK() for statistics tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_BLK( \
+ statistics_f_all, \
+ statistics_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+
+#endif /* _STATISTICS_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_data.h new file mode 100644 index 0000000..3e1ee09 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_data.h @@ -0,0 +1,44 @@ +#ifndef _STATISTICS_TEST_DATA_H_
+#define _STATISTICS_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+#define STATISTICS_MAX_INPUT_ELEMENTS 32
+#define STATISTICS_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+ARR_DESC_DECLARE(statistics_output_fut);
+ARR_DESC_DECLARE(statistics_output_ref);
+extern uint32_t statistics_idx_fut;
+extern uint32_t statistics_idx_ref;
+
+extern STATISTICS_BIGGEST_INPUT_TYPE
+statistics_output_f32_ref[STATISTICS_MAX_INPUT_ELEMENTS];
+
+extern STATISTICS_BIGGEST_INPUT_TYPE
+statistics_output_f32_fut[STATISTICS_MAX_INPUT_ELEMENTS];
+
+
+/* Block Sizes */
+ARR_DESC_DECLARE(statistics_block_sizes);
+
+/* Float Inputs */
+ARR_DESC_DECLARE(statistics_zeros);
+ARR_DESC_DECLARE(statistics_f_2);
+ARR_DESC_DECLARE(statistics_f_15);
+ARR_DESC_DECLARE(statistics_f_32);
+ARR_DESC_DECLARE(statistics_f_all);
+
+#endif /* _STATISTICS_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_group.h new file mode 100644 index 0000000..d1446ed --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_test_group.h @@ -0,0 +1,9 @@ +#ifndef _STATISTICS_TEST_GROUP_H_
+#define _STATISTICS_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(statistics_tests);
+
+#endif /* _STATISTICS_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_tests.h new file mode 100644 index 0000000..20df03e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/statistics_tests/statistics_tests.h @@ -0,0 +1,15 @@ +#ifndef _STATISTICS_TESTS_H_
+#define _STATISTICS_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(max_tests);
+JTEST_DECLARE_GROUP(mean_tests);
+JTEST_DECLARE_GROUP(min_tests);
+JTEST_DECLARE_GROUP(power_tests);
+JTEST_DECLARE_GROUP(rms_tests);
+JTEST_DECLARE_GROUP(std_tests);
+JTEST_DECLARE_GROUP(var_tests);
+
+#endif /* _STATISTICS_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_templates.h new file mode 100644 index 0000000..bc94791 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_templates.h @@ -0,0 +1,120 @@ +#ifndef _SUPPORT_TEMPLATES_H_
+#define _SUPPORT_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Compare the outputs from the function under test and the reference function.
+ */
+#define SUPPORT_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ support_output_ref.data_ptr, \
+ support_output_fut.data_ptr, \
+ block_size * sizeof(output_type)); \
+ } while (0) \
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define ARM_copy_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, support_output_fut.data_ptr, block_size)
+
+#define REF_copy_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, support_output_ref.data_ptr, block_size)
+
+#define ARM_fill_INPUT_INTERFACE(elt, block_size) \
+ PAREN(elt, support_output_fut.data_ptr, block_size)
+
+#define REF_fill_INPUT_INTERFACE(elt, block_size) \
+ PAREN(elt, support_output_ref.data_ptr, block_size)
+
+#define ARM_x_to_y_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, support_output_fut.data_ptr, block_size)
+
+#define REF_x_to_y_INPUT_INTERFACE(input, block_size) \
+ PAREN(input, support_output_ref.data_ptr, block_size)
+
+/*--------------------------------------------------------------------------------*/
+/* Test Templates */
+/*--------------------------------------------------------------------------------*/
+
+
+/**
+ * Specialization of #TEST_TEMPLATE_BUF1_BLK() for support tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define SUPPORT_DEFINE_TEST_TEMPLATE_BUF1_BLK(fn_name, \
+ suffix, \
+ input_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_BLK( \
+ support_f_all, \
+ support_block_sizes, \
+ input_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+/**
+ * Specialization of #TEST_TEMPLATE_ELT1_BLK() for support tests.
+ *
+ * @note This macro relies on the existance of ARM_xxx_INPUT_INTERFACE and
+ * REF_xxx_INPUT_INTERFACEs.
+ */
+#define SUPPORT_DEFINE_TEST_TEMPLATE_ELT1_BLK(fn_name, \
+ suffix, \
+ elt_type, \
+ output_type, \
+ comparison_interface) \
+ JTEST_DEFINE_TEST(arm_##fn_name##_##suffix##_test, \
+ arm_##fn_name##_##suffix) \
+ { \
+ TEST_TEMPLATE_ELT1_BLK( \
+ support_elts, \
+ support_block_sizes, \
+ elt_type, \
+ output_type, \
+ arm_##fn_name##_##suffix, \
+ ARM_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ REF_##fn_name##_INPUT_INTERFACE, \
+ comparison_interface); \
+ }
+
+#endif /* _SUPPORT_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_data.h new file mode 100644 index 0000000..cc6c636 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_data.h @@ -0,0 +1,31 @@ +#ifndef ARM_SUPPORT_TEST_DATA_H
+#define ARM_SUPPORT_TEST_DATA_H
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Variables */
+/*--------------------------------------------------------------------------------*/
+
+/* Input/Output Buffers */
+ARR_DESC_DECLARE(support_output_fut);
+ARR_DESC_DECLARE(support_output_ref);
+
+/* Block Sizes*/
+ARR_DESC_DECLARE(support_block_sizes);
+
+/* Numbers */
+ARR_DESC_DECLARE(support_elts);
+
+/* Float Inputs */
+ARR_DESC_DECLARE(support_zeros);
+ARR_DESC_DECLARE(support_f_2);
+ARR_DESC_DECLARE(support_f_15);
+ARR_DESC_DECLARE(support_f_32);
+ARR_DESC_DECLARE(support_f_all);
+
+#endif
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_group.h new file mode 100644 index 0000000..ef3a768 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_test_group.h @@ -0,0 +1,9 @@ +#ifndef _SUPPORT_TEST_GROUP_H_
+#define _SUPPORT_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(support_tests);
+
+#endif /* _SUPPORT_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_tests.h new file mode 100644 index 0000000..2eab273 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/support_tests/support_tests.h @@ -0,0 +1,11 @@ +#ifndef _SUPPORT_TESTS_H_
+#define _SUPPORT_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(copy_tests);
+JTEST_DECLARE_GROUP(fill_tests);
+JTEST_DECLARE_GROUP(x_to_y_tests);
+
+#endif /* _SUPPORT_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/template.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/template.h new file mode 100644 index 0000000..e4577d1 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/template.h @@ -0,0 +1,88 @@ +#ifndef _TEMPLATE_H_
+#define _TEMPLATE_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Looping and Iteration */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Template for the general structure of a loop.
+ */
+#define TEMPLATE_LOOP(setup, loop_def, body) \
+ do \
+ { \
+ setup; \
+ loop_def { \
+ body; \
+ } \
+ } while (0)
+
+/**
+ * Template for looping over an array-like sequence.
+ */
+#define TEMPLATE_DO_ARR_LIKE(iter_idx, type, \
+ arr, arr_length, \
+ iter_elem_setup, \
+ body) \
+ do \
+ { \
+ TEMPLATE_LOOP( \
+ int iter_idx, \
+ for(iter_idx = 0; iter_idx < (arr_length); ++iter_idx), \
+ iter_elem_setup; \
+ body); \
+ } while (0)
+
+/**
+ * Template for looping over the contents of an array.
+ */
+#define TEMPLATE_DO_ARR(iter_idx, type, iter_elem, arr, arr_length, body) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_LIKE( \
+ iter_idx, type, arr, arr_length, \
+ type iter_elem = (arr)[iter_idx], \
+ body); \
+ } while (0)
+
+/**
+ * Template for looping over the contents of an #ARR_DESC.
+ */
+#define TEMPLATE_DO_ARR_DESC(iter_idx, type, iter_elem, arr_desc, body) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_LIKE( \
+ iter_idx, type, arr_desc, (arr_desc).element_count, \
+ type iter_elem = ARR_DESC_ELT(type, iter_idx, &(arr_desc)), \
+ body); \
+ } while (0)
+
+/*--------------------------------------------------------------------------------*/
+/* Test Definition */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Template for the general structure of a test.
+ */
+#define TEMPLATE_TEST(setup, body, teardown) \
+ do \
+ { \
+ setup; \
+ body; \
+ teardown; \
+ } while (0)
+
+/**
+ * Template for calling a function.
+ *
+ * @note Surround function arguments with the #PAREN() macro.
+ *
+ * @example
+ * void my_func(int arg1, int arg2);
+ *
+ * TEMPLATE_CALL_FN(my_func, PAREN(3, 7));
+ */
+#define TEMPLATE_CALL_FN(fn, fn_args) \
+ fn fn_args
+
+#endif /* _TEMPLATE_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/test_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/test_templates.h new file mode 100644 index 0000000..3fa7c66 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/templates/test_templates.h @@ -0,0 +1,466 @@ +#ifndef _TEST_TEMPLATES_H_
+#define _TEST_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+#include "template.h"
+#include <string.h> /* memcmp() */
+#include <inttypes.h> /* PRIu32 */
+#include "math_helper.h" /* arm_snr_f32() */
+
+/*--------------------------------------------------------------------------------*/
+/* Function Aliases for use in Templates. */
+/*--------------------------------------------------------------------------------*/
+#define ref_q31_t_to_float ref_q31_to_float
+#define ref_q15_t_to_float ref_q15_to_float
+#define ref_q7_t_to_float ref_q7_to_float
+#define ref_float_to_q31_t ref_float_to_q31
+#define ref_float_to_q15_t ref_float_to_q15
+#define ref_float_to_q7_t ref_float_to_q7
+#define ref_float32_t_to_float ref_copy_f32
+#define ref_float_to_float32_t ref_copy_f32
+
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Call the function-under-test.
+ */
+#define TEST_CALL_FUT(fut, fut_args) \
+ JTEST_COUNT_CYCLES(TEMPLATE_CALL_FN(fut, fut_args))
+
+/**
+ * Call the reference-function.
+ */
+#define TEST_CALL_REF(ref, ref_args) \
+ TEMPLATE_CALL_FN(ref, ref_args)
+
+/**
+ * Call the function-under-test and the reference-function.
+ */
+#define TEST_CALL_FUT_AND_REF(fut, fut_args, ref, ref_args) \
+ do { \
+ TEST_CALL_FUT(fut, fut_args); \
+ TEST_CALL_REF(ref, ref_args); \
+ } while (0)
+
+/**
+ * This macro eats a variable number of arguments and evaluates to a null
+ * statement.
+ */
+#define TEST_NULL_STATEMENT(...) (void) "TEST_NULL_STATEMENT"
+
+/**
+ * A function name, Usable in any template where a fut or ref name is accepted,
+ * that evaluates to a #TEST_NULL_STATEMENT().
+ */
+#define TEST_NULL_FN TEST_NULL_STATEMENT
+
+/**
+ * Assert that buffers A and B are byte-equivalent for a number of bytes.
+ */
+
+#define TEST_ASSERT_BUFFERS_EQUAL(buf_a, buf_b, bytes)\
+ do \
+ { \
+ if (memcmp(buf_a, buf_b, bytes) != 0) \
+ { \
+ return JTEST_TEST_FAILED; \
+ } \
+ } while (0)
+
+
+
+
+/**
+ * Assert that the two entities are equal.
+ */
+#define TEST_ASSERT_EQUAL(a, b) \
+ do \
+ { \
+ if ((a) != (b)) \
+ { \
+ return JTEST_TEST_FAILED;\
+ } \
+ } while (0)
+
+/**
+ * Convert elements to from src_type to float.
+ */
+#define TEST_CONVERT_TO_FLOAT(src_ptr, dst_ptr, block_size, src_type) \
+ do \
+ { \
+ ref_##src_type##_to_float( \
+ src_ptr, \
+ dst_ptr, \
+ block_size); \
+ } while (0) \
+
+/**
+ * Convert elements to from float to dst_type .
+ */
+#define TEST_CONVERT_FLOAT_TO(src_ptr, dst_ptr, block_size, dst_type) \
+ do \
+ { \
+ ref_float_to_##dst_type( \
+ src_ptr, \
+ dst_ptr, \
+ block_size); \
+ } while (0) \
+
+/**
+ * Assert that the SNR between a reference and test sample is above a given
+ * threshold.
+ */
+
+#define TEST_ASSERT_SNR(ref_ptr, tst_ptr, block_size, threshold) \
+ do \
+ { \
+ float32_t snr = arm_snr_f32(ref_ptr, tst_ptr, block_size);\
+ if ( snr <= threshold) \
+ { \
+ JTEST_DUMP_STRF("SNR: %f\n", snr); \
+ return JTEST_TEST_FAILED; \
+ } \
+ } while (0)
+
+
+/**
+ * Assert that the SNR between a reference and test sample is above a given
+ * threshold. Special case for float64_t
+ */
+
+#define TEST_ASSERT_DBL_SNR(ref_ptr, tst_ptr, block_size, threshold)\
+ do \
+ { \
+ float64_t snr = arm_snr_f64(ref_ptr, tst_ptr, block_size); \
+ if ( snr <= threshold) \
+ { \
+ JTEST_DUMP_STRF("SNR: %f\n", snr); \
+ return JTEST_TEST_FAILED; \
+ } \
+ } while (0)
+
+
+/**
+ * Compare test and reference elements by converting to float and
+ * calculating an SNR.
+ *
+ * This macro is a merger of the #TEST_CONVERT_TO_FLOAT() and
+ * #TEST_ASSERT_SNR() macros.
+ */
+#define TEST_CONVERT_AND_ASSERT_SNR(ref_dst_ptr, ref_src_ptr, \
+ tst_dst_ptr, tst_src_ptr, \
+ block_size, \
+ tst_src_type, \
+ threshold) \
+ do \
+ { \
+ TEST_CONVERT_TO_FLOAT(ref_src_ptr, \
+ ref_dst_ptr, \
+ block_size, \
+ tst_src_type); \
+ TEST_CONVERT_TO_FLOAT(tst_src_ptr, \
+ tst_dst_ptr, \
+ block_size, \
+ tst_src_type); \
+ TEST_ASSERT_SNR(ref_dst_ptr, \
+ tst_dst_ptr, \
+ block_size, \
+ threshold); \
+ } while (0)
+
+/**
+ * Execute statements only if the combination of block size, function type
+ * specifier, and input ARR_DESC_t are valid.
+ *
+ * @example An ARR_DESC_t that contains 64 bytes cant service a 32 element
+ * block size if they are extracted in float32_t increments.
+ *
+ * 8 * 32 = 256 > 64.
+ */
+#define TEST_DO_VALID_BLOCKSIZE(block_size, fn_type_spec, \
+ input_arr_desc, body) \
+ do \
+ { \
+ if (block_size * sizeof(fn_type_spec) <= \
+ ARR_DESC_BYTES(input_arr_desc)) \
+ { \
+ JTEST_DUMP_STRF("Block Size: %"PRIu32"\n", block_size); \
+ body; \
+ } \
+ } while (0) \
+
+/**
+ * Template for tests that rely on one input buffer and a blocksize parameter.
+ *
+ * The buffer is an #ARR_DESC_t. It is iterated over and it's values are
+ * passed to the function under test and reference functions through their
+ * appropriate argument interfaces. The argument interfaces this template to
+ * execute structurally similar functions.
+ *
+ */
+#define TEST_TEMPLATE_BUF1_BLK(arr_desc_inputs, \
+ arr_desc_block_sizes, \
+ input_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, arr_desc_inputs \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ block_size_idx, uint32_t, block_size, arr_desc_block_sizes \
+ , \
+ void * input_data_ptr = input_ptr->data_ptr; \
+ \
+ TEST_DO_VALID_BLOCKSIZE( \
+ block_size, input_type, input_ptr \
+ , \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_data_ptr, block_size), \
+ ref, ref_arg_interface( \
+ input_data_ptr, block_size)); \
+ \
+ compare_interface(block_size, output_type)))); \
+ \
+ return JTEST_TEST_PASSED; \
+ \
+ } while (0)
+
+/**
+ * Template for tests that rely on an input buffer and an element.
+ *
+ * An element can is any thing which doesn't walk and talk like a
+ * sequence. Examples include numbers, and structures.
+ */
+#define TEST_TEMPLATE_BUF1_ELT1(arr_desc_inputs, \
+ arr_desc_elts, \
+ input_type, elt_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, arr_desc_inputs \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ elt_idx, elt_type, elt, arr_desc_elts \
+ , \
+ void * input_data_ptr = input_ptr->data_ptr; \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface(input_data_ptr, elt), \
+ ref, ref_arg_interface(input_data_ptr, elt)); \
+ \
+ compare_interface(output_type))); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Template for tests that rely on an input buffer, an element, and a blocksize
+ * parameter.
+ */
+#define TEST_TEMPLATE_BUF1_ELT1_BLK(arr_desc_inputs, \
+ arr_desc_elts, \
+ arr_desc_block_sizes, \
+ input_type, elt_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface); \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ inut_idx, ARR_DESC_t *, input_ptr, arr_desc_inputs \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ block_size_idx, uint32_t, block_size, \
+ arr_desc_block_sizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ elt_idx, elt_type, elt, arr_desc_elts \
+ , \
+ void * input_data_ptr = input_ptr->data_ptr; \
+ TEST_DO_VALID_BLOCKSIZE( \
+ block_size, input_type, input_ptr, \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_data_ptr, elt, block_size), \
+ ref, ref_arg_interface( \
+ input_data_ptr, elt, block_size)); \
+ compare_interface(block_size, output_type))))); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Template for tests that rely on an input buffer, two elements, and a blocksize
+ * parameter.
+ */
+#define TEST_TEMPLATE_BUF1_ELT2_BLK(arr_desc_inputs, \
+ arr_desc_elt1s, \
+ arr_desc_elt2s, \
+ arr_desc_block_sizes, \
+ input_type, elt1_type, \
+ elt2_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ inut_idx, ARR_DESC_t *, input_ptr, arr_desc_inputs \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ block_size_idx, uint32_t, block_size, \
+ arr_desc_block_sizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ elt1_idx, elt1_type, elt1, arr_desc_elt1s \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ elt2_idx, elt2_type, elt2, arr_desc_elt2s \
+ , \
+ void * input_data_ptr = input_ptr->data_ptr; \
+ TEST_DO_VALID_BLOCKSIZE( \
+ block_size, input_type, input_ptr, \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_data_ptr, elt1, elt2, block_size), \
+ ref, ref_arg_interface( \
+ input_data_ptr, elt1, elt2, block_size)); \
+ compare_interface(block_size, output_type)))))); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Template for tests that rely on two input buffers and a blocksize parameter.
+ *
+ * The two #ARR_DESC_t, input buffers are iterated through in parallel. The
+ * length of the first #ARR_DESC_t determines the length of the iteration.
+ */
+#define TEST_TEMPLATE_BUF2_BLK(arr_desc_inputs_a, \
+ arr_desc_inputs_b, \
+ arr_desc_block_sizes, \
+ input_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ /* Iterate over two input arrays in parallel.*/ \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, arr_desc_inputs_a \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ block_size_idx, uint32_t, block_size, arr_desc_block_sizes, \
+ void * input_a_ptr = input_ptr->data_ptr; \
+ void * input_b_ptr = ARR_DESC_ELT( \
+ ARR_DESC_t *, input_idx, \
+ &(arr_desc_inputs_b))->data_ptr; \
+ \
+ TEST_DO_VALID_BLOCKSIZE( \
+ block_size, input_type, input_ptr \
+ , \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_a_ptr, input_b_ptr, block_size), \
+ ref, ref_arg_interface( \
+ input_a_ptr, input_b_ptr, block_size)); \
+ \
+ compare_interface(block_size, output_type)))); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Test template that uses a single element.
+ */
+#define TEST_TEMPLATE_ELT1(arr_desc_elts, \
+ elt_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ elt_idx, elt_type, elt, arr_desc_elts \
+ , \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ elt), \
+ ref, ref_arg_interface( \
+ elt)); \
+ /* Comparison interfaces typically accept */ \
+ /* a block_size. Pass a dummy value 1.*/ \
+ compare_interface(1, output_type)); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Test template that iterates over two sets of elements in parallel.
+ *
+ * The length of the first set determines the number of iteratsions.
+ */
+#define TEST_TEMPLATE_ELT2(arr_desc_elts_a, \
+ arr_desc_elts_b, \
+ elt_a_type, elt_b_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ elt_a_idx, elt_a_type, elt_a, arr_desc_elts_a \
+ , \
+ elt_b_type * elt_b = ARR_DESC_ELT( \
+ elt_b_type, \
+ elt_a_idx, \
+ arr_desc_elts_b); \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ elt_a, elt_b), \
+ ref, ref_arg_interface( \
+ elt_a, elt_b)); \
+ /* Comparison interfaces typically accept */ \
+ /* a block_size. Pass a dummy value 1.*/ \
+ compare_interface(1, output_type)); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+/**
+ * Test template that uses an element and a block size.
+ */
+#define TEST_TEMPLATE_ELT1_BLK(arr_desc_elts, \
+ arr_desc_block_sizes, \
+ elt_type, output_type, \
+ fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ compare_interface) \
+ do \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ block_size_idx, uint32_t, block_size, \
+ arr_desc_block_sizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ elt_idx, elt_type, elt, arr_desc_elts \
+ , \
+ JTEST_DUMP_STRF("Block Size: %d\n", \
+ (int)block_size); \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ elt, block_size), \
+ ref, ref_arg_interface( \
+ elt, block_size)); \
+ compare_interface(block_size, output_type))); \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+#endif /* _TEST_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_templates.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_templates.h new file mode 100644 index 0000000..c6314b5 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_templates.h @@ -0,0 +1,181 @@ +#ifndef _TRANSFORM_TEMPLATES_H_
+#define _TRANSFORM_TEMPLATES_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "test_templates.h"
+#include <string.h> /* memcpy() */
+
+/*--------------------------------------------------------------------------------*/
+/* Group Specific Templates */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Comparison SNR thresholds for the data types used in transform_tests.
+ */
+#define TRANSFORM_SNR_THRESHOLD_float32_t 90
+#define TRANSFORM_SNR_THRESHOLD_q31_t 90
+#define TRANSFORM_SNR_THRESHOLD_q15_t 30
+
+#define DCT4_TRANSFORM_SNR_THRESHOLD_float32_t 80
+#define DCT4_TRANSFORM_SNR_THRESHOLD_q31_t 75
+#define DCT4_TRANSFORM_SNR_THRESHOLD_q15_t 11
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR.
+ */
+#define TRANSFORM_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ transform_fft_output_f32_ref, \
+ (output_type *) transform_fft_output_ref, \
+ transform_fft_output_f32_fut, \
+ (output_type *) transform_fft_output_fut, \
+ block_size, \
+ output_type, \
+ TRANSFORM_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0)
+
+/**
+ * Compare the outputs from the function under test and the reference
+ * function using SNR.
+ */
+#define DCT_TRANSFORM_SNR_COMPARE_INTERFACE(block_size, \
+ output_type) \
+ do \
+ { \
+ TEST_CONVERT_AND_ASSERT_SNR( \
+ transform_fft_output_f32_ref, \
+ (output_type *) transform_fft_output_ref, \
+ transform_fft_output_f32_fut, \
+ (output_type *) transform_fft_output_fut, \
+ block_size, \
+ output_type, \
+ DCT4_TRANSFORM_SNR_THRESHOLD_##output_type \
+ ); \
+ } while (0) \
+
+/**
+ * Specialization on #TRANSFORM_SNR_COMPARE_INTERFACE() to fix the block_size
+ * for complex datasets.
+ */
+#define TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE(block_size, output_type) \
+ /* Complex numbers have two components*/ \
+ TRANSFORM_SNR_COMPARE_INTERFACE(block_size * 2, output_type )
+
+/**
+ * This macro copys data from the input_ptr into input arrays.
+ *
+ * Some functions modify their input data; in order to provide the same data to
+ * multiple tests, copies must be made so the changes from one function don't
+ * impact the others.
+ */
+#define TRANSFORM_COPY_INPUTS(input_ptr, \
+ bytes) \
+ do \
+ { \
+ memcpy( \
+ transform_fft_input_fut, \
+ input_ptr, \
+ bytes); \
+ memcpy( \
+ transform_fft_input_ref, \
+ input_ptr, \
+ bytes); \
+ } while (0)
+
+/**
+ * This macro copys data from the input_ptr into input arrays. It also creates
+ * symmetric input data for rfft inverse.
+ *
+ * The 4.534234f just makes the middle entry of the array semi random. It's
+ * actual value doesn't seem to matter much.
+ *
+ * Some functions modify their input data; in order to provide the same data to
+ * multiple tests, copies must be made so the changes from one function don't
+ * impact the others.
+ */
+#define TRANSFORM_PREPARE_INVERSE_INPUTS(input_ptr, \
+ fftlen, input_type, bytes) \
+ do \
+ { \
+ uint32_t i; \
+ \
+ memcpy( \
+ transform_fft_input_fut, \
+ input_ptr, \
+ bytes); \
+ \
+ ((input_type*)transform_fft_input_fut)[1] = 0; \
+ ((input_type*)transform_fft_input_fut)[fftlen + 0] = 0; \
+ ((input_type*)transform_fft_input_fut)[fftlen + 1] = 0; \
+ for(i=1;i<fftlen/2;i++) \
+ { \
+ *((input_type*)transform_fft_input_fut + fftlen + 2*i + 0) = \
+ *((input_type*)transform_fft_input_fut + fftlen - 2*i + 0); \
+ *((input_type*)transform_fft_input_fut + fftlen + 2*i + 1) = \
+ -(*((input_type*)transform_fft_input_fut + fftlen - 2*i + 1)); \
+ \
+ } \
+ \
+ memcpy( \
+ transform_fft_input_ref, \
+ transform_fft_input_fut, \
+ bytes * 2); \
+ } while (0)
+
+/**
+ * This macro copys data from the input_ptr into the in-place input arrays.
+ *
+ * Some functions modify their input data; in order to provide the same data to
+ * multiple tests, copies must be made so the changes from one function don't
+ * impact the others.
+ */
+#define TRANSFORM_PREPARE_INPLACE_INPUTS_DOWNSHIFT(input_ptr, \
+ bytes, \
+ type) \
+ do \
+ { \
+ uint32_t i; \
+ memcpy( \
+ transform_fft_inplace_input_fut, \
+ input_ptr, \
+ bytes); \
+ memcpy( \
+ transform_fft_inplace_input_ref, \
+ input_ptr, \
+ bytes); \
+ for(i=0;i<bytes/sizeof(type);i++) { \
+ *((type*)transform_fft_inplace_input_fut + i) >>= 1; \
+ *((type*)transform_fft_inplace_input_ref + i) >>= 1;} \
+ } while (0)
+
+/**
+ * This macro copys data from the input_ptr into the in-place input arrays.
+ *
+ * Some functions modify their input data; in order to provide the same data to
+ * multiple tests, copies must be made so the changes from one function don't
+ * impact the others.
+ */
+#define TRANSFORM_PREPARE_INPLACE_INPUTS(input_ptr, \
+ bytes) \
+ do \
+ { \
+ memcpy( \
+ transform_fft_inplace_input_fut, \
+ input_ptr, \
+ bytes); \
+ memcpy( \
+ transform_fft_inplace_input_ref, \
+ input_ptr, \
+ bytes); \
+ } while (0)
+
+
+#endif /* _TRANSFORM_TEMPLATES_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_data.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_data.h new file mode 100644 index 0000000..bda5e12 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_data.h @@ -0,0 +1,48 @@ +#ifndef _TRANSFORM_TEST_DATA_H_
+#define _TRANSFORM_TEST_DATA_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Includes */
+/*--------------------------------------------------------------------------------*/
+
+#include "arr_desc.h"
+#include "arm_math.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define TRANSFORM_MAX_FFT_LEN 4096
+#define TRANFORM_BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Variable Declarations */
+/*--------------------------------------------------------------------------------*/
+
+/* Lengths are multiplied by 2 to accomodate complex numbers*/
+extern float32_t transform_fft_output_fut[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t transform_fft_output_ref[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t transform_fft_input_fut[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t transform_fft_input_ref[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t transform_fft_output_f32_fut[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t transform_fft_output_f32_ref[TRANSFORM_MAX_FFT_LEN * 2];
+extern float32_t * transform_fft_inplace_input_fut;
+extern float32_t * transform_fft_inplace_input_ref;
+extern float32_t transform_fft_f32_inputs[TRANSFORM_MAX_FFT_LEN * 2];
+extern q31_t transform_fft_q31_inputs[TRANSFORM_MAX_FFT_LEN * 2];
+extern q15_t * transform_fft_q15_inputs;
+extern q15_t dct4_transform_fft_q15_inputs[TRANSFORM_MAX_FFT_LEN * 2];
+
+/* FFT Lengths */
+ARR_DESC_DECLARE(transform_radix2_fftlens);
+ARR_DESC_DECLARE(transform_radix4_fftlens);
+ARR_DESC_DECLARE(transform_rfft_fftlens);
+ARR_DESC_DECLARE(transform_rfft_fast_fftlens);
+ARR_DESC_DECLARE(transform_dct_fftlens);
+
+/* CFFT Structs */
+ARR_DESC_DECLARE(transform_cfft_f32_structs);
+ARR_DESC_DECLARE(transform_cfft_q31_structs);
+ARR_DESC_DECLARE(transform_cfft_q15_structs);
+
+#endif /* _TRANSFORM_TEST_DATA_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_group.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_group.h new file mode 100644 index 0000000..c1c7c9e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_test_group.h @@ -0,0 +1,9 @@ +#ifndef _TRANSFORM_TEST_GROUP_H_
+#define _TRANSFORM_TEST_GROUP_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Declare Test Groups */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(transform_tests);
+
+#endif /* _TRANSFORM_TEST_GROUP_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_tests.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_tests.h new file mode 100644 index 0000000..874c83f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/transform_tests/transform_tests.h @@ -0,0 +1,13 @@ +#ifndef _TRANSFORM_TESTS_H_
+#define _TRANSFORM_TESTS_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Test/Group Declarations */
+/*--------------------------------------------------------------------------------*/
+JTEST_DECLARE_GROUP(cfft_tests);
+JTEST_DECLARE_GROUP(cfft_family_tests);
+JTEST_DECLARE_GROUP(dct4_tests);
+JTEST_DECLARE_GROUP(rfft_tests);
+JTEST_DECLARE_GROUP(rfft_fast_tests);
+
+#endif /* _TRANSFORM_TESTS_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/type_abbrev.h b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/type_abbrev.h new file mode 100644 index 0000000..5909124 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/inc/type_abbrev.h @@ -0,0 +1,37 @@ +#ifndef _TYPE_ABBREV_H_
+#define _TYPE_ABBREV_H_
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Expand the abbreviation for a type into the type itself.
+ */
+#define TYPE_FROM_ABBREV(abbrev) \
+ TYPE_ABBREV_##abbrev \
+
+/**
+ * Expand the type to an abbreviation for that type.
+ *
+ * Inverse of #TYPE_FROM_ABBREV().
+ *
+ * @note Should be able to get a type back by writing.
+ * TYPE_FROM_ABBREV(ABBREV_FROM_TYPE(type))
+ */
+#define ABBREV_FROM_TYPE(type) \
+ TYPE_SUFFIX_##type
+
+#define TYPE_ABBREV_f64 float64_t
+#define TYPE_ABBREV_f32 float32_t
+#define TYPE_ABBREV_q31 q31_t
+#define TYPE_ABBREV_q15 q15_t
+#define TYPE_ABBREV_q7 q7_t
+
+#define TYPE_SUFFIX_float64_t f64
+#define TYPE_SUFFIX_float32_t f32
+#define TYPE_SUFFIX_q31_t q31
+#define TYPE_SUFFIX_q15_t q15
+#define TYPE_SUFFIX_q7_t q7
+
+#endif /* _TYPE_ABBREV_H_ */
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/Retarget.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/Retarget.c new file mode 100644 index 0000000..ffac3df --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/Retarget.c @@ -0,0 +1,52 @@ +/*----------------------------------------------------------------------------
+ * Name: Retarget.c
+ * Purpose: 'Retarget' layer for target-dependent low level functions
+ * Note(s):
+ *----------------------------------------------------------------------------
+ * This file is part of the uVision/ARM development tools.
+ * This software may only be used under the terms of a valid, current,
+ * end user licence from KEIL for a compatible version of KEIL software
+ * development tools. Nothing else gives you the right to use this software.
+ *
+ * This software is supplied "AS IS" without warranties of any kind.
+ *
+ * Copyright (c) 2011 Keil - An ARM Company. All rights reserved.
+ *----------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <rt_misc.h>
+#include "Serial.h"
+
+#pragma import(__use_no_semihosting_swi)
+
+
+
+struct __FILE { int handle; /* Add whatever you need here */ };
+FILE __stdout;
+FILE __stdin;
+
+
+int fputc(int c, FILE *f) {
+ return (SER_PutChar(c));
+}
+
+
+int fgetc(FILE *f) {
+ return (SER_GetChar());
+}
+
+
+int ferror(FILE *f) {
+ /* Your implementation of ferror */
+ return EOF;
+}
+
+
+void _ttywrch(int c) {
+ SER_PutChar(c);
+}
+
+
+void _sys_exit(int return_code) {
+label: goto label; /* endless loop */
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv6-m.s b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv6-m.s new file mode 100644 index 0000000..5c78027 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv6-m.s @@ -0,0 +1,111 @@ +;/* File: startup_armv6-m.s
+; * Purpose: startup file for armv7-m architecture devices.
+; * Should be used with ARMCC
+; * Version: V2.00
+; * Date: 16 November 2015
+; *
+; */
+;/* Copyright (c) 2011 - 2014 ARM LIMITED
+;
+; All rights reserved.
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; - Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; - Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution.
+; - Neither the name of ARM nor the names of its contributors may be used
+; to endorse or promote products derived from this software without
+; specific prior written permission.
+; *
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+; ---------------------------------------------------------------------------*/
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ IMPORT ||Image$$ARM_LIB_STACK$$ZI$$Limit||
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD ||Image$$ARM_LIB_STACK$$ZI$$Limit|| ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; NMI Handler
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+ ALIGN
+
+ END
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv7-m.s b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv7-m.s new file mode 100644 index 0000000..11e5886 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCC/startup_armv7-m.s @@ -0,0 +1,134 @@ +;/* File: startup_armv7-m.s
+; * Purpose: startup file for armv7-m architecture devices.
+; * Should be used with ARMCC
+; * Version: V2.00
+; * Date: 16 November 2015
+; *
+; */
+;/* Copyright (c) 2011 - 2014 ARM LIMITED
+;
+; All rights reserved.
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; - Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; - Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution.
+; - Neither the name of ARM nor the names of its contributors may be used
+; to endorse or promote products derived from this software without
+; specific prior written permission.
+; *
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+; ---------------------------------------------------------------------------*/
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ IMPORT ||Image$$ARM_LIB_STACK$$ZI$$Limit||
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD ||Image$$ARM_LIB_STACK$$ZI$$Limit|| ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; NMI Handler
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD MemManage_Handler ; MPU Fault Handler
+ DCD BusFault_Handler ; Bus Fault Handler
+ DCD UsageFault_Handler ; Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD DebugMon_Handler ; Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ BKPT #0
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+ ALIGN
+
+ END
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv6-m.S b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv6-m.S new file mode 100644 index 0000000..c87b893 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv6-m.S @@ -0,0 +1,127 @@ +/* File: startup_armv6-m.S
+ * Purpose: startup file for armv6-m architecture devices.
+ * Should be used with ARMCLANG
+ * Version: V2.00
+ * Date: 16 November 2015
+ *
+ */
+/* Copyright (c) 2011 - 2015 ARM LIMITED
+
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of ARM nor the names of its contributors may be used
+ to endorse or promote products derived from this software without
+ specific prior written permission.
+ *
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ ---------------------------------------------------------------------------*/
+/*
+ ;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+*/
+
+
+ .syntax unified
+ .arch armv6-m
+
+/* .eabi_attribute Tag_ABI_align8_preserved,1 www.support.code-red-tech.com/CodeRedWiki/Preserve8 */
+.eabi_attribute 25, 1 /* Tag_ABI_align_preserved */
+
+ .global Image$$ARM_LIB_STACK$$ZI$$Limit
+
+
+ .section RESET, "x"
+ .align 2
+ .globl __Vectors
+ .globl __Vectors_End
+ .globl __Vectors_Size
+__Vectors:
+ .long Image$$ARM_LIB_STACK$$ZI$$Limit /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long NMI_Handler /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+__Vectors_End:
+
+ .equ __Vectors_Size, __Vectors_End - __Vectors
+
+
+ .text
+ .thumb
+ .align 2
+
+ .globl Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+ .thumb_func
+Reset_Handler:
+ bl SystemInit
+ bl __main
+
+ .globl NMI_Handler
+ .weak NMI_Handler
+ .type NMI_Handler, %function
+ .thumb_func
+NMI_Handler:
+ bkpt #0
+ b .
+
+ .globl HardFault_Handler
+ .weak HardFault_Handler
+ .type HardFault_Handler, %function
+ .thumb_func
+HardFault_Handler:
+ bkpt #0
+ b .
+
+ .globl SVC_Handler
+ .weak SVC_Handler
+ .type SVC_Handler, %function
+ .thumb_func
+SVC_Handler:
+ bkpt #0
+ b .
+
+ .globl PendSV_Handler
+ .weak PendSV_Handler
+ .type PendSV_Handler, %function
+ .thumb_func
+PendSV_Handler:
+ bkpt #0
+ b .
+
+ .globl SysTick_Handler
+ .weak SysTick_Handler
+ .type SysTick_Handler, %function
+ .thumb_func
+SysTick_Handler:
+ bkpt #0
+ b .
+
+ .end
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv7-m.S b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv7-m.S new file mode 100644 index 0000000..bf6c54e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/ARMCLANG/startup_armv7-m.S @@ -0,0 +1,159 @@ +/* File: startup_armv7-m.S
+ * Purpose: startup file for armv7-m architecture devices.
+ * Should be used with ARMCLANG
+ * Version: V2.00
+ * Date: 16 November 2015
+ *
+ */
+/* Copyright (c) 2011 - 2015 ARM LIMITED
+
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of ARM nor the names of its contributors may be used
+ to endorse or promote products derived from this software without
+ specific prior written permission.
+ *
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ ---------------------------------------------------------------------------*/
+/*
+ ;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+*/
+
+
+ .syntax unified
+ .arch armv7-m
+
+/* .eabi_attribute Tag_ABI_align8_preserved,1 www.support.code-red-tech.com/CodeRedWiki/Preserve8 */
+.eabi_attribute 25, 1 /* Tag_ABI_align_preserved */
+
+ .global Image$$ARM_LIB_STACK$$ZI$$Limit
+
+
+ .section RESET, "x"
+ .align 2
+ .globl __Vectors
+ .globl __Vectors_End
+ .globl __Vectors_Size
+__Vectors:
+ .long Image$$ARM_LIB_STACK$$ZI$$Limit /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long NMI_Handler /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long MemManage_Handler /* MPU Fault Handler */
+ .long BusFault_Handler /* Bus Fault Handler */
+ .long UsageFault_Handler /* Usage Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long DebugMon_Handler /* Debug Monitor Handler */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+__Vectors_End:
+
+ .equ __Vectors_Size, __Vectors_End - __Vectors
+
+
+ .text
+ .thumb
+ .align 2
+
+ .globl Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+ .thumb_func
+Reset_Handler:
+ bl SystemInit
+ bl __main
+
+ .globl NMI_Handler
+ .weak NMI_Handler
+ .type NMI_Handler, %function
+ .thumb_func
+NMI_Handler:
+ bkpt #0
+ b .
+
+ .globl HardFault_Handler
+ .weak HardFault_Handler
+ .type HardFault_Handler, %function
+ .thumb_func
+HardFault_Handler:
+ bkpt #0
+ b .
+
+ .globl MemManage_Handler
+ .weak MemManage_Handler
+ .type MemManage_Handler, %function
+ .thumb_func
+MemManage_Handler:
+ bkpt #0
+ b .
+
+ .globl BusFault_Handler
+ .weak BusFault_Handler
+ .type BusFault_Handler, %function
+ .thumb_func
+BusFault_Handler:
+ bkpt #0
+ b .
+
+ .globl UsageFault_Handler
+ .weak UsageFault_Handler
+ .type UsageFault_Handler, %function
+ .thumb_func
+UsageFault_Handler:
+ bkpt #0
+ b .
+
+ .globl SVC_Handler
+ .weak SVC_Handler
+ .type SVC_Handler, %function
+ .thumb_func
+SVC_Handler:
+ bkpt #0
+ b .
+
+ .globl DebugMon_Handler
+ .weak DebugMon_Handler
+ .type DebugMon_Handler, %function
+ .thumb_func
+DebugMon_Handler:
+ bkpt #0
+ b .
+
+ .globl PendSV_Handler
+ .weak PendSV_Handler
+ .type PendSV_Handler, %function
+ .thumb_func
+PendSV_Handler:
+ bkpt #0
+ b .
+
+ .globl SysTick_Handler
+ .weak SysTick_Handler
+ .type SysTick_Handler, %function
+ .thumb_func
+SysTick_Handler:
+ bkpt #0
+ b .
+
+ .end
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/Retarget.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/Retarget.c new file mode 100644 index 0000000..0ab6c13 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/Retarget.c @@ -0,0 +1,106 @@ +/*----------------------------------------------------------------------------
+ * Name: Retarget.c
+ * Purpose: 'Retarget' layer for target-dependent low level functions
+ * Note(s):
+ *----------------------------------------------------------------------------
+ * This file is part of the uVision/ARM development tools.
+ * This software may only be used under the terms of a valid, current,
+ * end user licence from KEIL for a compatible version of KEIL software
+ * development tools. Nothing else gives you the right to use this software.
+ *
+ * This software is supplied "AS IS" without warranties of any kind.
+ *
+ * Copyright (c) 2012 Keil - An ARM Company. All rights reserved.
+ *----------------------------------------------------------------------------*/
+
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+
+int SER_PutChar (int c) {
+
+ return (c);
+}
+
+int SER_GetChar (void) {
+
+ return (-1);
+}
+
+/*-- GCC - Newlib runtime support --------------------------------------------*/
+
+extern int __HeapBase;
+extern int __HeapLimit;
+
+int _open (const char * path, int flags, ...)
+{
+ return (-1);
+}
+
+int _close (int fd)
+{
+ return (-1);
+}
+
+int _lseek (int fd, int ptr, int dir)
+{
+ return (0);
+}
+
+int __attribute__((weak)) _fstat (int fd, struct stat * st)
+{
+ memset (st, 0, sizeof (* st));
+ st->st_mode = S_IFCHR;
+ return (0);
+}
+
+int _isatty (int fd)
+{
+ return (1);
+}
+
+int _read (int fd, char * ptr, int len)
+{
+ char c;
+ int i;
+
+ for (i = 0; i < len; i++)
+ {
+ c = SER_GetChar();
+ if (c == 0x0D) break;
+ *ptr++ = c;
+ SER_PutChar(c);
+ }
+ return (len - i);
+}
+
+int _write (int fd, char * ptr, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++) SER_PutChar (*ptr++);
+ return (i);
+}
+
+caddr_t _sbrk (int incr)
+{
+ static char * heap;
+ char * prev_heap;
+
+ if (heap == NULL)
+ {
+ heap = (char *)&__HeapBase;
+ }
+
+ prev_heap = heap;
+
+ if ((heap + incr) > (char *)&__HeapLimit)
+ {
+ errno = ENOMEM;
+ return (caddr_t) -1;
+ }
+
+ heap += incr;
+
+ return (caddr_t) prev_heap;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv6-m.S b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv6-m.S new file mode 100644 index 0000000..c928912 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv6-m.S @@ -0,0 +1,263 @@ +/* File: startup_armv6-m.S
+ * Purpose: startup file for armv6-m architecture devices.
+ * Should be used with GCC for ARM Embedded Processors
+ * Version: V2.00
+ * Date: 16 November 2015
+ *
+ */
+/* Copyright (c) 2011 - 2015 ARM LIMITED
+
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of ARM nor the names of its contributors may be used
+ to endorse or promote products derived from this software without
+ specific prior written permission.
+ *
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ ---------------------------------------------------------------------------*/
+
+
+ .syntax unified
+ .arch armv6-m
+
+ .section .stack
+ .align 3
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00000400
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+__StackLimit:
+ .space Stack_Size
+ .size __StackLimit, . - __StackLimit
+__StackTop:
+ .size __StackTop, . - __StackTop
+
+ .section .heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000C00
+#endif
+ .globl __HeapBase
+ .globl __HeapLimit
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+ .size __HeapBase, . - __HeapBase
+__HeapLimit:
+ .size __HeapLimit, . - __HeapLimit
+
+ .section .vectors
+ .align 2
+ .globl __Vectors
+__Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long NMI_Handler /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ .size __Vectors, . - __Vectors
+
+ .text
+ .thumb
+ .thumb_func
+ .align 1
+ .globl Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+/* Firstly it copies data from read only memory to RAM. There are two schemes
+ * to copy. One can copy more than one sections. Another can only copy
+ * one section. The former scheme needs more instructions and read-only
+ * data to implement than the latter.
+ * Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes. */
+
+#ifdef __STARTUP_COPY_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of triplets, each of which specify:
+ * offset 0: LMA of start of a section to copy from
+ * offset 4: VMA of start of a section to copy to
+ * offset 8: size of the section to copy. Must be multiply of 4
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r4, =__copy_table_start__
+ ldr r5, =__copy_table_end__
+
+.L_loop0:
+ cmp r4, r5
+ bge .L_loop0_done
+ ldr r1, [r4]
+ ldr r2, [r4, #4]
+ ldr r3, [r4, #8]
+
+.L_loop0_0:
+ subs r3, #4
+ blt .L_loop0_0_done
+ ldr r0, [r1, r3]
+ str r0, [r2, r3]
+ b .L_loop0_0
+
+.L_loop0_0_done:
+ adds r4, #12
+ b .L_loop0
+
+.L_loop0_done:
+#else
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__etext
+ ldr r2, =__data_start__
+ ldr r3, =__data_end__
+
+ subs r3, r2
+ ble .L_loop1_done
+
+.L_loop1:
+ subs r3, #4
+ ldr r0, [r1,r3]
+ str r0, [r2,r3]
+ bgt .L_loop1
+
+.L_loop1_done:
+#endif /*__STARTUP_COPY_MULTIPLE */
+
+/* This part of work usually is done in C library startup code. Otherwise,
+ * define this macro to enable it in this startup.
+ *
+ * There are two schemes too. One can clear multiple BSS sections. Another
+ * can only clear one section. The former is more size expensive than the
+ * latter.
+ *
+ * Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former.
+ * Otherwise efine macro __STARTUP_CLEAR_BSS to choose the later.
+ */
+#ifdef __STARTUP_CLEAR_BSS_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of tuples specifying:
+ * offset 0: Start of a BSS section
+ * offset 4: Size of this BSS section. Must be multiply of 4
+ */
+ ldr r3, =__zero_table_start__
+ ldr r4, =__zero_table_end__
+
+.L_loop2:
+ cmp r3, r4
+ bge .L_loop2_done
+ ldr r1, [r3]
+ ldr r2, [r3, #4]
+ movs r0, 0
+
+.L_loop2_0:
+ subs r2, #4
+ blt .L_loop2_0_done
+ str r0, [r1, r2]
+ b .L_loop2_0
+.L_loop2_0_done:
+
+ adds r3, #8
+ b .L_loop2
+.L_loop2_done:
+#elif defined (__STARTUP_CLEAR_BSS)
+/* Single BSS section scheme.
+ *
+ * The BSS section is specified by following symbols
+ * __bss_start__: start of the BSS section.
+ * __bss_end__: end of the BSS section.
+ *
+ * Both addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__bss_start__
+ ldr r2, =__bss_end__
+
+ movs r0, 0
+
+ subs r2, r1
+ ble .L_loop3_done
+
+.L_loop3:
+ subs r2, #4
+ str r0, [r1, r2]
+ bgt .L_loop3
+.L_loop3_done:
+#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */
+
+#ifndef __NO_SYSTEM_INIT
+ bl SystemInit
+#endif
+
+#ifndef __START
+#define __START _start
+#endif
+ bl __START
+
+ .pool
+ .size Reset_Handler, . - Reset_Handler
+
+ .align 1
+ .thumb_func
+ .weak Default_Handler
+ .type Default_Handler, %function
+Default_Handler:
+ bkpt #0
+ b .
+ .size Default_Handler, . - Default_Handler
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+ def_irq_handler HardFault_Handler
+ def_irq_handler SVC_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ .end
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv7-m.S b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv7-m.S new file mode 100644 index 0000000..2320877 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/GCC/startup_armv7-m.S @@ -0,0 +1,257 @@ +/* File: startup_armv7-m.S
+ * Purpose: startup file for armv7-m architecture devices.
+ * Should be used with GCC for ARM Embedded Processors
+ * Version: V2.00
+ * Date: 16 November 2015
+ *
+ */
+/* Copyright (c) 2011 - 2015 ARM LIMITED
+
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of ARM nor the names of its contributors may be used
+ to endorse or promote products derived from this software without
+ specific prior written permission.
+ *
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ ---------------------------------------------------------------------------*/
+
+
+ .syntax unified
+ .arch armv7-m
+
+ .section .stack
+ .align 3
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00000400
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+__StackLimit:
+ .space Stack_Size
+ .size __StackLimit, . - __StackLimit
+__StackTop:
+ .size __StackTop, . - __StackTop
+
+ .section .heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000C00
+#endif
+ .globl __HeapBase
+ .globl __HeapLimit
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+ .size __HeapBase, . - __HeapBase
+__HeapLimit:
+ .size __HeapLimit, . - __HeapLimit
+
+ .section .vectors
+ .align 2
+ .globl __Vectors
+__Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long NMI_Handler /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long MemManage_Handler /* MPU Fault Handler */
+ .long BusFault_Handler /* Bus Fault Handler */
+ .long UsageFault_Handler /* Usage Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long DebugMon_Handler /* Debug Monitor Handler */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ .size __Vectors, . - __Vectors
+
+ .text
+ .thumb
+ .thumb_func
+ .align 2
+ .globl Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+/* Firstly it copies data from read only memory to RAM. There are two schemes
+ * to copy. One can copy more than one sections. Another can only copy
+ * one section. The former scheme needs more instructions and read-only
+ * data to implement than the latter.
+ * Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes. */
+
+#ifdef __STARTUP_COPY_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of triplets, each of which specify:
+ * offset 0: LMA of start of a section to copy from
+ * offset 4: VMA of start of a section to copy to
+ * offset 8: size of the section to copy. Must be multiply of 4
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r4, =__copy_table_start__
+ ldr r5, =__copy_table_end__
+
+.L_loop0:
+ cmp r4, r5
+ bge .L_loop0_done
+ ldr r1, [r4]
+ ldr r2, [r4, #4]
+ ldr r3, [r4, #8]
+
+.L_loop0_0:
+ subs r3, #4
+ ittt ge
+ ldrge r0, [r1, r3]
+ strge r0, [r2, r3]
+ bge .L_loop0_0
+
+ adds r4, #12
+ b .L_loop0
+
+.L_loop0_done:
+#else
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__etext
+ ldr r2, =__data_start__
+ ldr r3, =__data_end__
+
+.L_loop1:
+ cmp r2, r3
+ ittt lt
+ ldrlt r0, [r1], #4
+ strlt r0, [r2], #4
+ blt .L_loop1
+#endif /*__STARTUP_COPY_MULTIPLE */
+
+/* This part of work usually is done in C library startup code. Otherwise,
+ * define this macro to enable it in this startup.
+ *
+ * There are two schemes too. One can clear multiple BSS sections. Another
+ * can only clear one section. The former is more size expensive than the
+ * latter.
+ *
+ * Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former.
+ * Otherwise efine macro __STARTUP_CLEAR_BSS to choose the later.
+ */
+#ifdef __STARTUP_CLEAR_BSS_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of tuples specifying:
+ * offset 0: Start of a BSS section
+ * offset 4: Size of this BSS section. Must be multiply of 4
+ */
+ ldr r3, =__zero_table_start__
+ ldr r4, =__zero_table_end__
+
+.L_loop2:
+ cmp r3, r4
+ bge .L_loop2_done
+ ldr r1, [r3]
+ ldr r2, [r3, #4]
+ movs r0, 0
+
+.L_loop2_0:
+ subs r2, #4
+ itt ge
+ strge r0, [r1, r2]
+ bge .L_loop2_0
+
+ adds r3, #8
+ b .L_loop2
+.L_loop2_done:
+#elif defined (__STARTUP_CLEAR_BSS)
+/* Single BSS section scheme.
+ *
+ * The BSS section is specified by following symbols
+ * __bss_start__: start of the BSS section.
+ * __bss_end__: end of the BSS section.
+ *
+ * Both addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__bss_start__
+ ldr r2, =__bss_end__
+
+ movs r0, 0
+.L_loop3:
+ cmp r1, r2
+ itt lt
+ strlt r0, [r1], #4
+ blt .L_loop3
+#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */
+
+#ifndef __NO_SYSTEM_INIT
+ bl SystemInit
+#endif
+
+#ifndef __START
+#define __START _start
+#endif
+ bl __START
+
+ .pool
+ .size Reset_Handler, . - Reset_Handler
+
+ .align 1
+ .thumb_func
+ .weak Default_Handler
+ .type Default_Handler, %function
+Default_Handler:
+ bkpt #0
+ b .
+ .size Default_Handler, . - Default_Handler
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+ def_irq_handler HardFault_Handler
+ def_irq_handler MemManage_Handler
+ def_irq_handler BusFault_Handler
+ def_irq_handler UsageFault_Handler
+ def_irq_handler SVC_Handler
+ def_irq_handler DebugMon_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ .end
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/startup_generic.S b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/startup_generic.S new file mode 100644 index 0000000..b8d454e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/startup_generic.S @@ -0,0 +1,68 @@ +
+#if defined (__CC_ARM)
+ #if (defined (ARMCM0))
+ #include "ARMCC\startup_armv6-m.s"
+ #elif (defined (ARMCM0P) || defined (ARMCM0P_MPU))
+ #include "ARMCC\startup_armv6-m.s"
+ #elif (defined (ARMCM3))
+ #include "ARMCC\startup_armv7-m.s"
+ #elif (defined (ARMCM4) || defined (ARMCM4_FP))
+ #include "ARMCC\startup_armv7-m.s"
+ #elif (defined (ARMCM7) || defined (ARMCM7_SP) || defined (ARMCM7_DP))
+ #include "ARMCC\startup_armv7-m.s"
+ #elif (defined (ARMv8MBL))
+ #include "ARMCC\startup_armv6-m.s"
+ #elif (defined (ARMv8MML) || defined (ARMv8MML_DSP) || \
+ defined (ARMv8MML_SP) || defined (ARMv8MML_DSP_SP) || \
+ defined (ARMv8MML_DP) || defined (ARMv8MML_DSP_DP) )
+ #include "ARMCC\startup_armv7-m.s"
+ #else
+ #error "No appropriate startup file found!"
+ #endif
+
+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #if (defined (ARMCM0))
+ #include "ARMCLANG\startup_armv6-m.S"
+ #elif (defined (ARMCM0P) || defined (ARMCM0P_MPU))
+ #include "ARMCLANG\startup_armv6-m.S"
+ #elif (defined (ARMCM3))
+ #include "ARMCLANG\startup_armv7-m.S"
+ #elif (defined (ARMCM4) || defined (ARMCM4_FP))
+ #include "ARMCLANG\startup_armv7-m.S"
+ #elif (defined (ARMCM7) || defined (ARMCM7_SP) || defined (ARMCM7_DP))
+ #include "ARMCLANG\startup_armv7-m.S"
+ #elif (defined (ARMv8MBL))
+ #include "ARMCLANG\startup_armv6-m.S"
+ #elif (defined (ARMv8MML) || defined (ARMv8MML_DSP) || \
+ defined (ARMv8MML_SP) || defined (ARMv8MML_DSP_SP) || \
+ defined (ARMv8MML_DP) || defined (ARMv8MML_DSP_DP) )
+ #include "ARMCLANG\startup_armv7-m.S"
+ #else
+ #error "No appropriate startup file found!"
+ #endif
+
+#elif defined (__GNUC__)
+ #if (defined (ARMCM0))
+ #include "GCC\startup_armv6-m.S"
+ #elif (defined (ARMCM0P) || defined (ARMCM0P_MPU))
+ #include "GCC\startup_armv6-m.S"
+ #elif (defined (ARMCM3))
+ #include "GCC\startup_armv7-m.S"
+ #elif (defined (ARMCM4) || defined (ARMCM4_FP))
+ #include "GCC\startup_armv7-m.S"
+ #elif (defined (ARMCM7) || defined (ARMCM7_SP) || defined (ARMCM7_DP))
+ #include "GCC\startup_armv7-m.S"
+ #elif (defined (ARMv8MBL))
+ #include "GCC\startup_armv6-m.S"
+ #elif (defined (ARMv8MML) || defined (ARMv8MML_DSP) || \
+ defined (ARMv8MML_SP) || defined (ARMv8MML_DSP_SP) || \
+ defined (ARMv8MML_DP) || defined (ARMv8MML_DSP_DP) )
+ #include "GCC\startup_armv7-m.S"
+ #else
+ #error "No appropriate startup file found!"
+ #endif
+
+#else
+ #error "Compiler not supported!"
+#endif
+
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM0.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM0.c new file mode 100644 index 0000000..b272255 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//**
+ * @file system_ARMCM0.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM0 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ARMCM0.h"
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM23.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM23.c new file mode 100644 index 0000000..791ee34 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM23.c @@ -0,0 +1,82 @@ +/**************************************************************************//**
+ * @file system_ARMCM23.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM23 Device Series
+ * @version V5.00
+ * @date 21. October 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMCM23)
+ #include "ARMCM23.h"
+#elif defined (ARMCM23_TZ)
+ #include "ARMCM23_TZ.h"
+
+ #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ #include "partition_ARMCM23.h"
+ #endif
+#else
+ #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ TZ_SAU_Setup();
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM3.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM3.c new file mode 100644 index 0000000..2544c43 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//**
+ * @file system_ARMCM3.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM3 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ARMCM3.h"
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM33.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM33.c new file mode 100644 index 0000000..287119c --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM33.c @@ -0,0 +1,99 @@ +/**************************************************************************//**
+ * @file system_ARMCM33.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM33 Device Series
+ * @version V5.00
+ * @date 02. November 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMCM33)
+ #include "ARMCM33.h"
+#elif defined (ARMCM33_TZ)
+ #include "ARMCM33_TZ.h"
+
+ #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ #include "partition_ARMCM33.h"
+ #endif
+#elif defined (ARMCM33_DSP_FP)
+ #include "ARMCM33_DSP_FP.h"
+#elif defined (ARMCM33_DSP_FP_TZ)
+ #include "ARMCM33_DSP_FP_TZ.h"
+
+ #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ #include "partition_ARMCM33.h"
+ #endif
+#else
+ #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__FPU_USED) && (__FPU_USED == 1U)
+ SCB->CPACR |= ((3U << 10U*2U) | /* set CP10 Full Access */
+ (3U << 11U*2U) ); /* set CP11 Full Access */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ TZ_SAU_Setup();
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM4.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM4.c new file mode 100644 index 0000000..cea212e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//**
+ * @file system_ARMCM4.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM4 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMCM4)
+ #include "ARMCM4.h"
+#elif defined (ARMCM4_FP)
+ #include "ARMCM4_FP.h"
+#else
+ #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__FPU_USED) && (__FPU_USED == 1U)
+ SCB->CPACR |= ((3U << 10U*2U) | /* set CP10 Full Access */
+ (3U << 11U*2U) ); /* set CP11 Full Access */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM7.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM7.c new file mode 100644 index 0000000..6a99c08 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//**
+ * @file system_ARMCM7.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM7 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMCM7)
+ #include "ARMCM7.h"
+#elif defined (ARMCM7_SP)
+ #include "ARMCM7_SP.h"
+#elif defined (ARMCM7_DP)
+ #include "ARMCM7_DP.h"
+#else
+ #error device not specified!
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__FPU_USED) && (__FPU_USED == 1U)
+ SCB->CPACR |= ((3U << 10U*2U) | /* set CP10 Full Access */
+ (3U << 11U*2U) ); /* set CP11 Full Access */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC000.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC000.c new file mode 100644 index 0000000..7fda345 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC000.c @@ -0,0 +1,56 @@ +/**************************************************************************//**
+ * @file system_ARMSC000.c
+ * @brief CMSIS Device System Source File for
+ * for ARMSC000 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ARMSC000.h"
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC300.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC300.c new file mode 100644 index 0000000..3db4ee7 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMSC300.c @@ -0,0 +1,72 @@ +/**************************************************************************//**
+ * @file system_ARMSC300.c
+ * @brief CMSIS Device System Source File for
+ * ARMSC300 Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ARMSC300.h"
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MBL.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MBL.c new file mode 100644 index 0000000..8310b8f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MBL.c @@ -0,0 +1,76 @@ +/**************************************************************************//**
+ * @file system_ARMv8MBL.c
+ * @brief CMSIS Device System Source File for
+ * ARMv8MBL Device Series
+ * @version V5.00
+ * @date 07. September 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ARMv8MBL.h"
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ #include "partition_ARMv8MBL.h"
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ TZ_SAU_Setup();
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MML.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MML.c new file mode 100644 index 0000000..bd77100 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_ARMv8MML.c @@ -0,0 +1,99 @@ +/**************************************************************************//**
+ * @file system_ARMv8MML.c
+ * @brief CMSIS Device System Source File for
+ * ARMv8MML Device Series
+ * @version V5.00
+ * @date 02. November 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined (ARMv8MML)
+ #include "ARMv8MML.h"
+#elif defined (ARMv8MML_DSP)
+ #include "ARMv8MML_DSP.h"
+#elif defined (ARMv8MML_SP)
+ #include "ARMv8MML_SP.h"
+#elif defined (ARMv8MML_DSP_SP)
+ #include "ARMv8MML_DSP_SP.h"
+#elif defined (ARMv8MML_DP)
+ #include "ARMv8MML_DP.h"
+#elif defined (ARMv8MML_DSP_DP)
+ #include "ARMv8MML_DSP_DP.h"
+#else
+ #error device not specified!
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ #include "partition_ARMv8MML.h"
+#endif
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000UL) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5U * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+#if defined (__FPU_USED) && (__FPU_USED == 1U)
+ SCB->CPACR |= ((3U << 10U*2U) | /* set CP10 Full Access */
+ (3U << 11U*2U) ); /* set CP11 Full Access */
+#endif
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+ SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ TZ_SAU_Setup();
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_generic.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_generic.c new file mode 100644 index 0000000..37d82ab --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/platform/system_generic.c @@ -0,0 +1,27 @@ +
+#if (defined (ARMCM0))
+ #include "system_ARMCM0.c"
+
+#elif (defined (ARMCM0P))
+ #include "system_ARMCM0plus.c"
+
+#elif (defined (ARMCM3))
+ #include "system_ARMCM3.c"
+
+#elif (defined (ARMCM4) || defined (ARMCM4_FP))
+ #include "system_ARMCM4.c"
+
+#elif (defined (ARMCM7) || defined (ARMCM7_SP) || defined (ARMCM7_DP))
+ #include "system_ARMCM7.c"
+
+#elif defined (ARMv8MBL)
+ #include "system_ARMv8MBL.c"
+
+#elif (defined (ARMv8MML) || defined (ARMv8MML_DSP) || \
+ defined (ARMv8MML_SP) || defined (ARMv8MML_DSP_SP) || \
+ defined (ARMv8MML_DP) || defined (ARMv8MML_DSP_DP) )
+ #include "system_ARMv8MML.c"
+
+#else
+ #error "No appropriate system file found!"
+#endif
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c new file mode 100644 index 0000000..1e471f9 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/all_tests.c @@ -0,0 +1,62 @@ +#include "jtest.h"
+#include "basic_math_test_group.h"
+#include "complex_math_test_group.h"
+#include "controller_test_group.h"
+#include "fast_math_test_group.h"
+#include "filtering_test_group.h"
+#include "matrix_test_group.h"
+#include "statistics_test_group.h"
+#include "support_test_group.h"
+#include "transform_test_group.h"
+#include "intrinsics_test_group.h"
+
+JTEST_DEFINE_GROUP(all_tests)
+{
+ /*
+ To skip a test, comment it out
+ */
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_BASICMATH_TESTS)
+ JTEST_GROUP_CALL(basic_math_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_COMPLEXMATH_TESTS)
+ JTEST_GROUP_CALL(complex_math_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_CONTROLLER_TESTS)
+ JTEST_GROUP_CALL(controller_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_FASTMATH_TESTS)
+ JTEST_GROUP_CALL(fast_math_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_FILTERING_TESTS)
+ /* Biquad df2T_f32 will fail with Neon. The test must be updated.
+ Neon implementation is requiring a different initialization.
+ */
+ JTEST_GROUP_CALL(filtering_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_MATRIX_TESTS)
+ JTEST_GROUP_CALL(matrix_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_STATISTICS_TESTS)
+ JTEST_GROUP_CALL(statistics_tests);
+#endif()
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_SUPPORT_TESTS)
+ JTEST_GROUP_CALL(support_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_TRANSFORM_TESTS)
+ JTEST_GROUP_CALL(transform_tests);
+#endif
+
+#if !defined(CUSTOMIZE_TESTS) || defined(ENABLE_INTRINSICS_TESTS)
+ JTEST_GROUP_CALL(intrinsics_tests);
+#endif
+
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/abs_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/abs_tests.c new file mode 100644 index 0000000..6e6bedb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/abs_tests.c @@ -0,0 +1,32 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_ABS_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ abs, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix))
+
+JTEST_ARM_ABS_TEST(f32);
+JTEST_ARM_ABS_TEST(q31);
+JTEST_ARM_ABS_TEST(q15);
+JTEST_ARM_ABS_TEST(q7 );
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(abs_tests)
+{
+ JTEST_TEST_CALL(arm_abs_f32_test);
+ JTEST_TEST_CALL(arm_abs_q31_test);
+ JTEST_TEST_CALL(arm_abs_q15_test);
+ JTEST_TEST_CALL(arm_abs_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/add_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/add_tests.c new file mode 100644 index 0000000..a2d043c --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/add_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_ADD_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ add, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ BASIC_MATH_COMPARE_INTERFACE)
+
+JTEST_ARM_ADD_TEST(f32);
+JTEST_ARM_ADD_TEST(q31);
+JTEST_ARM_ADD_TEST(q15);
+JTEST_ARM_ADD_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(add_tests)
+{
+ JTEST_TEST_CALL(arm_add_f32_test);
+ JTEST_TEST_CALL(arm_add_q31_test);
+ JTEST_TEST_CALL(arm_add_q15_test);
+ JTEST_TEST_CALL(arm_add_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_common_data.c new file mode 100644 index 0000000..86728f9 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_common_data.c @@ -0,0 +1,101 @@ +#include "basic_math_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(BASIC_MATH_BIGGEST_INPUT_TYPE,
+ basic_math_output_fut,
+ BASIC_MATH_MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+ARR_DESC_DEFINE(BASIC_MATH_BIGGEST_INPUT_TYPE,
+ basic_math_output_ref,
+ BASIC_MATH_MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+BASIC_MATH_BIGGEST_INPUT_TYPE
+basic_math_output_f32_ref[BASIC_MATH_MAX_INPUT_ELEMENTS];
+
+BASIC_MATH_BIGGEST_INPUT_TYPE
+basic_math_output_f32_fut[BASIC_MATH_MAX_INPUT_ELEMENTS];
+
+/*--------------------------------------------------------------------------------*/
+/* Block Sizes */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ To change test parameter values add/remove values inside CURLY and update
+ the preceeding parameter to reflect the number of values inside CURLY.
+*/
+
+ARR_DESC_DEFINE(uint32_t,
+ basic_math_block_sizes,
+ 4,
+ CURLY( 2, 7, 15, 32));
+
+/*--------------------------------------------------------------------------------*/
+/* Numbers */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ To change test parameter values add/remove values inside CURLY and update
+ the preceeding parameter to reflect the number of values inside CURLY.
+*/
+
+ARR_DESC_DEFINE(uint32_t,
+ basic_math_elts,
+ 4,
+ CURLY( 0, 1, 0x80000000, 0x7fffffff));
+
+ARR_DESC_DEFINE(int8_t,
+ basic_math_elts2,
+ 5,
+ CURLY( 0, 3, -3, -7, 7));
+
+ARR_DESC_DEFINE(float32_t,
+ basic_math_eltsf,
+ 6,
+ CURLY( 0.0f, 1.0f, 1.254001, -1.665584, -127.435646, 245.34634267));
+
+/*--------------------------------------------------------------------------------*/
+/* Test Data */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(float32_t,
+ basic_math_f_32,
+ 32,
+ CURLY(
+ -0.432565, -1.665584, 0.125332, 0.287676, -1.146471,
+ 1.190915, 1.189164, -0.037633, 0.327292, 0.174639,
+ -0.186709, 0.725791, -0.588317, 2.183186, -0.136396,
+ 0.113931, 1.066768, 0.059281, -0.095648, -0.832349,
+ 0.294411, -1.336182, 0.714325, 1.623562, -0.691776,
+ 0.857997, 1.254001, -1.593730, -1.440964, 0.571148,
+ -0.399886, 0.689997
+ ));
+
+/* Alias the 32 element array with wrappers that end sooner. */
+ARR_DESC_DEFINE_SUBSET(basic_math_f_15,
+ basic_math_f_32,
+ 15);
+
+ARR_DESC_DEFINE_SUBSET(basic_math_f_2,
+ basic_math_f_32,
+ 2);
+
+ARR_DESC_DEFINE(float32_t,
+ basic_math_zeros,
+ 32,
+ CURLY(0));
+
+/* Aggregate all float datasets. */
+ARR_DESC_DEFINE(ARR_DESC_t *,
+ basic_math_f_all,
+ 4,
+ CURLY(
+ &basic_math_zeros,
+ &basic_math_f_2,
+ &basic_math_f_15,
+ &basic_math_f_32
+ ));
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_group.c new file mode 100644 index 0000000..7b219fe --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/basic_math_test_group.c @@ -0,0 +1,17 @@ +#include "jtest.h"
+#include "basic_math_tests.h"
+
+JTEST_DEFINE_GROUP(basic_math_tests)
+{
+ JTEST_GROUP_CALL(abs_tests);
+ JTEST_GROUP_CALL(add_tests);
+ JTEST_GROUP_CALL(dot_prod_tests);
+ JTEST_GROUP_CALL(mult_tests);
+ JTEST_GROUP_CALL(negate_tests);
+ JTEST_GROUP_CALL(offset_tests);
+ JTEST_GROUP_CALL(scale_tests);
+ JTEST_GROUP_CALL(shift_tests);
+ JTEST_GROUP_CALL(sub_tests);
+
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/dot_prod_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/dot_prod_tests.c new file mode 100644 index 0000000..ed758a1 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/dot_prod_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_DOT_PROD_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ dot_prod, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ BASIC_MATH_SNR_ELT1_COMPARE_INTERFACE)
+
+JTEST_ARM_DOT_PROD_TEST(f32);
+JTEST_ARM_DOT_PROD_TEST(q31);
+JTEST_ARM_DOT_PROD_TEST(q15);
+JTEST_ARM_DOT_PROD_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(dot_prod_tests)
+{
+ JTEST_TEST_CALL(arm_dot_prod_f32_test);
+ JTEST_TEST_CALL(arm_dot_prod_q31_test);
+ JTEST_TEST_CALL(arm_dot_prod_q15_test);
+ JTEST_TEST_CALL(arm_dot_prod_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/mult_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/mult_tests.c new file mode 100644 index 0000000..a94bf68 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/mult_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MULT_TEST(suffix, compare_interface) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ mult, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ compare_interface)
+
+JTEST_ARM_MULT_TEST(f32, BASIC_MATH_COMPARE_INTERFACE);
+JTEST_ARM_MULT_TEST(q31, BASIC_MATH_SNR_COMPARE_INTERFACE);
+JTEST_ARM_MULT_TEST(q15, BASIC_MATH_COMPARE_INTERFACE);
+JTEST_ARM_MULT_TEST(q7 , BASIC_MATH_COMPARE_INTERFACE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mult_tests)
+{
+ JTEST_TEST_CALL(arm_mult_f32_test);
+ JTEST_TEST_CALL(arm_mult_q31_test);
+ JTEST_TEST_CALL(arm_mult_q15_test);
+ JTEST_TEST_CALL(arm_mult_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/negate_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/negate_tests.c new file mode 100644 index 0000000..276cdac --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/negate_tests.c @@ -0,0 +1,32 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_NEGATE_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ negate, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix))
+
+JTEST_ARM_NEGATE_TEST(f32);
+JTEST_ARM_NEGATE_TEST(q31);
+JTEST_ARM_NEGATE_TEST(q15);
+JTEST_ARM_NEGATE_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(negate_tests)
+{
+ JTEST_TEST_CALL(arm_negate_f32_test);
+ JTEST_TEST_CALL(arm_negate_q31_test);
+ JTEST_TEST_CALL(arm_negate_q15_test);
+ JTEST_TEST_CALL(arm_negate_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/offset_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/offset_tests.c new file mode 100644 index 0000000..4e10f78 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/offset_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_OFFSET_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_ELT1_BLK( \
+ offset, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix))
+
+JTEST_ARM_OFFSET_TEST(f32);
+JTEST_ARM_OFFSET_TEST(q31);
+JTEST_ARM_OFFSET_TEST(q15);
+JTEST_ARM_OFFSET_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(offset_tests)
+{
+ JTEST_TEST_CALL(arm_offset_f32_test);
+ JTEST_TEST_CALL(arm_offset_q31_test);
+ JTEST_TEST_CALL(arm_offset_q15_test);
+ JTEST_TEST_CALL(arm_offset_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/scale_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/scale_tests.c new file mode 100644 index 0000000..2839a8f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/scale_tests.c @@ -0,0 +1,52 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+
+#define JTEST_ARM_SCALE_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_ELT2_BLK( \
+ scale, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), /*elt1_type*/ \
+ int8_t, /*elt2_type*/ \
+ TYPE_FROM_ABBREV(suffix))
+
+/* float32_t defined separately because it has less arguments */
+JTEST_DEFINE_TEST(arm_scale_f32_test,
+ arm_scale_f32)
+{
+ TEST_TEMPLATE_BUF1_ELT1_BLK(
+ basic_math_f_all,
+ basic_math_eltsf,
+ basic_math_block_sizes,
+ float32_t,
+ float32_t,
+ float32_t,
+ arm_scale_f32,
+ ARM_scale_float_INPUT_INTERFACE,
+ ref_scale_f32,
+ REF_scale_float_INPUT_INTERFACE,
+ BASIC_MATH_COMPARE_INTERFACE);
+}
+
+JTEST_ARM_SCALE_TEST(q31);
+JTEST_ARM_SCALE_TEST(q15);
+JTEST_ARM_SCALE_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(scale_tests)
+{
+ JTEST_TEST_CALL(arm_scale_f32_test);
+ JTEST_TEST_CALL(arm_scale_q31_test);
+ JTEST_TEST_CALL(arm_scale_q15_test);
+ JTEST_TEST_CALL(arm_scale_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/shift_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/shift_tests.c new file mode 100644 index 0000000..ed83b63 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/shift_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_SHIFT_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF1_ELT1_BLK( \
+ shift, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ int8_t, /*elt_type*/ \
+ TYPE_FROM_ABBREV(suffix))
+
+JTEST_ARM_SHIFT_TEST(q31);
+JTEST_ARM_SHIFT_TEST(q15);
+JTEST_ARM_SHIFT_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(shift_tests)
+{
+ JTEST_TEST_CALL(arm_shift_q31_test);
+ JTEST_TEST_CALL(arm_shift_q15_test);
+ JTEST_TEST_CALL(arm_shift_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/sub_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/sub_tests.c new file mode 100644 index 0000000..a486842 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/basic_math_tests/sub_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "basic_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "basic_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_SUB_TEST(suffix) \
+ BASIC_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ sub, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ BASIC_MATH_COMPARE_INTERFACE)
+
+JTEST_ARM_SUB_TEST(f32);
+JTEST_ARM_SUB_TEST(q31);
+JTEST_ARM_SUB_TEST(q15);
+JTEST_ARM_SUB_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(sub_tests)
+{
+ JTEST_TEST_CALL(arm_sub_f32_test);
+ JTEST_TEST_CALL(arm_sub_q31_test);
+ JTEST_TEST_CALL(arm_sub_q15_test);
+ JTEST_TEST_CALL(arm_sub_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_conj_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_conj_tests.c new file mode 100644 index 0000000..7fcc0bc --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_conj_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_CONJ_TEST(suffix) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ cmplx_conj, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ COMPLEX_MATH_SNR_COMPARE_CMPLX_INTERFACE)
+
+JTEST_ARM_CMPLX_CONJ_TEST(f32);
+JTEST_ARM_CMPLX_CONJ_TEST(q31);
+JTEST_ARM_CMPLX_CONJ_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_conj_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_conj_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_conj_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_conj_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_dot_prod_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_dot_prod_tests.c new file mode 100644 index 0000000..bcdaf5b --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_dot_prod_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_DOT_PROD_TEST(suffix, comparison_interface) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ cmplx_dot_prod, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ comparison_interface)
+
+JTEST_ARM_CMPLX_DOT_PROD_TEST(f32, COMPLEX_MATH_SNR_COMPARE_SPLIT_INTERFACE);
+JTEST_ARM_CMPLX_DOT_PROD_TEST(q31, COMPLEX_MATH_SNR_COMPARE_SPLIT_INTERFACE);
+JTEST_ARM_CMPLX_DOT_PROD_TEST(q15, COMPLEX_MATH_SNR_COMPARE_SPLIT_INTERFACE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_dot_prod_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_dot_prod_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_dot_prod_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_dot_prod_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_squared_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_squared_tests.c new file mode 100644 index 0000000..9ca11fc --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_squared_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_MAG_SQUARED_TEST(suffix) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ cmplx_mag_squared, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ COMPLEX_MATH_COMPARE_RE_INTERFACE)
+
+JTEST_ARM_CMPLX_MAG_SQUARED_TEST(f32);
+JTEST_ARM_CMPLX_MAG_SQUARED_TEST(q31);
+JTEST_ARM_CMPLX_MAG_SQUARED_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_mag_squared_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_mag_squared_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_mag_squared_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_mag_squared_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_tests.c new file mode 100644 index 0000000..8711957 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mag_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_MAG_TEST(suffix, comparison_interface) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ cmplx_mag, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ comparison_interface)
+
+JTEST_ARM_CMPLX_MAG_TEST(f32, COMPLEX_MATH_COMPARE_RE_INTERFACE);
+JTEST_ARM_CMPLX_MAG_TEST(q31, COMPLEX_MATH_SNR_COMPARE_RE_INTERFACE);
+JTEST_ARM_CMPLX_MAG_TEST(q15, COMPLEX_MATH_SNR_COMPARE_RE_INTERFACE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_mag_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_mag_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_mag_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_mag_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_cmplx_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_cmplx_tests.c new file mode 100644 index 0000000..22c5a70 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_cmplx_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_MULT_CMPLX_TEST(suffix) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ cmplx_mult_cmplx, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ COMPLEX_MATH_COMPARE_CMPLX_INTERFACE)
+
+JTEST_ARM_CMPLX_MULT_CMPLX_TEST(f32);
+JTEST_ARM_CMPLX_MULT_CMPLX_TEST(q31);
+JTEST_ARM_CMPLX_MULT_CMPLX_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_mult_cmplx_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_mult_cmplx_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_mult_cmplx_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_mult_cmplx_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_real_test.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_real_test.c new file mode 100644 index 0000000..fce7b82 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/cmplx_mult_real_test.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "complex_math_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "complex_math_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_CMPLX_MULT_REAL_TEST(suffix, comparison_interface) \
+ COMPLEX_MATH_DEFINE_TEST_TEMPLATE_BUF2_BLK( \
+ cmplx_mult_real, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ comparison_interface)
+
+JTEST_ARM_CMPLX_MULT_REAL_TEST(f32, COMPLEX_MATH_COMPARE_CMPLX_INTERFACE);
+JTEST_ARM_CMPLX_MULT_REAL_TEST(q31, COMPLEX_MATH_SNR_COMPARE_CMPLX_INTERFACE);
+JTEST_ARM_CMPLX_MULT_REAL_TEST(q15, COMPLEX_MATH_COMPARE_CMPLX_INTERFACE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cmplx_mult_real_tests)
+{
+ JTEST_TEST_CALL(arm_cmplx_mult_real_f32_test);
+ JTEST_TEST_CALL(arm_cmplx_mult_real_q31_test);
+ JTEST_TEST_CALL(arm_cmplx_mult_real_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_common_data.c new file mode 100644 index 0000000..396dc2f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_common_data.c @@ -0,0 +1,114 @@ +#include "complex_math_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(COMPLEX_MATH_BIGGEST_INPUT_TYPE,
+ complex_math_output_fut_a,
+ COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2 /*Complex data has two parts*/,
+ CURLY(0));
+
+ARR_DESC_DEFINE(COMPLEX_MATH_BIGGEST_INPUT_TYPE,
+ complex_math_output_fut_b,
+ COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2 /*Complex data has two parts*/,
+ CURLY(0));
+
+ARR_DESC_DEFINE(COMPLEX_MATH_BIGGEST_INPUT_TYPE,
+ complex_math_output_ref_a,
+ COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2 /*Complex data has two parts*/,
+ CURLY(0));
+
+
+ARR_DESC_DEFINE(COMPLEX_MATH_BIGGEST_INPUT_TYPE,
+ complex_math_output_ref_b,
+ COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2 /*Complex data has two parts*/,
+ CURLY(0));
+
+
+COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_ref_a[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_ref_b[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_fut_a[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+COMPLEX_MATH_BIGGEST_INPUT_TYPE
+complex_math_output_f32_fut_b[COMPLEX_MATH_MAX_INPUT_ELEMENTS * 2];
+
+/*--------------------------------------------------------------------------------*/
+/* Block Sizes */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(uint32_t,
+ complex_math_block_sizes,
+ 4,
+ CURLY(1, 2, 15, 32));
+
+/*--------------------------------------------------------------------------------*/
+/* Test Data */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(float32_t,
+ complex_math_f_32,
+ 32 * 2 /*Complex data has two parts*/,
+ CURLY(
+ -0.432564811528220680 , 0.815622288876143300,
+ -1.665584378238097000 , 0.711908323500893280,
+ 0.125332306474830680 , 1.290249754932477000,
+ 0.287676420358548850 , 0.668600505682040320,
+ -1.146471350681463700 , 1.190838074243369100,
+ 1.190915465642998800 , -1.202457114773944000,
+ 1.189164201652103100 , -0.019789557768770449,
+ -0.037633276593317645 , -0.156717298831980680,
+ 0.327292361408654140 , -1.604085562001158500,
+ 0.174639142820924520 , 0.257304234677489860,
+ -0.186708577681439360 , -1.056472928081482400,
+ 0.725790548293302700 , 1.415141485872338600,
+ -0.588316543014188680 , -0.805090404196879830,
+ 2.183185818197101100 , 0.528743010962224870,
+ -0.136395883086595700 , 0.219320672667622370,
+ 0.113931313520809620 , -0.921901624355539130,
+ 1.066768211359188800 , -2.170674494305262500,
+ 0.059281460523605348 , -0.059187824521191180,
+ -0.095648405483669041 , -1.010633706474247400,
+ -0.832349463650022490 , 0.614463048895480980,
+ 0.294410816392640380 , 0.507740785341985520,
+ -1.336181857937804000 , 1.692429870190521400,
+ 0.714324551818952160 , 0.591282586924175900,
+ 1.623562064446270700 , -0.643595202682526120,
+ -0.691775701702286750 , 0.380337251713910140,
+ 0.857996672828262640 , -1.009115524340785000,
+ 1.254001421602532400 , -0.019510669530289293,
+ -1.593729576447476800 , -0.048220789145312269,
+ -1.440964431901020000 , 0.000043191841625545,
+ 0.571147623658177950 , -0.317859451247687890,
+ -0.399885577715363150 , 1.095003738787492500,
+ 0.689997375464345140 , -1.873990257640960800
+ ));
+
+ARR_DESC_DEFINE_SUBSET(complex_math_f_15,
+ complex_math_f_32,
+ 15 * 2 /*Complex data has two parts*/);
+
+ARR_DESC_DEFINE_SUBSET(complex_math_f_2,
+ complex_math_f_32,
+ 2 * 2 /*Complex data has two parts*/);
+
+ARR_DESC_DEFINE(float32_t,
+ complex_math_zeros,
+ 32 * 2 /*Complex data has two parts*/,
+ CURLY(0));
+
+/* Aggregate all float datasets */
+ARR_DESC_DEFINE(ARR_DESC_t *,
+ complex_math_f_all,
+ 4,
+ CURLY(
+ &complex_math_zeros,
+ &complex_math_f_2,
+ &complex_math_f_15,
+ &complex_math_f_32
+ ));
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_group.c new file mode 100644 index 0000000..38546fb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/complex_math_tests/complex_math_test_group.c @@ -0,0 +1,14 @@ +#include "jtest.h"
+#include "complex_math_tests.h"
+
+JTEST_DEFINE_GROUP(complex_math_tests)
+{
+ JTEST_GROUP_CALL(cmplx_conj_tests);
+ JTEST_GROUP_CALL(cmplx_dot_prod_tests);
+ JTEST_GROUP_CALL(cmplx_mag_tests);
+ JTEST_GROUP_CALL(cmplx_mag_squared_tests);
+ JTEST_GROUP_CALL(cmplx_mult_cmplx_tests);
+ JTEST_GROUP_CALL(cmplx_mult_real_tests);
+
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_common_data.c new file mode 100644 index 0000000..661a487 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_common_data.c @@ -0,0 +1,499 @@ +#include "controller_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+float32_t controller_output_fut[CONTROLLER_MAX_LEN] = {0};
+float32_t controller_output_ref[CONTROLLER_MAX_LEN] = {0};
+float32_t controller_output_f32_fut[CONTROLLER_MAX_LEN] = {0};
+float32_t controller_output_f32_ref[CONTROLLER_MAX_LEN] = {0};
+
+const q31_t controller_q31_inputs[CONTROLLER_MAX_LEN] =
+{
+ 0xC14A5524, 0xCCABDA17, 0xAD6F5B56, 0xFDAFCE3B, 0xA9B226EB, 0x41F6F6A,
+ 0xA5CE38BF, 0x3A978AFA, 0xBA44B82A, 0x855C0F8, 0x3D060524, 0x93D5E570,
+ 0x97D7791D, 0xFFE0C38C, 0x26749841, 0xC0A6EE54, 0x218EC386, 0x39FF3726,
+ 0x8DC1F7CA, 0x702F2CF5, 0xC1142FF1, 0xEC1476AB, 0x15F640DD, 0xE62CCE49,
+ 0x3805DE7E, 0xF70871FE, 0xCF8BD360, 0x8D19A8A0, 0xD764F821, 0xA58558CF,
+ 0x8C0CE04D, 0x50A46C19, 0x66D2370D, 0x50FA359A, 0xB646AE24, 0x6CE00F5C,
+ 0xE6D48948, 0xB55BD831, 0x3B72950A, 0x9EB69530, 0x73394127, 0x773FA6F4,
+ 0x9805A980, 0x838DE587, 0x9CF597F4, 0xA2AD1691, 0xFA81A473, 0x7CDC7D7F,
+ 0x4A5190D0, 0xED895BB9, 0x8FD60F35, 0x1A21D530, 0xA0EB6DDA, 0xBDE6A516,
+ 0x2501A3E1, 0x5ED893C8, 0xE1E175B1, 0xACBBB2F3, 0xED350907, 0xDB140D7E,
+ 0xEEAE272D, 0xBE229841, 0xC18BFB88, 0xA6BB9B80, 0xBCF090E4, 0x24DB166C,
+ 0xF9AB7E42, 0x62DF28D1, 0xC7004665, 0xE3F56FC6, 0x419E0C75, 0x46BE9F38,
+ 0x2432B9B2, 0x758D83E0, 0xDCE12926, 0x3F57CB74, 0x1F4458E2, 0xF1DD639,
+ 0x83A1FB49, 0x173AFC76, 0x86EF7531, 0x48D32F34, 0x7D3E3063, 0x8F2FB549,
+ 0x5C314C9, 0x18CBEB6D, 0xA6F8B697, 0x447B9E9C, 0x2E32BA33, 0xD074D715,
+ 0x81ACD746, 0xE55A4E04, 0x4891860F, 0x1DA3EB4F, 0xE0E6A27F, 0x20BFDEB4,
+ 0xD0B3A25B, 0x40C10544, 0xC15656C, 0x15405EAE, 0x9858E3E1, 0xA36A9C4E,
+ 0x88BD21F9, 0xAACF7A68, 0x773665E5, 0xCEDFDF66, 0x617A9610, 0x524FC968,
+ 0xC2D086CD, 0x5F008079, 0x24DCA447, 0x6A4F5599, 0xB706CD4A, 0x1DE70608,
+ 0xA33A2EE5, 0x137E488E, 0x98061B7B, 0x4079D69D, 0xA4A897D5, 0xC4CEC8F5,
+ 0xD75F7883, 0x22406802, 0xF1AD70BB, 0x9D4ADD79, 0xBCBC7CE4, 0xB358C0D8,
+ 0x85792E47, 0xA7ADAC05, 0x3D19EEAB, 0x331AC0AF, 0x33035831, 0x13D93987,
+ 0xFC542094, 0x845F317E, 0xDDC4BF8B, 0x1379E50C, 0x5C20193F, 0xFDD58298,
+ 0x9D482B82, 0x4A6BE062, 0xDC8A757B, 0x272917C1, 0x90E1EFBC, 0x355AD882,
+ 0xE6F8EA35, 0x604555A1, 0x7DFFFBB, 0xF58AE216, 0x9A11B463, 0xD3541BAD,
+ 0xA1576756, 0x483BED8D, 0x1F05AFCC, 0xCEA63DFB, 0x55B84677, 0xFB2E04F2,
+ 0x787AF96C, 0x84A12CD3, 0x460A9BD, 0x9DB22DD8, 0x1A8C7F28, 0x861E452E,
+ 0x932D3F78, 0x7652D852, 0x73357BBA, 0xEBBB0A58, 0x62536AFA, 0x3F6B65EF,
+ 0x6DC57B58, 0x9EB798CE, 0xE6B0A740, 0xDFF68B47, 0x3247FB8F, 0xFFF3D302,
+ 0xA9FD3E40, 0x475A43D1, 0x6FF9528A, 0x2018A09D, 0x47E0F9C9, 0x4CF5F6D3,
+ 0x2807CE34, 0xDD6FD8ED, 0x234045D1, 0x51CEB5F9, 0x25297896, 0x6443A0FE,
+ 0x8F4449A9, 0xD4C3E1C6, 0xF01D52F1, 0x4E09C820, 0xF18F0810, 0xE1548689,
+ 0xF9DE5A1F, 0x5286DC23, 0x48AC3A4B, 0xEA0C1BE0, 0xA1B785DB, 0x7086465D,
+ 0x1CC10929, 0x1E1D716E, 0xED231D4C, 0x2049D108, 0xB8FF9971, 0x949CF8D4,
+ 0x441F1E8B, 0xC3D95372, 0x69C324B4, 0xA10BFDC9, 0xC781DE78, 0x82476137,
+ 0xE163DDF, 0x390DEEC2, 0xAF68CE5B, 0x8E680ABD, 0x8223A615, 0x92593380,
+ 0x7B1465FE, 0x865AE957, 0x930F53EB, 0xED772EF7, 0x10E916B6, 0xE3BCFA68,
+ 0x2ACB80BB, 0xE51C5590, 0x994714B5, 0xF30984EE, 0x59BBE1B4, 0xB4867DBC,
+ 0xB91C706C, 0xBC16C218, 0xA8931CD0, 0x129A66AB, 0x13171F4D, 0x62882872,
+ 0x4B167FD4, 0xE6902F4C, 0xFA794932, 0xD4B152C, 0xB0856EA9, 0x39466D55,
+ 0x3669E451, 0x8F5B9E8C, 0x877A3C6A, 0x51B956B4, 0x367EAD2A, 0x9D2C662A,
+ 0x78FB6880, 0x4E6D40B6, 0x4070EFDC, 0x4DF9679C, 0x20306EDB, 0xE381AAE7,
+ 0xA55DA748, 0x9B8B617B, 0x3E036FAD, 0x84E4C4A7, 0xD5A3F517, 0x669BA988,
+ 0x98FDDE8C, 0x67BD85CE, 0x34BBB46C, 0x76994800, 0x85B9D8B6, 0x6DFA2FEF,
+ 0x205DB5C, 0x9F843C4C, 0x72721B52, 0x73EF6B86, 0x5FB98B61, 0xC323DDAC,
+ 0x31D424B4, 0xF68C0D7E, 0x162FAF9D, 0x7B2A7A99, 0xF9392693, 0xC42D12C0,
+ 0x8692A73E, 0xD9A1EE80, 0xDD956856, 0x44E7BDAC, 0x8D874532, 0x5F5C9DD0,
+ 0x5D167858, 0x8559FEA2, 0x9D821476, 0xD9654ED2, 0x594C0DC7, 0x1A87B506,
+ 0x3F693200, 0x7A651AB5, 0xA0CCBC8A, 0x9F9E662C, 0x78EF631, 0x2A09DA0,
+ 0xB088C72F, 0x92EE0D42, 0x360DCD5F, 0xF333FE48, 0x8D63CC06, 0x233A8ACB,
+ 0x706651ED, 0x7AA5C079, 0x262239D1, 0x3EBBEBB6, 0xA25A4F3D, 0x32581A06,
+ 0x6E6FD780, 0x5773F7C7, 0x75ED1DDC, 0x90DF2D15, 0xBC79A9BC, 0xB7175917,
+ 0x354E381C, 0x762AADD7, 0xF643DAC1, 0xF3BBF49E, 0xD2FECE7E, 0x6C8140F4,
+ 0xD7694875, 0x92D30822, 0xC742A7CF, 0xB792ED98, 0x121CFE24, 0xA04E1EE7,
+ 0x58CE268, 0x215A080, 0x316CB323, 0xFAB14A31, 0xE1C13C03, 0xFD8EF4F1,
+ 0xF3F446D0, 0x6C6CEA0A, 0xBBFDF9FB, 0x67242969, 0xBE55A4EB, 0x8FF5534,
+ 0x52F0DF1C, 0x9710ADE3, 0xD40F4A21, 0x7984E8E7, 0x419545EB, 0x993F7880,
+ 0xAB246B20, 0x408AABC4, 0xCBF6EA49, 0xC0894C55, 0x4CAA6398, 0xA47856E9,
+ 0xAF2AE47D, 0x22F55D33, 0xF0D37915, 0xD0634C72, 0xD983671, 0x2BCC5AF8,
+ 0x9A77D48, 0xC11B5CFA, 0xF107CD7E, 0x3A6B3593, 0xE1425F05, 0x6271812A,
+ 0x5B838310, 0xBD8418CA, 0x10A58792, 0x239F7137, 0xA13D5071, 0x7F9930D4,
+ 0xA462664F, 0x54180F8E, 0x291585BA, 0xE586B87A, 0x144B2C12, 0x98E425C7,
+ 0xBAA4B373, 0x18F0D03C, 0x99462AC0, 0xD8B4D2EF, 0x72473895, 0xA6BF5435,
+ 0xEDAD53B, 0xE0912FA6, 0x5C33F331, 0x3D93CD7, 0x4D03D752, 0x20699929,
+ 0xB89962F9, 0x36E781E9, 0xF58B642C, 0x5FCA69E3, 0x5960A7F4, 0xAD5AAFD0,
+ 0xDF18324A, 0x3DB1E5AA, 0x76BA3876, 0x1BC29AF6, 0xBCC18841, 0x73A60174,
+ 0x625BFF58, 0x67C57724, 0x4458E53C, 0xE157B095, 0x2B370837, 0x83DF6CE3,
+ 0xDD08EEFA, 0x3F52A7C2, 0x191B4785, 0x60843D82, 0xB0DE11F1, 0x105EA26C,
+ 0x6E1C7AA2, 0x47AADD14, 0xB6676D03, 0x3B8D4DF6, 0x737A694, 0x409521DC,
+ 0x744206A, 0xC722023F, 0x2BE4EAD5, 0x63E11D76, 0xCA4A09AB, 0x5CF2D2B9,
+ 0x31586916, 0xCDFD7D84, 0xB203F634, 0xAD7329D4, 0xC524582F, 0x2E53E6C1,
+ 0xBB0E019B, 0xB8538C6A, 0x6A2542D, 0x8A6A00E5, 0x119725CC, 0x5406D347,
+ 0x1B6FFAF1, 0xECCF71F1, 0x981117F2, 0x7167CA76, 0x74F4B880, 0x77A55F47,
+ 0x59EADB62, 0x4A331D95, 0xBCBBA76F, 0xA45C4D50, 0xC718D5, 0x87CE05D1,
+ 0x60D47AD5, 0xA5CA9C40, 0xB0061766, 0xE69B39DF, 0xBD5F1320, 0x9930EAD3,
+ 0xA8B38325, 0x8DD090F, 0x6A6EEF37, 0x2DF16F66, 0xAB514C7E, 0x31109C58,
+ 0xFD48C7FC, 0x515341CA, 0x77AB8EA6, 0x41328DAF, 0xBAF8D31E, 0xA4B31611,
+ 0xED37F331, 0x7A832A22, 0xA22591C7, 0x722D1F89, 0x3B19CF18, 0x261B8A4D,
+ 0xC3F6F6DB, 0xCF8CED61, 0x990FA250, 0xA02E72A9, 0x560DCEA2, 0xB08E67B4,
+ 0x3674E663, 0x97CC3852, 0xA7EB2EAC, 0xFFDE0AA8, 0xA64719A, 0x23269EDD,
+ 0x3C0B339E, 0x86284D40, 0x48D82ECB, 0xA4D4CCF8, 0x43631B91, 0x4BF0C248,
+ 0xB6497B9B, 0x6827BC58, 0xE30B7AF9, 0xA0CCBF26, 0x6C3B7B71, 0xD744B3ED,
+ 0xFA25D2F6, 0x4CDE642D, 0xD65B8142, 0xA6F9207F, 0xE7A207BE, 0xDB506684,
+ 0x44DA4780, 0x9175EA0C, 0x156104AF, 0x4155E1B0, 0x6E3A6886, 0x9DBA1EA2,
+ 0x5423D9C8, 0xCC024E22, 0x758F852A, 0x1DD6395, 0x2D19CBAD, 0xE164F5A1,
+ 0xC2084602, 0x89C274AD, 0x13CB5562, 0xD7FE2D5B, 0xE07A4EE5, 0x1672BA91,
+ 0x4F624CCF, 0x2E5EA4A3, 0x28FEEFAF, 0xBDDA6EF4, 0x32AFD40C, 0x99A5FB3B,
+ 0xDD1D73A3, 0xA342CB3E, 0xA78445F5, 0x53979C3B, 0x427D7943, 0x5221B58C,
+ 0xA6CE9A5E, 0xFB50ECA4, 0xBB86E36E, 0x60839F6D, 0xC5E1C2F3, 0xA1B7FB04,
+ 0xFBB65E0C, 0x78B80F5E, 0xFD8D972B, 0x3BF3BA90, 0x2D572D9, 0x2B5BC920,
+ 0xB6A0DE01, 0xD274D306, 0xC7C6C855, 0x9CAA669B, 0xB04AA641, 0x4D6B1760,
+ 0x3E17ED79, 0xD23241B0, 0xA4A6F957, 0xCBDE76AF, 0x4E5F9493, 0x4C215DA5,
+ 0x33A052B, 0x1A4D80C2, 0x40AEEBCA, 0x390D106B, 0xE9E8E018, 0x5AF3D6CF,
+ 0xE35E1D4, 0xC4FB1C6, 0x14B6299B, 0x8D2E25F0, 0xCCBF932A, 0xC5AC18B6,
+ 0x2227567D, 0x86B5CE2F, 0x26344534, 0x22C515EC, 0x2442B70D, 0xEC3721C6,
+ 0x34EF687D, 0x9C06323A, 0xEAF3EA60, 0x60396F52, 0xEAE78AA1, 0xC9D06CBC,
+ 0x6F95F6C8, 0x584CC258, 0xBA9A27BB, 0x66DF8D47, 0x9D4804EA, 0x57DD9E67,
+ 0xF89C7895, 0xF5336111, 0x25C122C8, 0x62742114, 0xCFBF6D26, 0xBF9F6482,
+ 0xE6F02CD9, 0x11083202, 0xC99E2618, 0x7EBC9351, 0x440112F1, 0xC9DFFBC1,
+ 0x3BF4DC25, 0xB1BA7FA0, 0x61AF9AED, 0x6B1F7D29, 0xAD865294, 0xE3E01129,
+ 0x7E9E77A5, 0x100435D7, 0x9FE3A71, 0x88597C81, 0x722849FA, 0x31C5A0AF,
+ 0xFBA178DC, 0x7F102D31, 0x5CA07864, 0x950E6F98, 0x82C34882, 0x5D041F11,
+ 0x8C613C57, 0xD398CFD1, 0x426F38AD, 0x5599AB1D, 0xFAFA078D, 0xAB25B413,
+ 0xD94B32CF, 0xB288FE38, 0x2893BB46, 0x9A0B4168, 0xA91BCA94, 0x653A5E8D,
+ 0x2174EBBE, 0xDEFE6415, 0x30DA429C, 0xD0C5E40C, 0xB4719AA4, 0xD29CE7A6,
+ 0x905957CD, 0xCD287499, 0x83CA0AA7, 0xA8385832, 0x25A0CA02, 0xC20D47A4,
+ 0xB562F556, 0x4BC19E4C, 0xD9E215C7, 0x27E838B4, 0xC58612F4, 0xA2827F6F,
+ 0xC49DCDBA, 0x679B7362, 0x4E495845, 0xCFD2F0D1, 0x395E76A0, 0x375A655E,
+ 0x92E2058F, 0x73F9F0CA, 0x61EFF3B3, 0x51FFD362, 0xE7410345, 0x7FDA8B3B,
+ 0xA219E2E8, 0x17ABE543, 0x26557412, 0x4B30084D, 0xA68E191D, 0xFE0D93DF,
+ 0x73EF127D, 0x4DECDDB1, 0x77FAF45F, 0xD6002898, 0x92DD0A40, 0x157F6DDF,
+ 0xC2A55F8E, 0x4359F924, 0xFB630C3F, 0x338B6B58, 0xB2945F75, 0x4FA23A0E,
+ 0x836EB8C0, 0xB3B18FD, 0x86114337, 0x24668ACB, 0x99BB82F0, 0x924C8A47,
+ 0xBA959701, 0x81155ABF, 0x8C612D71, 0x36074CA7, 0xD1668C41, 0xE35F58C7,
+ 0x7FC2802D, 0x8E6A7CF3, 0x65B07D07, 0x815F6A6B, 0x791BF0DD, 0x6E47D719,
+ 0xC24394C7, 0xE84A6EB, 0xF194AFEE, 0x464A2F52, 0x677579FD, 0xEBA775AE,
+ 0x1F6EEFF, 0x9A795237, 0x78D9D45F, 0x9D0B344D, 0xBBD34AB7, 0x2F85B12A,
+ 0x16C5C2AD, 0x3990985D, 0x88DF3351, 0x82811AA5, 0x6D351F41, 0x4066A69D,
+ 0x86B660BF, 0x6EDB4768, 0xDDD78CF0, 0xB5D74F6E, 0xE89E220C, 0x91439687,
+ 0x947CC9C9, 0x3857E2BD, 0x302F8AE4, 0x1DABE7F8, 0x4832D6C9, 0x37D58FCB,
+ 0x4EA8A711, 0xCD7BAC98, 0x19DBF8BC, 0xD8DE8DC2, 0xEAFF7E7B, 0xB7629C93,
+ 0x792C6E19, 0xF7009192, 0xFF88439D, 0x2E196A66, 0xEC71B78C, 0xEAF4BB3A,
+ 0x7C16225E, 0x668F337, 0xCBEE1608, 0x6D5B5552, 0x345DC590, 0x681209CC,
+ 0x7B24A819, 0xD08A1416, 0x99888FE3, 0x9FC7288A, 0x24BD8502, 0xEA1D9678,
+ 0x20EECA0, 0x59BEA057, 0x5ADE91EB, 0xDEA8E49D, 0xFA200E6F, 0x9149C81D,
+ 0xF2281E93, 0x8A5B0451, 0x67312D58, 0xE3B849F1, 0xD2217960, 0x7CDF59F3,
+ 0x33C775C0, 0x9EBA8799, 0x7DF9506, 0xB4E96110, 0xB8FCF3E3, 0xDEA059B2,
+ 0x8229B6EA, 0x316486F6, 0x43919185, 0x6C0D90F3, 0x1C6F3DF8, 0x38DB92A9,
+ 0x5CD41244, 0x2C9F0A7B, 0xDF4A315F, 0xF7CE9C66, 0x4C800860, 0x318D53E0,
+ 0xF105C20D, 0xD753E1F2, 0x750810BA, 0xA17ECCA5, 0x2010140, 0x4D884763,
+ 0xC2BB0DA7, 0xB2D5BA74, 0x141CECD4, 0x887FDFC3, 0xC64B53, 0x2D2A85F6,
+ 0x15532B45, 0x5D5CBCE1, 0xBEB9A16A, 0xA214611B, 0x9FC5AC5F, 0x11AE5DD7,
+ 0xA0B9A5A9, 0xFC648AF4, 0x740009AC, 0xED0E0321, 0xB8E6A61, 0x8910C544,
+ 0xC74F26C8, 0x9525CCF3, 0xB41AEB59, 0xE61984CE, 0x598B2197, 0xA412E59D,
+ 0xE1976DD4, 0xB29BBE16, 0x88FD9FB0, 0xB04006F3, 0xB45E309, 0xD5CC15F1,
+ 0xD9DAF630, 0xDC809335, 0x803ED52, 0xB537F5A5, 0xA994F6EB, 0xF5288568,
+ 0xF66FD264, 0x2EA2B3A6, 0x647619F3, 0xFFB38C7A, 0x1BC03B9, 0xB6BC3061,
+ 0xBF30596E, 0xBE2AD27B, 0x8AC04220, 0x641979A3, 0x9ECCBB89, 0xA144FBC1,
+ 0x4E8FAE26, 0x8C5A9D90, 0x299ED467, 0xD7C9C7E3, 0x1D4865ED, 0x76F31C3D,
+ 0xCEE81CDF, 0xB479195E, 0x6FFB3AE1, 0xDC8A398, 0x300F7364, 0xC7940AFA,
+ 0x3B85BE3E, 0xD98CC40D, 0xA24A3D89, 0x3A674204, 0x22888A38, 0x2E77F2D,
+ 0xA2841C9C, 0xCF0689C3, 0x9FE98922, 0x89335017, 0x2D6B69A7, 0xFEDB63F9,
+ 0x899AF4EF, 0x9F9F9B40, 0xA4BE97E8, 0xA51DAF7A, 0x16AC50D3, 0xA8D7ED6,
+ 0xED193443, 0x7615EF1B, 0xB0DF6A4E, 0x64FFE794, 0xE3DB2C9A, 0x7435B022,
+ 0x556E825C, 0x23802AF9, 0xC25098A4, 0xE75A18BB, 0x70B2A7B9, 0x7FB81BF,
+ 0x63EF910, 0x6C669591, 0x6574DD2B, 0xCF6E379D, 0xD2B3AFAC, 0x1E6A1101,
+ 0x1DE22385, 0x2338191F, 0xC69704B6, 0xCBABC599, 0x54EB4809, 0x7839BE6D,
+ 0xD50017DD, 0x39B1A0E1, 0x288D52D3, 0x2D52668C, 0x20D22A68, 0x4E1207D1,
+ 0x3FCC0EFE, 0x47F3FE64, 0x25177A90, 0xB4BFDD4D, 0xDA8DBDCE, 0x6F7275A8,
+ 0x6BEAA655, 0xAA1810FC, 0xE4DB593A, 0x8A4D4BC0, 0x2C402E93, 0xF1C0F7F9,
+ 0x6F0CC577, 0x70412414, 0x752F9DC1, 0xD82E38EA, 0xAC455F7B, 0x4DCD4EDB,
+ 0x92BC2696, 0xFB03F135, 0x4FCA1F8C, 0xBD5E75F6, 0x502F41B0, 0x3616D3F1,
+ 0x2E5B8E31, 0x2026EB19, 0x57E783D7, 0x467BBE00, 0x4703ABA3, 0x1F776B9C,
+ 0xE2570A84, 0xFEC7DB48, 0x1BD5012, 0xFD0A2D5D, 0x7FCC29F2, 0x291304B6,
+ 0x99D5D8ED, 0xC7551C8, 0xFD12F38F, 0xBADE8892, 0xDF749997, 0xA5DAE2F,
+ 0x2B9FA269, 0x5C13CFED, 0x15E9A399, 0x54437F4E, 0xA72DB2AB, 0x56186AA1,
+ 0xFE4DB55C, 0xA34D7836, 0x2A879760, 0xC63FA94, 0xAC18B207, 0x5FC78B3,
+ 0x7F10621E, 0xA769E6B2, 0xEC9F4A11, 0xCE3F982C, 0x62BA2EF5, 0xA5F239CD,
+ 0x73D63FED, 0xE36E9F5E, 0x8AC1DA0E, 0x3F3DB3EB, 0x738326EA, 0x35C366B1,
+ 0xCD476E86, 0x82F6B208, 0xF11A9FC1, 0x426AC396, 0x7E4D1B93, 0x75E4EDB7,
+ 0xAF3C44A7, 0x51A5EF5C, 0xFAD2463D, 0x8A5639CA, 0xC995AC78, 0xCC4BE4F6,
+ 0x3AFE7F8D, 0x66993D04, 0x4386FF37, 0xCBC1C6C2, 0x55A8F5EC, 0xE81A9A75,
+ 0x30A67E1B, 0x4A4A7D0C, 0x20F7F993, 0x1891805, 0x738976AD, 0xD426E7D6,
+ 0x3C5CEEBF, 0x4499187F, 0xABF17C97, 0x447C317F, 0x68D8419C, 0x7AAB6456,
+ 0x421BCF29, 0xF6740F9C, 0x8916BB8D, 0x3D72AAB, 0x9AD54DD7, 0x7549C6EE,
+ 0x7317342B, 0xA18546D4, 0x1056BDA7, 0x54BBCCCE, 0x8CE63E46, 0x5D146234,
+ 0x33BE6C63, 0xB250C4E5, 0x89D72335, 0x87C36BA, 0xB65530CC, 0x2DFAC48C,
+ 0x1663D16F, 0x59B80AA, 0x950274EA, 0x92532D4A, 0x3CEF802D, 0x492FBDA5,
+ 0xA63A2574, 0xEF8005C2, 0x94A18651, 0xAF627ABA, 0x6829B238, 0xA698F646,
+ 0xD2598516, 0x10144D36, 0xD9B1D1B9, 0xAB2ACF05, 0x5395B699, 0xA7851C75,
+ 0x1806C6F3, 0xAE970306, 0x3284B145, 0x98F4FE8F
+};
+
+/* The source data is random across the q31_t range. Accessing it by word should
+ remain random. */
+const q15_t * controller_q15_inputs = (q15_t *) controller_q31_inputs;
+
+const float32_t controller_f32_inputs[CONTROLLER_MAX_LEN] =
+{
+ 43.0264275639 , -17.0525215570 , -94.8488973910 , -8.1924989580 ,
+ 7.2830326091 , 66.8368719314 , 33.9778190671 , 117.8652289772 ,
+ -129.6077797465, -14.6420815368 , 18.0239223278 , 20.6760530292 ,
+ 55.0375037651 , 1.8674609862 , -85.6534302408 , -33.5750364909 ,
+ 29.2110949614 , 110.4727049460 , -94.1914619387 , -1.4084169343 ,
+ 83.5181653041 , 47.3073514127 , -13.3420621181 , 30.3389699104 ,
+ 12.1188124277 , 100.9730921941 , -114.0146362390, -77.5823200409 ,
+ 37.2019034618 , 40.0026301128 , -58.3387276630 , -34.9472398600 ,
+ -5.1169678311 , -87.7660091118 , -150.5888601131, 56.0349370503 ,
+ 50.2168884079 , -74.2313236767 , 22.3648603560 , -6.8676387051 ,
+ 74.8957303680 , -90.1292012823 , -55.1436241586 , -66.6732976100 ,
+ -6.7918147615 , 7.7612697081 , 35.7892605979 , -20.0470508830 ,
+ 41.8369017546 , -143.7378056984, -41.9127158600 , -108.3531841158,
+ -57.1917422289 , -124.2808828105, 38.9316388820 , -77.9212517405 ,
+ 37.1990818377 , -28.9545952748 , -155.6371057564, 45.8088886393 ,
+ 36.2537018275 , -6.5727656016 , -104.2070491921, 45.5583813729 ,
+ -19.7674717059 , -80.4802190947 , -1.4444563441 , -42.2142256438 ,
+ 36.6546339194 , -57.0866498590 , 44.4677067511 , 65.7285753407 ,
+ -103.8158864647, 25.4348723711 , -153.5419639389, 39.3608409474 ,
+ 49.1658103436 , 79.5570602275 , 75.2944095996 , 58.9394700746 ,
+ -53.1018534392 , 33.4172444014 , 35.6224682287 , -64.4353396418 ,
+ -125.8464291251, -47.6072111617 , -26.2177687594 , -12.0061322096 ,
+ -17.7887967585 , -28.2926175090 , -62.0691715749 , 40.5098573604 ,
+ -191.1123732593, 119.6750713043 , 19.6182375803 , -26.7615252921 ,
+ 2.2957847015 , -108.3436451287, -50.5906164995 , -5.6360985100 ,
+ -11.6772204201 , -84.2765293757 , -60.9317810068 , 82.0446350218 ,
+ -70.2048296348 , 72.8738253222 , 60.2450218115 , 114.2741231228 ,
+ 46.8180775285 , 6.9915412654 , -8.9909197429 , -78.9165936808 ,
+ 66.4731535459 , -68.4235455651 , -79.8254597080 , -10.6308477115 ,
+ -62.6161569330 , -55.7744410292 , -11.8408366528 , 98.1034940997 ,
+ 35.8213741877 , -54.4694482732 , 86.9631830044 , -53.0343838122 ,
+ -47.4898642865 , -47.2010929590 , -31.3312639685 , -23.0908245172 ,
+ 12.0258009869 , -5.1098204703 , -9.8420230737 , -107.3328761158,
+ 44.6810431959 , -17.9083820345 , -60.9753512872 , -7.5915088994 ,
+ 17.2250813329 , 57.9176125648 , 124.3004161362 , -63.1950908493 ,
+ 120.5788885640 , -44.1734238117 , -91.7408095116 , -43.5696066595 ,
+ -49.9560710099 , -167.8513443296, -70.9437505499 , -46.4109705355 ,
+ -64.2264526456 , -13.9995803916 , -100.9548186356, 9.9101010575 ,
+ -50.0615130815 , -55.7590145012 , -60.3195153388 , 61.7913378549 ,
+ -102.0850899209, 53.2360193126 , -25.8997883369 , 75.1445512333 ,
+ -113.8148602310, 17.8027281119 , -19.5006822722 , -44.2169628471 ,
+ 107.5017084384 , -113.7909124666, -43.9735396033 , 7.6880981388 ,
+ 46.7384653508 , 9.9047443751 , 81.8646964362 , 132.3812863877 ,
+ -95.6959050236 , -68.5015813484 , 65.8586404494 , 18.5039353889 ,
+ -30.1786166621 , -90.3098515667 , -22.9356228552 , -20.5778272423 ,
+ -2.2127786675 , -35.4418447703 , -51.8722915974 , -107.9024439078,
+ -51.5940748232 , -51.7463262677 , 74.2795485984 , 94.2205022462 ,
+ 9.7016384049 , -47.3556083155 , -36.7822314478 , -151.6455525363,
+ -15.7183814485 , 78.2063383182 , 0.1516414969 , 37.9304181609 ,
+ 20.6185902740 , -22.2164106778 , 6.1160554677 , 2.4061326953 ,
+ -111.6681824598, -60.0858917090 , 75.1698614693 , -76.5787410444 ,
+ 28.3391655715 , -2.4946186443 , -68.0378899682 , 104.0893199171 ,
+ -51.8319647254 , 38.8521710524 , 75.9114239564 , 73.9206172905 ,
+ -103.2533029987, 6.9002718274 , -36.6346436319 , -25.1990926265 ,
+ 1.5852145953 , -50.6438436795 , 21.5018844428 , -151.9305562846,
+ -51.7326681814 , 21.4475994143 , 42.2564011921 , -74.0520586926 ,
+ 49.7370635809 , -13.2957534126 , 36.6746826778 , -31.7005492589 ,
+ 148.4894964268 , 79.7890632353 , 16.8856024809 , 16.1690460177 ,
+ 39.2665169484 , 117.2461167794 , -37.4827984831 , -47.8387803604 ,
+ -95.7025286193 , 34.3058214285 , -124.9536456028, 56.1640195764 ,
+ 94.3636873606 , 35.3992852810 , -38.3920852159 , -100.5738062016,
+ -29.7837022314 , 42.9133913996 , -34.2715618187 , -14.3589115627 ,
+ -16.5935468750 , 20.4574192236 , -88.7897972666 , -38.6285080386 ,
+ 53.3203422726 , 98.5991486746 , 122.7305462474 , 67.7902817187 ,
+ 5.1764117389 , 5.0632821624 , 21.9288789574 , -78.3140512638 ,
+ -21.2069682335 , 23.6342010925 , 34.4445769455 , 59.1346766615 ,
+ 28.9978778000 , 39.8121180845 , -17.1650033520 , -56.9174900874 ,
+ 17.8157086148 , -112.8801457350, -122.4019040408, 140.8669393157 ,
+ -65.4664329639 , 40.6952775518 , 32.7260891658 , -43.2565155866 ,
+ 19.3945751928 , -20.1815002000 , -67.6601711640 , -18.1921178207 ,
+ -35.6802153684 , 49.9550290306 , 131.4925251016 , -31.2940938167 ,
+ -5.2848453344 , -109.5580577933, 20.2437599390 , -8.8782958734 ,
+ 54.1836717264 , 7.2555852190 , -3.5698316137 , -51.9236786262 ,
+ 6.7861547980 , -104.4814551670, 45.8458629668 , 70.0890876844 ,
+ 38.3572837740 , 61.8024165129 , 68.0176962024 , -12.8193934080 ,
+ -21.4661610917 , -0.9377108815 , -74.2100679061 , 71.0490808147 ,
+ 91.9813889497 , -14.5797640164 , 3.5036749129 , -138.3605478356,
+ -48.1501349794 , -16.0636922482 , -12.1334197606 , 15.0562207637 ,
+ -34.0878176054 , 55.1075126157 , 97.3829871877 , 0.2053358099 ,
+ -94.8713267382 , 51.5460954054 , 21.2966946363 , 58.1331025047 ,
+ -23.4599044132 , -19.3315856528 , -8.4497193577 , -1.9594679356 ,
+ -33.1906549336 , -144.6825417978, -57.1218958072 , 35.7353406097 ,
+ 61.4666549819 , 14.6536253128 , 82.1632196866 , -44.6230161723 ,
+ -91.1022589278 , -18.5737673927 , -136.8975612334, 56.9606788003 ,
+ 70.7059960183 , -68.2829345081 , -10.2629800455 , -53.6385325047 ,
+ -68.7928766204 , 88.2444688302 , 83.1412324801 , -102.9206928160,
+ -68.2329763159 , -69.7552955469 , 108.2132269009 , -28.2582329307 ,
+ 5.6685898328 , -36.0392956840 , 43.3269513128 , -8.6436416796 ,
+ -16.5054886972 , 11.5008791788 , 39.6923606683 , -28.9039554061 ,
+ 13.5938214364 , -23.6296332202 , 49.1171161163 , 53.1636857935 ,
+ -62.9672053166 , -54.2594757384 , 48.3838956696 , 8.0469071555 ,
+ -33.6472086213 , -120.5381752144, 55.0880453111 , 17.8990740563 ,
+ 144.9402232336 , 101.7886229203 , -73.3666393712 , -16.4721379138 ,
+ -12.7447935685 , 101.8245160983 , -49.7026860415 , -15.1227790364 ,
+ 65.7430288442 , -131.8695390036, 10.2750933946 , 90.9752774838 ,
+ -26.5859990591 , -95.6962772568 , 76.2174589344 , 24.8796848060 ,
+ -38.8938223046 , 54.1687774852 , -37.3585968996 , -34.6848570502 ,
+ 33.0151011570 , -55.8345877671 , -3.9009101671 , -31.5024971691 ,
+ -9.6863895491 , 91.8719195957 , -58.9993249744 , -25.6887030614 ,
+ -8.0829472205 , 4.6386491741 , -71.4019697167 , -21.3734669095 ,
+ 86.2079144404 , 79.6823974266 , -0.0910915997 , 44.8067718095 ,
+ 58.7204020766 , 72.6856808976 , -50.3373732478 , -116.1175365534,
+ -15.0884909384 , 5.4593772059 , -63.6553527905 , 37.3460388205 ,
+ -32.2399421679 , 95.7569350513 , -7.3700141964 , -56.0370832967 ,
+ -41.7377150439 , -42.0042856519 , 12.5134312941 , 93.7845584531 ,
+ -32.4801087157 , -33.3976050318 , -24.2252126001 , -46.3199064467 ,
+ -20.3704610276 , 15.8571376404 , 88.9127217235 , -33.1132582267 ,
+ -1.0005675836 , -28.1780471904 , 150.9349379135 , 38.0600520828 ,
+ 36.4338677563 , -3.3709201641 , 29.7709773016 , 16.5064119077 ,
+ 21.3147729463 , 110.6714300904 , 18.8406036507 , 14.8963298097 ,
+ 50.9975960392 , 16.3991140350 , -194.0805845907, -41.6723945839 ,
+ -74.8991127408 , -6.4587655805 , -0.6883628218 , -49.8709647175 ,
+ 194.2265120473 , 64.3043624521 , 16.0040882780 , 68.4032551772 ,
+ -43.4050313128 , 84.6826289824 , -28.1357565943 , 134.6895584120 ,
+ -7.9746152680 , -95.6692886462 , -48.9444370342 , 79.4479343188 ,
+ -50.5345228122 , 52.4800633307 , -14.7735051703 , -20.1510237050 ,
+ 22.5049816980 , 64.4191999102 , 24.8385648232 , 99.4265041360 ,
+ 62.0189508473 , -28.3892600378 , -109.8842008564, -79.0407483407 ,
+ 18.3408112020 , 49.1650536089 , 31.5419844924 , -36.1160722679 ,
+ -132.9148081329, 10.4053531567 , -129.2463715470, -43.4602207151 ,
+ -24.2420653292 , 91.5388317556 , 21.4762248190 , -44.3810909139 ,
+ 18.4098011282 , -45.8691164539 , -20.9831197962 , 16.2076792914 ,
+ 66.0224147666 , -13.6794615513 , 101.2163279622 , -62.4462618603 ,
+ 22.2040981785 , -52.3208382802 , -24.7909079016 , 58.5150375093 ,
+ 18.8569705105 , -55.6083430939 , 131.0273367422 , -34.5209015065 ,
+ 121.4357296573 , -77.2590299593 , -51.5929566898 , 5.0247131098 ,
+ -23.8451707592 , -4.5912313547 , 31.1387246821 , 61.7019310824 ,
+ 49.1912429744 , -50.5836913031 , -74.8182600630 , -21.6209317022 ,
+ 20.9409464654 , -72.7870824583 , -28.3530746820 , -45.0794425434 ,
+ -13.4910629905 , -62.0158772255 , -34.1421181246 , 44.2844972784 ,
+ 8.4213193211 , 79.9349022793 , 60.0160502260 , 32.2272994080 ,
+ -72.2893887746 , 17.3063698247 , -134.6335742431, 64.6499736261 ,
+ 7.1411921919 , -37.5517577873 , 6.2405670930 , 117.1920927305 ,
+ 128.7420689815 , -3.1556854963 , -13.4100422909 , -11.9336372907 ,
+ -8.6022400553 , -102.0033506666, -78.4696575074 , 15.0765861403 ,
+ -111.5219718576, -13.4162786508 , 38.2437013694 , 61.1637732561 ,
+ -34.4804160003 , 107.4438003830 , -79.4193067813 , -81.1842853968 ,
+ -26.2622970331 , 132.3205425408 , -119.1464268477, 67.3048866598 ,
+ 103.3266736715 , -58.1865815617 , 27.6231908601 , -11.2004371750 ,
+ 26.0340617206 , 12.5696123916 , 0.6442714420 , -30.7393043544 ,
+ 1.5314955897 , 49.9110088250 , -106.1358721920, 51.1608329944 ,
+ -32.8684239794 , -27.7215905745 , -11.6450303367 , -36.7731678028 ,
+ 59.9383486599 , -4.6301990580 , 5.0361682939 , -10.5669407980 ,
+ 124.0908762205 , 35.8305364082 , -123.6216777114, -74.2569079167 ,
+ -56.7651776816 , 16.0736385582 , 23.5030632215 , -110.6764295938,
+ 44.3086821806 , 9.4452708243 , 5.3300080251 , 39.0483916714 ,
+ 151.4550562868 , 62.8957092621 , -116.8103461233, 5.1129927759 ,
+ -33.2252515135 , -9.4522506046 , 22.7026048372 , -15.5264414569 ,
+ 71.2087620034 , 19.1191568332 , 50.3019546809 , -5.6096922409 ,
+ 22.9344126462 , -7.7591876203 , 31.8949515564 , -58.4253952381 ,
+ 66.4341297173 , -19.0583083044 , 96.7695087855 , 20.4934280047 ,
+ 4.9544603116 , -20.8288135920 , -173.2659655408, -62.4883621640 ,
+ -48.5528422703 , 12.1437504278 , 60.2482234666 , -19.6072312919 ,
+ -34.6320214291 , 129.0089698963 , -50.9042160618 , 98.3952661477 ,
+ -4.7051792479 , -13.1768910826 , 69.5138802139 , 58.5748201565 ,
+ -45.9385652563 , 151.7952104306 , 34.2541941013 , -58.0417838381 ,
+ 28.1480473670 , 46.4006562684 , 97.7001828545 , 4.0855607626 ,
+ -32.6097018162 , 16.8913949959 , 105.7266202978 , -89.3978374651 ,
+ -60.9338593128 , -41.2220734230 , 49.9393070783 , 95.0974764854 ,
+ 49.2498366456 , 58.6214364590 , 34.1113830569 , 45.6634098874 ,
+ -22.5356086770 , -97.1978653617 , 86.5565049535 , 70.6118545777 ,
+ -30.6978082909 , 118.7238621666 , 14.5922386932 , 11.3449652072 ,
+ 65.6007783405 , 82.6369678204 , -52.0390492248 , -47.0160551227 ,
+ -95.5142448634 , 99.7162626888 , -36.5523815090 , -42.8042935534 ,
+ 68.3566199798 , -13.8451547552 , -71.1629911780 , 36.2989433752 ,
+ -32.4867163365 , 112.4079947071 , -75.6295117422 , 47.5276421639 ,
+ 51.8078250755 , -26.8715188457 , -9.6291144797 , 40.1999849640 ,
+ -38.4634033246 , 40.9764960915 , -26.1715730268 , 36.5996396515 ,
+ -26.9924731886 , 53.7879986570 , -83.1658398348 , 23.6381378489 ,
+ 43.8794937753 , -55.4133836419 , 90.0266130838 , 14.1036181982 ,
+ -18.1225736715 , 85.1363181151 , -62.5970846379 , -18.5291947838 ,
+ -25.7341986703 , -49.7061342931 , -59.0442763971 , 50.8960636803 ,
+ -87.6471123430 , -36.7217762531 , 22.5952364054 , 11.1107885650 ,
+ -0.5377327229 , 160.8145792630 , 73.3103441505 , 10.1656872354 ,
+ -50.4554350397 , -57.3478171016 , -15.4201715357 , -26.9135446491 ,
+ -4.9891264771 , -37.0226770057 , -80.9919535641 , 50.4418660876 ,
+ -25.8517575250 , -69.9538258421 , -17.5730160671 , 15.9405836751 ,
+ 113.9545230349 , -46.1040379057 , -94.2458635014 , -69.0338522452 ,
+ 43.5813790265 , 107.1836101171 , -55.1012654323 , -77.1529555887 ,
+ -33.1530320656 , -94.5582659641 , -53.6837586872 , 27.0680381378 ,
+ 93.9385415207 , -61.0955216188 , 18.0530957225 , 7.9150142320 ,
+ -12.1218191587 , 34.0173961457 , 40.0084937565 , 9.8119275580 ,
+ 44.2065861274 , -1.8718514394 , 67.4740024215 , 46.7391150131 ,
+ 207.2404815875 , 45.1635364462 , 43.3580102761 , -44.0244218674 ,
+ 83.2387206007 , -8.6441851856 , 12.3993902588 , -22.5091685270 ,
+ -19.8332981376 , 97.9196509289 , -76.6720306234 , 28.9740705859 ,
+ 121.9415248016 , 9.6656982611 , -51.0996453694 , 37.3704374740 ,
+ 74.7589840907 , -113.4066752631, 120.0029566342 , -105.3786221360,
+ 81.8152755619 , -13.4979932982 , -21.4680758393 , -85.1088235539 ,
+ -65.3610798409 , -35.0444139470 , -48.0220794487 , -41.6210317362 ,
+ 33.1212995259 , -82.1480936443 , -10.5479715135 , 76.4601917004 ,
+ 42.1983651157 , 92.6104239912 , -42.3536237955 , -24.5644182272 ,
+ 30.4446637772 , -90.2899420489 , 63.6723540422 , 103.0895811428 ,
+ 64.1706769263 , -10.7069812309 , 21.8927240409 , 6.3571071738 ,
+ 57.1457649358 , -52.9866276448 , 66.0981829072 , -29.5372056881 ,
+ -79.2252039810 , -136.2440652798, -57.0106422562 , 86.8203548141 ,
+ 66.4244149837 , 53.3230426111 , -66.1283059222 , -131.0402660353,
+ 8.0548411081 , 122.9088988100 , 1.2626894208 , -60.5059112373 ,
+ -68.8707203082 , -6.4747987200 , 85.8411327244 , 99.9624156733 ,
+ 90.4197864338 , -35.9630441182 , -22.9158275507 , -17.3660128776 ,
+ 16.7845345761 , 34.7219749782 , -39.3513765878 , 1.0460702756 ,
+ -60.9494500182 , 20.0900333387 , -85.9636743832 , 88.4400782168 ,
+ 15.0729628728 , 61.5499846243 , 11.8579871757 , 107.8617581581 ,
+ -42.9393027864 , -62.8422307621 , -19.0589600542 , 4.0750325807 ,
+ -36.0651825425 , 55.7638724501 , -10.4691736080 , -55.5672537178 ,
+ -61.2061519915 , -21.1885348576 , -131.2535612498, 24.7463552676 ,
+ 22.9426321237 , 14.3038202264 , -138.0926317438, -59.0892900856 ,
+ -162.5416439986, 7.1307658250 , -141.1236672256, -4.7173618068 ,
+ -16.7741532807 , -68.2615451173 , -2.6608701102 , 84.1978109826 ,
+ -11.3446202072 , 59.9630033088 , -1.8994925010 , -37.9301641959 ,
+ -119.4435600954, -11.4587491646 , 12.2423215240 , -7.3169898616 ,
+ -67.0373621128 , 36.0198843055 , 53.9791315249 , -134.5885680695,
+ -83.8330811965 , -16.6714816463 , -8.8498552035 , -24.0513088196 ,
+ -22.9444328877 , -37.7961441531 , 25.1975736186 , -136.1611637464,
+ -5.0843464033 , -10.3939554694 , 20.7422826935 , 75.6854136623 ,
+ 46.4179626736 , -57.0052830175 , 7.3457235521 , -51.5504447254 ,
+ -158.4375751701, -200.2426967181, -48.1234996261 , 1.6623945527 ,
+ 21.1746524375 , 99.4092980367 , -2.3206772903 , 45.7989166757 ,
+ 2.0181548348 , -88.0556010969 , -59.1527212096 , 47.3607925077 ,
+ -10.4181140309 , 56.3558125650 , -8.9799125560 , -30.0376711812 ,
+ -36.7132904688 , 35.7785050392 , -13.0763909369 , -2.1855594714 ,
+ 18.1550954005 , -28.6711803575 , -55.4495172398 , -2.8812973198 ,
+ -59.9575059158 , 40.0588875786 , 57.4713686602 , -3.2835144853 ,
+ -36.7193552111 , -64.9415131516 , -166.9555466445, -23.5556853844 ,
+ -54.9408569587 , -35.2310451959 , 21.3345143458 , 65.7590671151 ,
+ 51.2214538168 , 46.1271939944 , -42.2235267919 , 127.2329928299 ,
+ 105.2391778600 , 17.6726845966 , -129.9021148044, 8.7065613044 ,
+ -94.0987112511 , -3.5375742950 , -23.1385452379 , 60.6219530633 ,
+ 92.5445564235 , 48.5111974469 , -52.5699309159 , -60.0634811685 ,
+ 25.9034368684 , 140.0249495491 , 1.5918852392 , 38.0266038291 ,
+ 17.5588710703 , 3.4294066089 , -27.6748782173 , 59.6182974489 ,
+ -35.2924781853 , -38.6198576115 , -13.6119803198 , 7.8375587489 ,
+ 22.7250686519 , -28.3524510951 , -34.4269062817 , 22.6464817325 ,
+ -61.6528147860 , -5.9782002429 , 61.4730771294 , 43.5582379527 ,
+ 55.6862408270 , 87.8745651631 , 46.3401042715 , -19.8780979663 ,
+ 74.1272633369 , 29.8590452377 , -12.8665765140 , 34.2931401219 ,
+ 53.9279617551 , -16.9017895140 , -70.1527553166 , -79.6367897992 ,
+ 109.3728271017 , -129.2214826835, -53.4644539730 , -51.5654458993 ,
+ 17.6062148433 , 3.5090251835 , 74.2615941204 , -109.3431097845,
+ 40.1403465151 , 28.8714561280 , 94.0868659302 , -19.0047033845 ,
+ -60.0967410050 , -19.0998457619 , -67.2027075128 , 72.0711434846 ,
+ -17.8737851232 , 123.7050551274 , 132.6331504104 , 25.5018761009 ,
+ -36.7817189239 , -29.1580893235 , -6.5848563828 , 90.2868948516 ,
+ -35.7017258498 , -68.5675432955 , -52.4888589786 , 47.1377730021 ,
+ -7.4546621940 , -52.0657517138 , -49.0404829633 , -114.6910280126,
+ -117.6819819437, -32.7856729408 , 31.8232065591 , 12.1192973039 ,
+ 35.2678513420 , -1.0336778293 , 30.7021249679 , 127.0442906046 ,
+ -84.8457819393 , 28.9862843096 , -47.3524701726 , -126.1094998460,
+ -2.9700276582 , -2.4956545870 , -53.8624121141 , -85.2114117637 ,
+ 76.9057985618 , 137.1205201755 , -19.0830817212 , 14.3407526579 ,
+ -56.5921994449 , -25.6084873186 , -44.9470801106 , -133.3139496090,
+ 0.3487447576 , 33.4499716730 , 34.7126257844 , -9.3307383323 ,
+ 27.2996276947 , 10.8765676134 , -91.1032360444 , -90.9584216222 ,
+ 1.6981490570 , 96.8557438791 , 56.7726390913 , -44.3246449237 ,
+ 52.3260643361 , 21.5551140465 , 27.4535327381 , 2.0072717479 ,
+ 7.4823125629 , 77.1185863870 , 16.1372262663 , -10.7206012957
+};
+
+const float32_t controller_f32_coeffs[CONTROLLER_MAX_COEFFS_LEN] =
+{
+ /* S->Kp, S->Ki, S->Kd; */
+ 0.0000000000 , -1.0336778293 , 56.7726390913 ,
+ 0.3487447576 , 0.0000000000 , 27.4535327381 ,
+ -29.1580893235, 1.6981490570 , 0.0000000000 ,
+ 0.0000000000 , 0.0000000000 , -2.4956545870 ,
+ 0.0000000000 , 8.7065613044 , 0.0000000000 ,
+ 0.0000000000 , 0.0000000000 , 0.0000000000 ,
+ 18.1550954005 , -5.9782002429 , 2.0072717479 ,
+ 33.1212995259 , -82.1480936443, -10.5479715135,
+ -23.6296332202, 49.1171161163 , 53.1636857935 ,
+ 7.2830326091 , 66.8368719314 , 33.9778190671 ,
+ 9.4452708243 , 5.3300080251 , 39.0483916714 ,
+ 6.9915412654 , -8.9909197429 , -78.9165936808
+};
+
+const q31_t controller_q31_coeffs[CONTROLLER_MAX_COEFFS_LEN] =
+{
+ 0x00000000, 0xFEF760E4, 0x38C5CBAD,
+ 0x00594756, 0x00000000, 0x1B741AB9,
+ 0xE2D78775, 0x01B2B9E6, 0x00000000,
+ 0x00000000, 0x00000000, 0xFD811CC8,
+ 0x00000000, 0x08B4E134, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000,
+ 0x1227B455, 0xFA0594AB, 0x0201DC90,
+ 0x211F0D7C, 0xADDA1689, 0xF573B824,
+ 0xE85ED05B, 0x311DFB52, 0x3529E750,
+ 0x074874D3, 0x42D63D3D, 0x21FA525A,
+ 0x0971FD45, 0x05547B68, 0x270C6366,
+ 0x06FDD5A6, 0xF7025315, 0xB1155A1E
+};
+
+
+const q15_t controller_q15_coeffs[CONTROLLER_MAX_COEFFS_LEN] =
+{
+ 0x0000, 0xFEF7, 0x38C6,
+ 0x0059, 0x0000, 0x1B74,
+ 0xE2D8, 0x01B3, 0x0000,
+ 0x0000, 0x0000, 0xFD81,
+ 0x0000, 0x08B5, 0x0000,
+ 0x0000, 0x0000, 0x0000,
+ 0x1228, 0xFA06, 0x0202,
+ 0x211F, 0xADDA, 0xF574,
+ 0xE85F, 0x311E, 0x352A,
+ 0x0748, 0x42D6, 0x21FA,
+ 0x0972, 0x0554, 0x270C,
+ 0x06FE, 0xF702, 0xB115
+};
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_group.c new file mode 100644 index 0000000..0f9709e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/controller_test_group.c @@ -0,0 +1,13 @@ +#include "jtest.h"
+#include "controller_tests.h"
+
+JTEST_DEFINE_GROUP(controller_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_GROUP_CALL(pid_reset_tests);
+ JTEST_GROUP_CALL(pid_tests);
+ JTEST_GROUP_CALL(sin_cos_tests);
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_reset_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_reset_tests.c new file mode 100644 index 0000000..a930dbb --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_reset_tests.c @@ -0,0 +1,52 @@ +#include "jtest.h"
+#include "arr_desc.h"
+#include "arm_math.h"
+#include "type_abbrev.h"
+#include "test_templates.h"
+
+/* Bucket of zeros. For comparison with the output of arm_pid_reset_xxx. */
+ARR_DESC_DEFINE(float32_t, zeroes, 3, CURLY(0));
+
+/**
+ * Define a JTEST_TEST_t for the function arm_pid_reset_xxx function having
+ * suffix.
+ */
+#define ARM_PID_RESET_TEST(suffix) \
+ JTEST_DEFINE_TEST(arm_pid_reset_##suffix##_test, \
+ arm_pid_reset_##suffix) \
+ { \
+ /* Initialise the pid_instance */ \
+ arm_pid_instance_##suffix pid_inst = { 0 }; \
+ pid_inst.state[0] = (TYPE_FROM_ABBREV(suffix)) 0xffffffff; \
+ pid_inst.state[1] = (TYPE_FROM_ABBREV(suffix)) 0xffffffff; \
+ pid_inst.state[2] = (TYPE_FROM_ABBREV(suffix)) 0xffffffff; \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES(arm_pid_reset_##suffix(&pid_inst)); \
+ \
+ /* Test correctness */ \
+ TEST_ASSERT_BUFFERS_EQUAL( \
+ pid_inst.state, \
+ zeroes.data_ptr, \
+ 3 * sizeof(TYPE_FROM_ABBREV(suffix))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+ARM_PID_RESET_TEST(f32);
+ARM_PID_RESET_TEST(q31);
+ARM_PID_RESET_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(pid_reset_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_pid_reset_f32_test);
+ JTEST_TEST_CALL(arm_pid_reset_q31_test);
+ JTEST_TEST_CALL(arm_pid_reset_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_tests.c new file mode 100644 index 0000000..2e1c56e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/pid_tests.c @@ -0,0 +1,79 @@ +#include "jtest.h"
+#include "arr_desc.h"
+#include "arm_math.h"
+#include "ref.h"
+#include "type_abbrev.h"
+#include "test_templates.h"
+#include "controller_test_data.h"
+#include "controller_templates.h"
+
+/**
+ * Define a JTEST_TEST_t for the function arm_pid_xxx function having
+ * suffix.
+ */
+#define ARM_PID_TEST(suffix,type) \
+ JTEST_DEFINE_TEST(arm_pid_##suffix##_test, arm_pid_##suffix) \
+ { \
+ uint32_t i,j; \
+ \
+ arm_pid_instance_##suffix fut_pid_inst = { 0 }; \
+ arm_pid_instance_##suffix ref_pid_inst = { 0 }; \
+ \
+ for(i=0;i<CONTROLLER_MAX_COEFFS_LEN/3;i++) \
+ { \
+ fut_pid_inst.Kp = controller_##suffix##_coeffs[i*3+0]; \
+ fut_pid_inst.Ki = controller_##suffix##_coeffs[i*3+1]; \
+ fut_pid_inst.Kd = controller_##suffix##_coeffs[i*3+2]; \
+ ref_pid_inst.Kp = controller_##suffix##_coeffs[i*3+0]; \
+ ref_pid_inst.Ki = controller_##suffix##_coeffs[i*3+1]; \
+ ref_pid_inst.Kd = controller_##suffix##_coeffs[i*3+2]; \
+ \
+ arm_pid_init_##suffix(&fut_pid_inst, 1); \
+ arm_pid_init_##suffix(&ref_pid_inst, 1); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n", \
+ (int)CONTROLLER_MAX_LEN); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ for(j=0;j<CONTROLLER_MAX_LEN;j++) \
+ { \
+ *((type*)controller_output_fut + j) = \
+ arm_pid_##suffix(&fut_pid_inst, \
+ controller_##suffix##_inputs[j]); \
+ }); \
+ \
+ for(j=0;j<CONTROLLER_MAX_LEN;j++) \
+ { \
+ *((type*)controller_output_ref + j) = \
+ ref_pid_##suffix(&ref_pid_inst, \
+ controller_##suffix##_inputs[j]); \
+ } \
+ \
+ /* Test correctness */ \
+ CONTROLLER_SNR_COMPARE_INTERFACE( \
+ CONTROLLER_MAX_LEN, \
+ type); \
+ } \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+ARM_PID_TEST(f32,float32_t);
+ARM_PID_TEST(q31,q31_t);
+ARM_PID_TEST(q15,q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(pid_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_pid_f32_test);
+ JTEST_TEST_CALL(arm_pid_q31_test);
+ JTEST_TEST_CALL(arm_pid_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/sin_cos_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/sin_cos_tests.c new file mode 100644 index 0000000..e3887ac --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/controller_tests/sin_cos_tests.c @@ -0,0 +1,151 @@ +#include "jtest.h"
+#include "arr_desc.h"
+#include "arm_math.h"
+#include "ref.h"
+#include "type_abbrev.h"
+#include "test_templates.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input Data */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(float32_t,
+ arm_sin_cos_degrees_f32,
+ 9,
+ CURLY(
+ 0,
+ 17,
+ 45,
+ 90,
+ 180,
+ 360,
+ 362,
+ -73,
+ -191.111
+ ));
+
+/* The Q31 version of the function maps numbers in the range [-1, 0.9999999]
+ * to degrees in the range [-180, 179]*/
+ARR_DESC_DEFINE(q31_t,
+ arm_sin_cos_degrees_q31,
+ 6,
+ CURLY(
+ 0,
+ 0x80000000, /* -1 */
+ 0x7fffffff, /* 0.99999 */
+ /* Randoms */
+ 0xf7badafa,
+ 0x285954a1,
+ 0xb9d09511
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* Output Variables */
+/*--------------------------------------------------------------------------------*/
+float32_t sin_val_fut = 0;
+float32_t cos_val_fut = 0;
+float32_t sin_val_ref = 0;
+float32_t cos_val_ref = 0;
+
+/*--------------------------------------------------------------------------------*/
+/* Test Definitions */
+/*--------------------------------------------------------------------------------*/
+
+#define MAX_DELTA_f32 50.0e-8f
+#define ABS(x) ((x) > 0 ? (x) : -(x))
+
+/*
+ Function to test correctness of sin_cos output by comparing it with reference library
+*/
+#define COMPARISON_INTERFACE(type, threshold) \
+ if ( (ABS((type) sin_val_ref - (type) sin_val_fut) > \
+ (type) threshold ) || \
+ (ABS((type) cos_val_ref - (type) cos_val_fut) > \
+ (type) threshold)) \
+ { \
+ JTEST_DUMP_STRF("Error: %f %f\n", \
+ ABS((type) sin_val_ref - (type) sin_val_fut), \
+ ABS((type) cos_val_ref - (type) cos_val_fut)); \
+ return JTEST_TEST_FAILED; \
+ }
+
+/*
+ Sine and cosine test function for float32_t input
+*/
+JTEST_DEFINE_TEST(arm_sin_cos_f32_test, arm_sin_cos_f32)
+{
+ /* Test function for all input degree values */
+ TEMPLATE_DO_ARR_DESC(
+ degree_idx, TYPE_FROM_ABBREV(f32),
+ degree, arm_sin_cos_degrees_f32
+ ,
+ /* Display cycle count and run test */
+ JTEST_COUNT_CYCLES(
+ arm_sin_cos_f32(
+ degree,
+ (TYPE_FROM_ABBREV(f32) *) &sin_val_fut,
+ (TYPE_FROM_ABBREV(f32) *) &cos_val_fut)
+ );
+ ref_sin_cos_f32(
+ degree,
+ (TYPE_FROM_ABBREV(f32) *) &sin_val_ref,
+ (TYPE_FROM_ABBREV(f32) *) &cos_val_ref);
+
+ /* Test correctness */
+ COMPARISON_INTERFACE(
+ TYPE_FROM_ABBREV(f32),
+ MAX_DELTA_f32));
+
+ return JTEST_TEST_PASSED;
+}
+
+
+/*
+ Sine and cosine test function for q31_t input
+*/
+JTEST_DEFINE_TEST(arm_sin_cos_q31_test,
+ arm_sin_cos_q31)
+{
+ /* Test function for all input degree values */
+ TEMPLATE_DO_ARR_DESC(
+ degree_idx, TYPE_FROM_ABBREV(q31),
+ degree, arm_sin_cos_degrees_q31
+ ,
+ /* Display cycle count and run test */
+ JTEST_COUNT_CYCLES(
+ arm_sin_cos_q31(
+ degree,
+ (TYPE_FROM_ABBREV(q31) *) &sin_val_fut,
+ (TYPE_FROM_ABBREV(q31) *) &cos_val_fut)
+ );
+ ref_sin_cos_q31(
+ degree,
+ (TYPE_FROM_ABBREV(q31) *) &sin_val_ref,
+ (TYPE_FROM_ABBREV(q31) *) &cos_val_ref);
+
+ /* Convert q31 numbers to float for comparison purposes. */
+ ref_q31_t_to_float((TYPE_FROM_ABBREV(q31) *) &sin_val_fut, &sin_val_fut, 1);
+ ref_q31_t_to_float((TYPE_FROM_ABBREV(q31) *) &cos_val_fut, &cos_val_fut, 1);
+ ref_q31_t_to_float((TYPE_FROM_ABBREV(q31) *) &sin_val_ref, &sin_val_ref, 1);
+ ref_q31_t_to_float((TYPE_FROM_ABBREV(q31) *) &cos_val_ref, &cos_val_ref, 1);
+
+ /* Test correctness */
+ COMPARISON_INTERFACE(
+ TYPE_FROM_ABBREV(f32),
+ MAX_DELTA_f32));
+
+ return JTEST_TEST_PASSED;
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(sin_cos_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_sin_cos_f32_test);
+ JTEST_TEST_CALL(arm_sin_cos_q31_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests.c new file mode 100644 index 0000000..50ec433 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests.c @@ -0,0 +1,38 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "fast_math_templates.h"
+#include "fast_math_test_data.h"
+#include "type_abbrev.h"
+
+SQRT_TEST_TEMPLATE_ELT1(q31);
+SQRT_TEST_TEMPLATE_ELT1(q15);
+
+SIN_COS_TEST_TEMPLATE_ELT1(f32, float32_t, sin);
+SIN_COS_TEST_TEMPLATE_ELT1(q31, q31_t, sin);
+SIN_COS_TEST_TEMPLATE_ELT1(q15, q15_t, sin);
+
+SIN_COS_TEST_TEMPLATE_ELT1(f32, float32_t, cos);
+SIN_COS_TEST_TEMPLATE_ELT1(q31, q31_t, cos);
+SIN_COS_TEST_TEMPLATE_ELT1(q15, q15_t, cos);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(fast_math_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_sqrt_q31_test);
+ JTEST_TEST_CALL(arm_sqrt_q15_test);
+
+ JTEST_TEST_CALL(arm_sin_f32_test);
+ JTEST_TEST_CALL(arm_sin_q31_test);
+ JTEST_TEST_CALL(arm_sin_q15_test);
+
+ JTEST_TEST_CALL(arm_cos_f32_test);
+ JTEST_TEST_CALL(arm_cos_q31_test);
+ JTEST_TEST_CALL(arm_cos_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests_common_data.c new file mode 100644 index 0000000..1b2d99e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/fast_math_tests/fast_math_tests_common_data.c @@ -0,0 +1,370 @@ +#include "fast_math_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+float32_t fast_math_output_fut[FAST_MATH_MAX_LEN] = {0};
+float32_t fast_math_output_ref[FAST_MATH_MAX_LEN] = {0};
+float32_t fast_math_output_f32_fut[FAST_MATH_MAX_LEN] = {0};
+float32_t fast_math_output_f32_ref[FAST_MATH_MAX_LEN] = {0};
+
+const q31_t fast_math_q31_inputs[FAST_MATH_MAX_LEN] =
+{
+ 0x414A5524, 0x4CAB5A17, 0x2D6F5B56, 0x7DAF4E3B, 0x29B226EB, 0x41F6F6A ,
+ 0x25CE38BF, 0x3A970AFA, 0x3A44382A, 0x05540F8 , 0x3D060524, 0x13D56570,
+ 0x17D7791D, 0x7FE0438C, 0x26741841, 0x40A66E54, 0x218E4386, 0x39FF3726,
+ 0x0DC177CA, 0x702F2CF5, 0x41142FF1, 0x6C1476AB, 0x15F640DD, 0x662C4E49,
+ 0x38055E7E, 0x770871FE, 0x4F8B5360, 0x0D1928A0, 0x57647821, 0x258558CF,
+ 0x0C0C604D, 0x50A46C19, 0x66D2370D, 0x50FA359A, 0x36462E24, 0x6CE00F5C,
+ 0x66D40948, 0x355B5831, 0x3B72150A, 0x1EB61530, 0x73394127, 0x773F26F4,
+ 0x18052980, 0x038D6587, 0x1CF517F4, 0x22AD1691, 0x7A812473, 0x7CDC7D7F,
+ 0x4A5110D0, 0x6D895BB9, 0x0FD60F35, 0x1A215530, 0x20EB6DDA, 0x3DE62516,
+ 0x250123E1, 0x5ED813C8, 0x61E175B1, 0x2CBB32F3, 0x6D350907, 0x5B140D7E,
+ 0x6EAE272D, 0x3E221841, 0x418B7B88, 0x26BB1B80, 0x3CF010E4, 0x24DB166C,
+ 0x79AB7E42, 0x62DF28D1, 0x47004665, 0x63F56FC6, 0x419E0C75, 0x46BE1F38,
+ 0x243239B2, 0x758D03E0, 0x5CE12926, 0x3F574B74, 0x1F4458E2, 0x71D5639 ,
+ 0x03A17B49, 0x173A7C76, 0x06EF7531, 0x48D32F34, 0x7D3E3063, 0x0F2F3549,
+ 0x5C314C9 , 0x18CB6B6D, 0x26F83697, 0x447B1E9C, 0x2E323A33, 0x50745715,
+ 0x01AC5746, 0x655A4E04, 0x4891060F, 0x1DA36B4F, 0x60E6227F, 0x20BF5EB4,
+ 0x50B3225B, 0x40C10544, 0x415656C , 0x15405EAE, 0x185863E1, 0x236A1C4E,
+ 0x08BD21F9, 0x2ACF7A68, 0x773665E5, 0x4EDF5F66, 0x617A1610, 0x524F4968,
+ 0x42D006CD, 0x5F000079, 0x24DC2447, 0x6A4F5599, 0x37064D4A, 0x1DE70608,
+ 0x233A2EE5, 0x137E488E, 0x18061B7B, 0x4079569D, 0x24A817D5, 0x44CE48F5,
+ 0x575F7883, 0x22406802, 0x71AD70BB, 0x1D4A5D79, 0x3CBC7CE4, 0x335840D8,
+ 0x05792E47, 0x27AD2C05, 0x3D196EAB, 0x331A40AF, 0x33035831, 0x13D93987,
+ 0x7C542094, 0x045F317E, 0x5DC43F8B, 0x1379650C, 0x5C20193F, 0x7DD50298,
+ 0x1D482B82, 0x4A6B6062, 0x5C8A757B, 0x272917C1, 0x10E16FBC, 0x355A5882,
+ 0x66F86A35, 0x604555A1, 0x7DF7FBB , 0x758A6216, 0x1A113463, 0x53541BAD,
+ 0x21576756, 0x483B6D8D, 0x1F052FCC, 0x4EA63DFB, 0x55B84677, 0x7B2E04F2,
+ 0x787A796C, 0x04A12CD3, 0x46029BD , 0x1DB22DD8, 0x1A8C7F28, 0x061E452E,
+ 0x132D3F78, 0x76525852, 0x73357BBA, 0x6BBB0A58, 0x62536AFA, 0x3F6B65EF,
+ 0x6DC57B58, 0x1EB718CE, 0x66B02740, 0x5FF60B47, 0x32477B8F, 0x7FF35302,
+ 0x29FD3E40, 0x475A43D1, 0x6FF9528A, 0x2018209D, 0x47E079C9, 0x4CF576D3,
+ 0x28074E34, 0x5D6F58ED, 0x234045D1, 0x51CE35F9, 0x25297896, 0x644320FE,
+ 0x0F4449A9, 0x54C361C6, 0x701D52F1, 0x4E094820, 0x718F0810, 0x61540689,
+ 0x79DE5A1F, 0x52865C23, 0x48AC3A4B, 0x6A0C1BE0, 0x21B705DB, 0x7086465D,
+ 0x1CC10929, 0x1E1D716E, 0x6D231D4C, 0x20495108, 0x38FF1971, 0x149C78D4,
+ 0x441F1E8B, 0x43D95372, 0x69C324B4, 0x210B7DC9, 0x47815E78, 0x02476137,
+ 0x6163DDF , 0x390D6EC2, 0x2F684E5B, 0x0E680ABD, 0x02232615, 0x12593380,
+ 0x7B1465FE, 0x065A6957, 0x130F53EB, 0x6D772EF7, 0x10E916B6, 0x63BC7A68,
+ 0x2ACB00BB, 0x651C5590, 0x194714B5, 0x730904EE, 0x59BB61B4, 0x34867DBC,
+ 0x391C706C, 0x3C164218, 0x28931CD0, 0x129A66AB, 0x13171F4D, 0x62882872,
+ 0x4B167FD4, 0x66902F4C, 0x7A794932, 0x54B152C , 0x30856EA9, 0x39466D55,
+ 0x36696451, 0x0F5B1E8C, 0x077A3C6A, 0x51B956B4, 0x367E2D2A, 0x1D2C662A,
+ 0x78FB6880, 0x4E6D40B6, 0x40706FDC, 0x4DF9679C, 0x20306EDB, 0x63812AE7,
+ 0x255D2748, 0x1B8B617B, 0x3E036FAD, 0x04E444A7, 0x55A37517, 0x669B2988,
+ 0x18FD5E8C, 0x67BD05CE, 0x34BB346C, 0x76994800, 0x05B958B6, 0x6DFA2FEF,
+ 0x2055B5C , 0x1F843C4C, 0x72721B52, 0x73EF6B86, 0x5FB90B61, 0x43235DAC,
+ 0x31D424B4, 0x768C0D7E, 0x162F2F9D, 0x7B2A7A99, 0x79392693, 0x442D12C0,
+ 0x0692273E, 0x59A16E80, 0x5D956856, 0x44E73DAC, 0x0D874532, 0x5F5C1DD0,
+ 0x5D167858, 0x05597EA2, 0x1D821476, 0x59654ED2, 0x594C0DC7, 0x1A873506,
+ 0x3F693200, 0x7A651AB5, 0x20CC3C8A, 0x1F9E662C, 0x78E7631 , 0x2A01DA0 ,
+ 0x3088472F, 0x12EE0D42, 0x360D4D5F, 0x73337E48, 0x0D634C06, 0x233A0ACB,
+ 0x706651ED, 0x7AA54079, 0x262239D1, 0x3EBB6BB6, 0x225A4F3D, 0x32581A06,
+ 0x6E6F5780, 0x577377C7, 0x75ED1DDC, 0x10DF2D15, 0x3C7929BC, 0x37175917,
+ 0x354E381C, 0x762A2DD7, 0x76435AC1, 0x73BB749E, 0x52FE4E7E, 0x6C8140F4,
+ 0x57694875, 0x12D30822, 0x474227CF, 0x37926D98, 0x121C7E24, 0x204E1EE7,
+ 0x58C6268 , 0x2152080 , 0x316C3323, 0x7AB14A31, 0x61C13C03, 0x7D8E74F1,
+ 0x73F446D0, 0x6C6C6A0A, 0x3BFD79FB, 0x67242969, 0x3E5524EB, 0x0FF5534 ,
+ 0x52F05F1C, 0x17102DE3, 0x540F4A21, 0x798468E7, 0x419545EB, 0x193F7880,
+ 0x2B246B20, 0x408A2BC4, 0x4BF66A49, 0x40894C55, 0x4CAA6398, 0x247856E9,
+ 0x2F2A647D, 0x22F55D33, 0x70D37915, 0x50634C72, 0x5983671 , 0x2BCC5AF8,
+ 0x1A77D48 , 0x411B5CFA, 0x71074D7E, 0x3A6B3593, 0x61425F05, 0x6271012A,
+ 0x5B830310, 0x3D8418CA, 0x10A50792, 0x239F7137, 0x213D5071, 0x7F9930D4,
+ 0x2462664F, 0x54180F8E, 0x291505BA, 0x6586387A, 0x144B2C12, 0x18E425C7,
+ 0x3AA43373, 0x18F0503C, 0x19462AC0, 0x58B452EF, 0x72473895, 0x26BF5435,
+ 0x6DA553B , 0x60912FA6, 0x5C337331, 0x3D93CD7 , 0x4D035752, 0x20691929,
+ 0x389962F9, 0x36E701E9, 0x758B642C, 0x5FCA69E3, 0x596027F4, 0x2D5A2FD0,
+ 0x5F18324A, 0x3DB165AA, 0x76BA3876, 0x1BC21AF6, 0x3CC10841, 0x73A60174,
+ 0x625B7F58, 0x67C57724, 0x4458653C, 0x61573095, 0x2B370837, 0x03DF6CE3,
+ 0x5D086EFA, 0x3F5227C2, 0x191B4785, 0x60843D82, 0x30DE11F1, 0x105E226C,
+ 0x6E1C7AA2, 0x47AA5D14, 0x36676D03, 0x3B8D4DF6, 0x7372694 , 0x409521DC,
+ 0x744206A , 0x4722023F, 0x2BE46AD5, 0x63E11D76, 0x4A4A09AB, 0x5CF252B9,
+ 0x31586916, 0x4DFD7D84, 0x32037634, 0x2D7329D4, 0x4524582F, 0x2E5366C1,
+ 0x3B0E019B, 0x38530C6A, 0x6A2542D , 0x0A6A00E5, 0x119725CC, 0x54065347,
+ 0x1B6F7AF1, 0x6CCF71F1, 0x181117F2, 0x71674A76, 0x74F43880, 0x77A55F47,
+ 0x59EA5B62, 0x4A331D95, 0x3CBB276F, 0x245C4D50, 0x4718D5 , 0x07CE05D1,
+ 0x60D47AD5, 0x25CA1C40, 0x30061766, 0x669B39DF, 0x3D5F1320, 0x19306AD3,
+ 0x28B30325, 0x0DD090F , 0x6A6E6F37, 0x2DF16F66, 0x2B514C7E, 0x31101C58,
+ 0x7D4847FC, 0x515341CA, 0x77AB0EA6, 0x41320DAF, 0x3AF8531E, 0x24B31611,
+ 0x6D377331, 0x7A832A22, 0x222511C7, 0x722D1F89, 0x3B194F18, 0x261B0A4D,
+ 0x43F676DB, 0x4F8C6D61, 0x190F2250, 0x202E72A9, 0x560D4EA2, 0x308E67B4,
+ 0x36746663, 0x17CC3852, 0x27EB2EAC, 0x7FDE0AA8, 0x264719A , 0x23261EDD,
+ 0x3C0B339E, 0x06284D40, 0x48D82ECB, 0x24D44CF8, 0x43631B91, 0x4BF04248,
+ 0x36497B9B, 0x68273C58, 0x630B7AF9, 0x20CC3F26, 0x6C3B7B71, 0x574433ED,
+ 0x7A2552F6, 0x4CDE642D, 0x565B0142, 0x26F9207F, 0x67A207BE, 0x5B506684,
+ 0x44DA4780, 0x11756A0C, 0x156104AF, 0x415561B0, 0x6E3A6886, 0x1DBA1EA2,
+ 0x542359C8, 0x4C024E22, 0x758F052A, 0x1DD6395 , 0x2D194BAD, 0x616475A1,
+ 0x42084602, 0x09C274AD, 0x13CB5562, 0x57FE2D5B, 0x607A4EE5, 0x16723A91,
+ 0x4F624CCF, 0x2E5E24A3, 0x28FE6FAF, 0x3DDA6EF4, 0x32AF540C, 0x19A57B3B,
+ 0x5D1D73A3, 0x23424B3E, 0x278445F5, 0x53971C3B, 0x427D7943, 0x5221358C,
+ 0x26CE1A5E, 0x7B506CA4, 0x3B86636E, 0x60831F6D, 0x45E142F3, 0x21B77B04,
+ 0x7BB65E0C, 0x78B80F5E, 0x7D8D172B, 0x3BF33A90, 0x2D572D9 , 0x2B5B4920,
+ 0x36A05E01, 0x52745306, 0x47C64855, 0x1CAA669B, 0x304A2641, 0x4D6B1760,
+ 0x3E176D79, 0x523241B0, 0x24A67957, 0x4BDE76AF, 0x4E5F1493, 0x4C215DA5,
+ 0x33A052B , 0x1A4D00C2, 0x40AE6BCA, 0x390D106B, 0x69E86018, 0x5AF356CF,
+ 0x63561D4 , 0x44F31C6 , 0x14B6299B, 0x0D2E25F0, 0x4CBF132A, 0x45AC18B6,
+ 0x2227567D, 0x06B54E2F, 0x26344534, 0x22C515EC, 0x2442370D, 0x6C3721C6,
+ 0x34EF687D, 0x1C06323A, 0x6AF36A60, 0x60396F52, 0x6AE70AA1, 0x49D06CBC,
+ 0x6F9576C8, 0x584C4258, 0x3A9A27BB, 0x66DF0D47, 0x1D4804EA, 0x57DD1E67,
+ 0x789C7895, 0x75336111, 0x25C122C8, 0x62742114, 0x4FBF6D26, 0x3F9F6482,
+ 0x66F02CD9, 0x11083202, 0x499E2618, 0x7EBC1351, 0x440112F1, 0x49DF7BC1,
+ 0x3BF45C25, 0x31BA7FA0, 0x61AF1AED, 0x6B1F7D29, 0x2D865294, 0x63E01129,
+ 0x7E9E77A5, 0x100435D7, 0x1FE3A71 , 0x08597C81, 0x722849FA, 0x31C520AF,
+ 0x7BA178DC, 0x7F102D31, 0x5CA07864, 0x150E6F98, 0x02C34882, 0x5D041F11,
+ 0x0C613C57, 0x53984FD1, 0x426F38AD, 0x55992B1D, 0x7AFA078D, 0x2B253413,
+ 0x594B32CF, 0x32887E38, 0x28933B46, 0x1A0B4168, 0x291B4A94, 0x653A5E8D,
+ 0x21746BBE, 0x5EFE6415, 0x30DA429C, 0x50C5640C, 0x34711AA4, 0x529C67A6,
+ 0x105957CD, 0x4D287499, 0x03CA0AA7, 0x28385832, 0x25A04A02, 0x420D47A4,
+ 0x35627556, 0x4BC11E4C, 0x59E215C7, 0x27E838B4, 0x458612F4, 0x22827F6F,
+ 0x449D4DBA, 0x679B7362, 0x4E495845, 0x4FD270D1, 0x395E76A0, 0x375A655E,
+ 0x12E2058F, 0x73F970CA, 0x61EF73B3, 0x51FF5362, 0x67410345, 0x7FDA0B3B,
+ 0x221962E8, 0x17AB6543, 0x26557412, 0x4B30084D, 0x268E191D, 0x7E0D13DF,
+ 0x73EF127D, 0x4DEC5DB1, 0x77FA745F, 0x56002898, 0x12DD0A40, 0x157F6DDF,
+ 0x42A55F8E, 0x43597924, 0x7B630C3F, 0x338B6B58, 0x32945F75, 0x4FA23A0E,
+ 0x036E38C0, 0x33B18FD , 0x06114337, 0x24660ACB, 0x19BB02F0, 0x124C0A47,
+ 0x3A951701, 0x01155ABF, 0x0C612D71, 0x36074CA7, 0x51660C41, 0x635F58C7,
+ 0x7FC2002D, 0x0E6A7CF3, 0x65B07D07, 0x015F6A6B, 0x791B70DD, 0x6E475719,
+ 0x424314C7, 0x68426EB , 0x71942FEE, 0x464A2F52, 0x677579FD, 0x6BA775AE,
+ 0x1F66EFF , 0x1A795237, 0x78D9545F, 0x1D0B344D, 0x3BD34AB7, 0x2F85312A,
+ 0x16C542AD, 0x3990185D, 0x08DF3351, 0x02811AA5, 0x6D351F41, 0x4066269D,
+ 0x06B660BF, 0x6EDB4768, 0x5DD70CF0, 0x35D74F6E, 0x689E220C, 0x11431687,
+ 0x147C49C9, 0x385762BD, 0x302F0AE4, 0x1DAB67F8, 0x483256C9, 0x37D50FCB,
+ 0x4EA82711, 0x4D7B2C98, 0x19DB78BC, 0x58DE0DC2, 0x6AFF7E7B, 0x37621C93,
+ 0x792C6E19, 0x77001192, 0x7F88439D, 0x2E196A66, 0x6C71378C, 0x6AF43B3A,
+ 0x7C16225E, 0x6687337 , 0x4BEE1608, 0x6D5B5552, 0x345D4590, 0x681209CC,
+ 0x7B242819, 0x508A1416, 0x19880FE3, 0x1FC7288A, 0x24BD0502, 0x6A1D1678,
+ 0x20E6CA0 , 0x59BE2057, 0x5ADE11EB, 0x5EA8649D, 0x7A200E6F, 0x1149481D,
+ 0x72281E93, 0x0A5B0451, 0x67312D58, 0x63B849F1, 0x52217960, 0x7CDF59F3,
+ 0x33C775C0, 0x1EBA0799, 0x7DF1506 , 0x34E96110, 0x38FC73E3, 0x5EA059B2,
+ 0x022936EA, 0x316406F6, 0x43911185, 0x6C0D10F3, 0x1C6F3DF8, 0x38DB12A9,
+ 0x5CD41244, 0x2C9F0A7B, 0x5F4A315F, 0x77CE1C66, 0x4C800860, 0x318D53E0,
+ 0x7105420D, 0x575361F2, 0x750810BA, 0x217E4CA5, 0x2010140 , 0x4D884763,
+ 0x42BB0DA7, 0x32D53A74, 0x141C6CD4, 0x087F5FC3, 0x464B53 , 0x2D2A05F6,
+ 0x15532B45, 0x5D5C3CE1, 0x3EB9216A, 0x2214611B, 0x1FC52C5F, 0x11AE5DD7,
+ 0x20B925A9, 0x7C640AF4, 0x740009AC, 0x6D0E0321, 0x38E6A61 , 0x09104544,
+ 0x474F26C8, 0x15254CF3, 0x341A6B59, 0x661904CE, 0x598B2197, 0x2412659D,
+ 0x61976DD4, 0x329B3E16, 0x08FD1FB0, 0x304006F3, 0x3456309 , 0x55CC15F1,
+ 0x59DA7630, 0x5C801335, 0x0036D52 , 0x353775A5, 0x299476EB, 0x75280568,
+ 0x766F5264, 0x2EA233A6, 0x647619F3, 0x7FB30C7A, 0x1BC03B9 , 0x36BC3061,
+ 0x3F30596E, 0x3E2A527B, 0x0AC04220, 0x641979A3, 0x1ECC3B89, 0x21447BC1,
+ 0x4E8F2E26, 0x0C5A1D90, 0x299E5467, 0x57C947E3, 0x1D4865ED, 0x76F31C3D,
+ 0x4EE81CDF, 0x3479195E, 0x6FFB3AE1, 0x5C82398 , 0x300F7364, 0x47940AFA,
+ 0x3B853E3E, 0x598C440D, 0x224A3D89, 0x3A674204, 0x22880A38, 0x2E77F2D ,
+ 0x22841C9C, 0x4F0609C3, 0x1FE90922, 0x09335017, 0x2D6B69A7, 0x7EDB63F9,
+ 0x099A74EF, 0x1F9F1B40, 0x24BE17E8, 0x251D2F7A, 0x16AC50D3, 0x28D7ED6 ,
+ 0x6D193443, 0x76156F1B, 0x30DF6A4E, 0x64FF6794, 0x63DB2C9A, 0x74353022,
+ 0x556E025C, 0x23802AF9, 0x425018A4, 0x675A18BB, 0x70B227B9, 0x7FB01BF ,
+ 0x63E7910 , 0x6C661591, 0x65745D2B, 0x4F6E379D, 0x52B32FAC, 0x1E6A1101,
+ 0x1DE22385, 0x2338191F, 0x469704B6, 0x4BAB4599, 0x54EB4809, 0x78393E6D,
+ 0x550017DD, 0x39B120E1, 0x288D52D3, 0x2D52668C, 0x20D22A68, 0x4E1207D1,
+ 0x3FCC0EFE, 0x47F37E64, 0x25177A90, 0x34BF5D4D, 0x5A8D3DCE, 0x6F7275A8,
+ 0x6BEA2655, 0x2A1810FC, 0x64DB593A, 0x0A4D4BC0, 0x2C402E93, 0x71C077F9,
+ 0x6F0C4577, 0x70412414, 0x752F1DC1, 0x582E38EA, 0x2C455F7B, 0x4DCD4EDB,
+ 0x12BC2696, 0x7B037135, 0x4FCA1F8C, 0x3D5E75F6, 0x502F41B0, 0x361653F1,
+ 0x2E5B0E31, 0x20266B19, 0x57E703D7, 0x467B3E00, 0x47032BA3, 0x1F776B9C,
+ 0x62570A84, 0x7EC75B48, 0x1BD5012 , 0x7D0A2D5D, 0x7FCC29F2, 0x291304B6,
+ 0x19D558ED, 0x47551C8 , 0x7D12738F, 0x3ADE0892, 0x5F741997, 0x25D2E2F ,
+ 0x2B9F2269, 0x5C134FED, 0x15E92399, 0x54437F4E, 0x272D32AB, 0x56186AA1,
+ 0x7E4D355C, 0x234D7836, 0x2A871760, 0x4637A94 , 0x2C183207, 0x5FC78B3 ,
+ 0x7F10621E, 0x276966B2, 0x6C9F4A11, 0x4E3F182C, 0x62BA2EF5, 0x25F239CD,
+ 0x73D63FED, 0x636E1F5E, 0x0AC15A0E, 0x3F3D33EB, 0x738326EA, 0x35C366B1,
+ 0x4D476E86, 0x02F63208, 0x711A1FC1, 0x426A4396, 0x7E4D1B93, 0x75E46DB7,
+ 0x2F3C44A7, 0x51A56F5C, 0x7AD2463D, 0x0A5639CA, 0x49952C78, 0x4C4B64F6,
+ 0x3AFE7F8D, 0x66993D04, 0x43867F37, 0x4BC146C2, 0x55A875EC, 0x681A1A75,
+ 0x30A67E1B, 0x4A4A7D0C, 0x20F77993, 0x1891805 , 0x738976AD, 0x542667D6,
+ 0x3C5C6EBF, 0x4499187F, 0x2BF17C97, 0x447C317F, 0x68D8419C, 0x7AAB6456,
+ 0x421B4F29, 0x76740F9C, 0x09163B8D, 0x3D72AAB , 0x1AD54DD7, 0x754946EE,
+ 0x7317342B, 0x218546D4, 0x10563DA7, 0x54BB4CCE, 0x0CE63E46, 0x5D146234,
+ 0x33BE6C63, 0x325044E5, 0x09D72335, 0x07C36BA , 0x365530CC, 0x2DFA448C,
+ 0x1663516F, 0x59B00AA , 0x150274EA, 0x12532D4A, 0x3CEF002D, 0x492F3DA5,
+ 0x263A2574, 0x6F8005C2, 0x14A10651, 0x2F627ABA, 0x68293238, 0x26987646,
+ 0x52590516, 0x10144D36, 0x59B151B9, 0x2B2A4F05, 0x53953699, 0x27851C75,
+ 0x180646F3, 0x2E970306, 0x32843145, 0x18F4FE8F
+};
+
+/* The source data is random across the q31_t range. Accessing it by word should
+ remain random. */
+const q15_t * fast_math_q15_inputs = (q15_t *) fast_math_q31_inputs;
+
+const float32_t fast_math_f32_inputs[FAST_MATH_MAX_LEN] =
+{
+ /* Special values close to increments of pi/2 */
+ -0.0, 0.0, -1.5E-07, 1.5E-07, 1.5707964, 1.5707965,
+ -1.5707964, -1.5707965, 3.1415925, 3.1415927, -3.1415925, -3.1415927,
+ 6.2831855, 6.283186, -6.2831855, -6.283186,
+
+ /* Test some slightly larger values too */
+ 10.1, -13.2,
+
+ /* Random values (0, 2pi) */
+ -1.3684878, 1.1444261, 0.2627620, 0.6719343, 3.8732286, 5.9040643,
+ -2.2271110, 2.5800587, 6.1848498, 5.9412493, 4.2514839, 6.2096863,
+ -4.8181437, 2.1155439, 4.1618680, 1.5341357, 1.8567268, 4.2736867,
+ -3.3165594, 2.5861183, 3.7864876, 4.7156566, 3.6664471, 3.4670146,
+ -3.6666823, 3.2158594, 0.5189454, 4.5211925, 6.2590334, 2.2276047,
+ -6.1025991, 2.1768018, 5.5703194, 2.8569321, 2.5976403, 1.3680509,
+ -0.7895111, 1.9409676, 4.5622487, 4.9189303, 4.3591961, 0.0615894,
+ -5.2980657, 5.7951829, 4.8440482, 0.2680398, 2.3762136, 4.4254964,
+ -4.5836656, 1.4091744, 1.6905207, 4.2287795, 3.0001720, 3.9189258,
+ -1.4856273, 1.1129014, 5.2128031, 4.8187110, 5.8715002, 0.6778860,
+ -1.1449692, 0.6226340, 3.0772767, 1.2141962, 5.6290528, 0.6225986,
+ -0.2775005, 3.5015887, 4.8537297, 1.9599772, 1.1245801, 2.1297213,
+ -1.3203840, 3.2053828, 5.6948550, 3.9516457, 0.6379562, 2.4558128,
+ -0.3431663, 3.1496534, 2.7125841, 6.2678565, 5.0994494, 3.0514394,
+ -5.6199810, 0.8642307, 2.4504731, 5.8267510, 5.7647838, 4.4835177,
+ 3.8851284, 2.1569414, 5.8812331, 0.7839784, 4.5904032, 4.0619375,
+ 5.2348483, 2.5024810, 4.7112719, 5.2478452, 2.0260784, 3.4699621,
+ 6.1520498, 3.4514073, 2.0761128, 3.8922546, 2.2659464, 4.7532896,
+ 2.6006151, 3.0934955, 4.3652005, 6.1118673, 2.0593452, 5.2640727,
+ 4.6437278, 5.9952549, 0.2005758, 2.2422740, 4.1635768, 1.7687265,
+ 1.4475395, 4.4681525, 3.9243074, 3.7109036, 4.1496541, 0.2987948,
+ 2.1914796, 2.8358565, 1.5136507, 4.4927603, 5.3795520, 1.7687650,
+ 4.5933278, 0.8655898, 5.2572843, 0.8708603, 3.6958286, 2.3006310,
+ 5.0690197, 3.1653480, 3.0762120, 5.5106597, 2.2188555, 2.8239372,
+ 6.0540393, 0.2657649, 6.1132775, 1.1888217, 4.1916405, 3.6847088,
+ 4.2418564, 2.2683684, 3.8973243, 5.0966113, 0.1209983, 0.5269928,
+ 6.1248595, 4.0925498, 1.4529100, 2.5352096, 0.7666775, 1.6866509,
+ 1.6200953, 2.0839142, 0.9565145, 2.1865966, 0.7644026, 5.5552975,
+ 0.5923686, 5.8436176, 2.5071164, 0.2978322, 2.1511962, 4.6242118,
+ 4.9931353, 3.4237447, 4.3116692, 5.6148598, 0.3442670, 1.9079607,
+ 0.2902301, 1.2282167, 4.5249352, 4.5349096, 5.5153742, 3.6595342,
+ 0.4441228, 5.7977751, 5.0288862, 1.7966571, 3.4159368, 6.1875316,
+ 4.4967379, 5.2714014, 2.7222564, 2.9570223, 3.5230663, 1.6907520,
+ 4.7062218, 3.1660203, 4.0640250, 1.9336225, 0.8716326, 2.9881129,
+ 2.2773988, 4.9518627, 4.9027432, 4.2003861, 0.8388295, 0.1354396,
+ 3.5175829, 1.8901016, 5.9024853, 6.1631993, 1.8008890, 5.0317023,
+ 5.6304337, 3.7543702, 5.5544410, 5.9296402, 3.4504620, 4.5765894,
+ 3.6238793, 0.1624673, 2.8056369, 4.0608350, 3.2748147, 2.3393094,
+ 5.8881908, 5.2121085, 5.3349614, 2.3407017, 3.7270886, 5.4824095,
+ 5.8653636, 4.2000849, 1.2992148, 4.1082644, 0.4527132, 2.5555406,
+ 4.1904544, 5.8667713, 5.0953493, 3.0445066, 4.7547955, 2.6203864,
+ 6.1059115, 6.2076281, 5.4295991, 2.4434288, 2.8572272, 1.5499814,
+ 4.9286757, 5.5470323, 5.7410198, 3.5078076, 3.7627993, 0.9354200,
+ 5.6530665, 2.8299063, 1.2922774, 5.6526739, 4.7914663, 5.5448250,
+ 1.7903950, 4.2300036, 4.1737937, 0.7716694, 2.5592571, 1.7296789,
+ 4.5029688, 1.7805566, 5.6309835, 5.1935484, 2.4506089, 3.1284165,
+ 4.3655898, 5.2424950, 3.8304163, 3.6111801, 2.0485834, 2.8678003,
+ 4.4849099, 5.5568808, 4.5292698, 0.1169475, 4.2397456, 2.7552322,
+ 2.7509053, 0.7353640, 5.1187960, 2.0411269, 1.5470969, 2.1533307,
+ 2.3605433, 3.4340988, 3.5306485, 2.4870244, 2.5015301, 3.2381477,
+ 4.1313862, 5.9747764, 4.5386496, 2.5137752, 5.2268018, 0.8440727,
+ 0.3799239, 0.5293398, 0.0000000, 2.0371338, 1.8958053, 0.0733938,
+ 3.3923238, 0.5992443, 0.9205800, 3.9655772, 5.3992694, 6.1212150,
+ 3.5866836, 6.2633946, 3.4780043, 3.2387210, 2.0777367, 2.7017810,
+ 3.0901098, 0.4463392, 5.5778300, 0.4061048, 2.7406309, 5.1938664,
+ 2.4789345, 3.8545764, 5.1436714, 5.5683790, 5.8503469, 1.1987353,
+ 1.6247202, 5.6414565, 3.7282025, 3.1657206, 3.8503962, 5.1485818,
+ 3.3419582, 1.2696753, 2.8518968, 2.6886436, 6.0698884, 3.8959208,
+ 4.3692639, 4.5249277, 2.1796068, 3.2483466, 3.4978155, 0.9832885,
+ 3.5315023, 4.3655778, 2.6794992, 5.2544420, 4.5954405, 2.2621418,
+ 2.8539005, 2.4277593, 4.8729535, 4.6135614, 2.7035154, 4.3589760,
+ 5.9389515, 4.9274787, 4.4332387, 0.6869673, 2.4500066, 3.7127639,
+ 2.8863700, 0.3162955, 1.4368865, 5.2413645, 0.0982985, 5.4268554,
+ 0.4905223, 4.2037186, 3.1429204, 1.3696954, 3.5915675, 0.7677371,
+ 4.2170618, 3.7673071, 0.3517086, 0.3540136, 0.9581898, 0.1232828,
+ 2.7342886, 5.2290017, 3.8791769, 3.2680695, 5.4278441, 0.6138541,
+ 5.7054603, 0.6786889, 3.2483864, 0.8994758, 3.5146290, 0.0287746,
+ 4.8172051, 5.3325973, 5.7605579, 6.2013046, 3.1738449, 1.7053924,
+ 0.6330341, 3.1909083, 3.6794907, 4.7933610, 0.5212697, 4.1569315,
+ 3.2482749, 1.0747264, 5.8971330, 3.7101152, 2.7685894, 5.9182512,
+ 4.1212281, 2.8396586, 5.2759745, 3.3465722, 3.4801751, 4.2729777,
+ 2.3071222, 1.5035072, 3.6374836, 5.4468120, 2.5558538, 0.7075818,
+ 2.7887656, 1.8861142, 2.5219880, 5.2361777, 2.5360737, 2.4515477,
+ 2.2647672, 0.8812504, 1.6344462, 0.5454754, 2.6979830, 1.6165554,
+ 1.8695956, 2.6694641, 0.7490013, 3.1105972, 4.4384875, 1.5304166,
+ 4.9327408, 0.4655185, 2.4748426, 0.0213259, 1.3865538, 0.0081717,
+ 1.1886509, 0.8952537, 1.6843712, 1.0988793, 0.8711572, 3.7629093,
+ 5.6615138, 5.9022971, 1.3897429, 3.0327137, 2.3625475, 3.2910070,
+ 1.6642436, 0.4295011, 2.7415239, 1.0923508, 0.1640358, 5.9984205,
+ 2.7055177, 6.0416507, 4.7903915, 0.0461730, 4.2728088, 4.4356194,
+ 4.0534637, 3.4702651, 1.3704176, 4.8529200, 1.4327442, 2.3302118,
+ 5.5978709, 5.3807748, 2.5285646, 1.9981730, 3.8241692, 5.7189253,
+ 5.7120324, 3.7170973, 2.0896078, 5.3599569, 2.7796679, 5.6822331,
+ 0.2084724, 3.3453343, 4.5018856, 1.1265867, 2.1144987, 1.1794352,
+ 2.0227281, 2.5375066, 3.4467437, 0.3062336, 3.4729184, 1.7266910,
+ 1.5174002, 1.5277262, 0.9686124, 6.0093412, 5.8789338, 5.1441345,
+ 4.5758041, 1.1046577, 2.2642776, 1.1862024, 0.0075297, 1.9881224,
+ 4.3958232, 3.9285942, 3.4121603, 2.7585521, 1.8059588, 3.1520171,
+ 4.7849358, 4.7903511, 3.6194660, 4.6977042, 4.0560129, 0.7742111,
+ 3.1692252, 2.1819072, 0.5789810, 0.9289656, 1.2451370, 4.2239985,
+ 2.7112647, 4.3630684, 1.6134250, 0.0613154, 3.3444332, 1.7554715,
+ 5.9453394, 5.6953510, 2.4673100, 0.1561700, 4.2187618, 5.2600982,
+ 6.1041123, 0.3577199, 2.8294680, 3.6597688, 4.3142726, 4.5203293,
+ 4.0843265, 4.5673388, 2.3489542, 3.6541880, 0.7295941, 0.3622530,
+ 6.1560465, 1.7896003, 3.7383338, 6.0454361, 1.1672793, 1.2129049,
+ 2.1466132, 5.8615704, 2.4546365, 1.7166712, 0.9547117, 2.4951084,
+ 2.3544507, 0.8238180, 2.7334414, 0.5749942, 3.8618151, 0.0689837,
+ 3.6019012, 4.9620190, 1.4788531, 2.8149909, 3.5773830, 0.3857966,
+ 3.1182750, 4.0357856, 1.3902536, 5.2593808, 6.1014456, 5.3179177,
+ 3.1792883, 1.7522271, 4.6911344, 1.4886775, 6.0151778, 3.8972087,
+ 3.7715583, 1.0845061, 0.5676653, 1.6038597, 5.3945577, 5.7244031,
+ 4.3959286, 4.5564551, 1.4444168, 3.6194506, 5.0933266, 2.5374227,
+ 6.2105471, 0.5654792, 2.0165320, 3.2132771, 0.3808010, 4.5596317,
+ 3.4969429, 3.3260664, 5.2149334, 5.3957421, 4.9576149, 1.9970040,
+ 2.8413032, 4.7263877, 0.6902815, 0.6895316, 1.6957291, 3.2963937,
+ 6.1113470, 4.4636294, 1.9594738, 1.8312791, 5.3429527, 5.7280497,
+ 4.0166905, 1.6045389, 0.5571039, 5.2669152, 3.6738954, 5.9571429,
+ 0.3834561, 3.6734096, 1.7913869, 5.2007946, 1.2000032, 2.7804978,
+ 2.4718774, 5.1935175, 4.2529065, 1.3044083, 1.9987109, 0.8407592,
+ 4.2189258, 3.5876427, 1.0666779, 0.9277486, 2.9912971, 5.7057758,
+ 3.4694180, 0.2069675, 0.3384307, 5.0583614, 2.8360719, 2.4042372,
+ 4.9614777, 2.2888819, 3.3448533, 4.4714710, 5.4756485, 2.0652177,
+ 4.0848120, 6.1250762, 0.4773170, 3.6883502, 2.6005256, 1.9423615,
+ 1.6577182, 4.7674690, 6.2531264, 1.1722630, 4.9080805, 1.2302350,
+ 6.2351753, 5.0407581, 2.6654950, 4.5795867, 3.1312479, 5.0830358,
+ 2.2400117, 0.4602021, 3.7133088, 5.7188788, 1.2174673, 2.7166470,
+ 4.7071094, 0.2462034, 5.9459353, 4.7983010, 3.5111731, 1.1551193,
+ 3.1287047, 3.2537199, 6.2470131, 5.3711915, 6.0469623, 4.2659122,
+ 2.5352740, 5.8746469, 3.0126903, 1.4563896, 2.4899651, 4.4301324,
+ 3.5095299, 4.7540509, 6.2547920, 6.0471349, 3.3619258, 6.0561746,
+ 0.7264988, 0.3232592, 1.9122808, 3.6454528, 3.3361480, 5.6624574,
+ 3.3963785, 2.7142142, 3.4096772, 4.4762342, 0.1047703, 5.0323343,
+ 0.8954125, 3.0063438, 1.6137441, 2.3190715, 4.1579916, 1.0656836,
+ 1.7516517, 1.2454643, 1.2256706, 2.0535941, 5.5313259, 2.9600203,
+ 2.5382144, 1.1261446, 6.0879353, 2.5601199, 5.3060708, 3.8662016,
+ 2.3663172, 5.5114955, 4.9313732, 2.9213939, 5.1143679, 5.6450910,
+ 2.6969853, 2.1006537, 3.7488443, 5.6673754, 4.4112136, 2.3716204,
+ 4.6178643, 5.9948046, 3.4105954, 3.3935850, 1.9547595, 0.4475800,
+ 1.1434170, 0.5842667, 2.9121888, 0.0586379, 5.7492774, 4.0384655,
+ 0.0089162, 0.1909163, 1.3098570, 2.8586366, 0.7996361, 0.0543350,
+ 4.5683759, 2.2249794, 4.9036865, 2.7435946, 2.7429546, 0.3092155,
+ 0.3118464, 0.5723993, 3.7324447, 1.5147758, 5.2864780, 5.3860266,
+ 6.0545540, 3.0718480, 1.3842492, 1.4213108, 3.3727372, 4.7884765,
+ 2.1838288, 2.8980046, 4.0169897, 5.7637923, 1.0151904, 4.4964699,
+ 3.6300404, 2.7224978, 5.5558613, 2.4696170, 1.1245340, 3.9793522,
+ 3.9207111, 2.0605178, 5.0451799, 6.2799046, 6.1636676, 0.7981966,
+ 1.4592079, 0.1484872, 3.8166117, 0.6962355, 2.5601436, 5.5548184,
+ 3.4440198, 2.3185147, 1.3090764, 2.7705283, 6.0079576, 0.7792778,
+ 2.9578927, 5.3840384, 0.2726304, 4.3456090, 6.1511471, 1.7798247,
+ 0.8405677, 4.3057392, 5.7142715, 3.8382030, 5.6547587, 1.2153801,
+ 4.7401894, 2.1756202, 2.6303011, 0.9784166, 5.1459324, 3.9265103,
+ 4.6405120, 5.0586705, 0.4223724, 5.9739917, 3.1263686, 4.7447217,
+ 4.6646686, 5.2221411, 0.9833301, 2.8733554, 3.8836400, 5.8570808,
+ -5.2470141, 5.6261119, 3.6600718, 3.6615062, 5.3716581, 0.2190677,
+ -5.5632585, 2.5618482, 0.2285950, 4.6881858, 0.9728179, 0.9042027,
+ -3.8073530, 1.5989503, 2.0367209, 2.5245268, 2.5533189, 2.4265105,
+ -3.8314979, 1.0486053, 1.1818174, 0.5945707, 2.0306392, 4.8355201,
+ -1.4710068, 4.6518534, 4.3531065, 5.1778361, 5.2023364, 1.8432851,
+ -1.9438243, 3.2862931, 2.0439139, 5.2266206, 5.0912323, 3.4997233,
+ -1.6522518, 4.2761236, 1.4680860, 2.8678051, 2.4163051, 3.3841326,
+ -6.2310582, 4.7451897, 6.1603795, 1.4751828, 3.3210347, 0.3231823,
+ -4.7555888, 3.7823504, 5.3857498, 6.2095284, 5.8401232, 2.5730582,
+ -0.0021455, 3.3984387, 1.3052100, 1.3777994, 2.0471011, 0.6028680,
+ -4.6968925, 4.7030205, 3.4136510, 2.1245480, 5.2297066, 3.4719134,
+ -6.0164208, 5.6098372, 2.2399783, 3.4331443, 2.1782657, 3.9131853,
+ -5.0053405, 4.6864702, 0.7887674, 5.1672539, 0.1580253, 2.6039335,
+ -4.5955687, 4.9095176, 2.3077255, 4.6801428, 5.6062801, 1.5243220,
+ -0.8142818, 1.4141432, 2.1992023, 1.8038058, 5.8275790, 0.3224138,
+ -3.7238350, 1.0235240, 5.2678588, 1.0528164, 3.1554195, 6.2789723,
+ -2.2330890, 0.2957980, 1.3424690, 2.4996969, 2.0964990, 1.4426353,
+ -5.8818165, 4.2926017, 6.0451393, 2.7518666, 5.9083095, 0.0366581,
+ -3.8346722, 5.0333074, 1.4638661, 5.8588735, 4.7957215, 5.1927356,
+ -3.6031780, 4.9799375, 2.0674268, 1.4040530, 1.9627813, 3.6726693,
+ -5.2145043, 1.8250297, 2.5293238, 5.4164658, 3.8625225, 6.2278165,
+ -1.2798778, 5.1975080, 4.2465638, 1.5641957, 2.9894493, 2.5074636,
+ -3.7663816, 5.0298329, 0.6601666, 5.1612735, 5.2847013, 2.2274284,
+ -2.7022061, 3.5954850, 4.4034117, 4.6650751, 4.7619266, 2.4449681,
+ -2.6973871, 6.0088907, 3.6000853, 5.3389611
+};
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c new file mode 100644 index 0000000..3157d1c --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/biquad_tests.c @@ -0,0 +1,244 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+#define BIQUAD_DEFINE_TEST(suffix, instance_name, config_suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##_##suffix##_test, \
+ arm_biquad_cascade_##config_suffix##_##suffix) \
+ { \
+ instance_name biquad_inst_fut = { 0 }; \
+ instance_name biquad_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ /* Initialize the BIQUAD Instances */ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_fut, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState); \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n", \
+ (int)blockSize, \
+ (int)numStages); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_biquad_cascade_##config_suffix##_##suffix( \
+ &biquad_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_ref, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState); \
+ \
+ ref_biquad_cascade_##config_suffix##_##suffix( \
+ &biquad_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(suffix, config_suffix, speed, output_type) \
+ JTEST_DEFINE_TEST(arm_biquad_cascade_##config_suffix##speed##_##suffix##_test, \
+ arm_biquad_cascade_##config_suffix##speed##_##suffix) \
+ { \
+ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_fut = { 0 }; \
+ arm_biquad_casd_##config_suffix##_inst_##suffix biquad_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ postshifts_idx, uint8_t, postShift, filtering_postshifts \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n" \
+ "Post Shift: %d\n", \
+ (int)blockSize, \
+ (int)numStages, \
+ (int)postShift); \
+ \
+ /* Initialize the BIQUAD Instances */ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_fut, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState, postShift); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_biquad_cascade_##config_suffix##speed##_##suffix( \
+ &biquad_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_biquad_cascade_##config_suffix##_init_##suffix( \
+ &biquad_inst_ref, numStages, \
+ (output_type*)filtering_coeffs_b_##suffix, \
+ (void *) filtering_pState, postShift); \
+ \
+ ref_biquad_cascade_##config_suffix##speed##_##suffix( \
+ &biquad_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type)))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+
+JTEST_DEFINE_TEST(arm_biquad_cas_df1_32x64_q31_test,
+ arm_biquad_cas_df1_32x64_q31)
+{
+ arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_fut = { 0 };
+ arm_biquad_cas_df1_32x64_ins_q31 biquad_inst_ref = { 0 };
+
+ TEMPLATE_DO_ARR_DESC(
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ numstages_idx, uint16_t, numStages, filtering_numstages
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ postshifts_idx, uint8_t, postShift, filtering_postshifts
+ ,
+ /* Initialize the BIQUAD Instances */
+ arm_biquad_cas_df1_32x64_init_q31(
+ &biquad_inst_fut, numStages,
+ (q31_t*)filtering_coeffs_b_q31,
+ (void *) filtering_pState, postShift);
+
+ /* Display test parameter values */
+ JTEST_DUMP_STRF("Block Size: %d\n"
+ "Number of Stages: %d\n",
+ (int)blockSize,
+ (int)numStages);
+
+ JTEST_COUNT_CYCLES(
+ arm_biquad_cas_df1_32x64_q31(
+ &biquad_inst_fut,
+ (void *) filtering_q31_inputs,
+ (void *) filtering_output_fut,
+ blockSize));
+
+ arm_biquad_cas_df1_32x64_init_q31(
+ &biquad_inst_ref, numStages,
+ (q31_t*)filtering_coeffs_b_q31,
+ (void *) filtering_pState, postShift);
+
+ ref_biquad_cas_df1_32x64_q31(
+ &biquad_inst_ref,
+ (void *) filtering_q31_inputs,
+ (void *) filtering_output_ref,
+ blockSize);
+
+ FILTERING_SNR_COMPARE_INTERFACE(
+ blockSize,
+ q31_t))));
+
+ return JTEST_TEST_PASSED;
+}
+
+JTEST_DEFINE_TEST(arm_biquad_cascade_df2T_f64_test,
+ arm_biquad_cascade_df2T_f64)
+{
+ arm_biquad_cascade_df2T_instance_f64 biquad_inst_fut = { 0 };
+ arm_biquad_cascade_df2T_instance_f64 biquad_inst_ref = { 0 };
+
+ TEMPLATE_DO_ARR_DESC(
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes
+ ,
+ TEMPLATE_DO_ARR_DESC(
+ numstages_idx, uint16_t, numStages, filtering_numstages
+ ,
+ /* Display test parameter values */
+ JTEST_DUMP_STRF("Block Size: %d\n"
+ "Number of Stages: %d\n",
+ (int)blockSize,
+ (int)numStages);
+
+ /* Initialize the BIQUAD Instances */
+ arm_biquad_cascade_df2T_init_f64(
+ &biquad_inst_fut, numStages,
+ (float64_t*)filtering_coeffs_b_f64,
+ (void *) filtering_pState);
+
+ JTEST_COUNT_CYCLES(
+ arm_biquad_cascade_df2T_f64(
+ &biquad_inst_fut,
+ (void *) filtering_f64_inputs,
+ (void *) filtering_output_fut,
+ blockSize));
+
+ arm_biquad_cascade_df2T_init_f64(
+ &biquad_inst_ref, numStages,
+ (float64_t*)filtering_coeffs_b_f64,
+ (void *) filtering_pState);
+
+ ref_biquad_cascade_df2T_f64(
+ &biquad_inst_ref,
+ (void *) filtering_f64_inputs,
+ (void *) filtering_output_ref,
+ blockSize);
+
+ FILTERING_DBL_SNR_COMPARE_INTERFACE(
+ blockSize,
+ float64_t)));
+
+ return JTEST_TEST_PASSED;
+}
+
+
+BIQUAD_DEFINE_TEST(f32,arm_biquad_casd_df1_inst_f32, df1,float32_t);
+BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_df2T_instance_f32,df2T,float32_t);
+BIQUAD_DEFINE_TEST(f32,arm_biquad_cascade_stereo_df2T_instance_f32,stereo_df2T,float32_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,,q31_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,,q15_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q31,df1,_fast,q31_t);
+BIQUAD_WITH_POSTSHIFT_DEFINE_TEST(q15,df1,_fast,q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(biquad_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df2T_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_stereo_df2T_f32_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df2T_f64_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_q31_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_q15_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q31_test);
+ JTEST_TEST_CALL(arm_biquad_cascade_df1_fast_q15_test);
+ JTEST_TEST_CALL(arm_biquad_cas_df1_32x64_q31_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/conv_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/conv_tests.c new file mode 100644 index 0000000..dcff668 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/conv_tests.c @@ -0,0 +1,473 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Header Stuff */
+/*--------------------------------------------------------------------------------*/
+
+#define CONV_MAX_INPUT_ELTS 32
+#define CONV_MAX_OUTPUT_ELTS (CONV_MAX_INPUT_ELTS * 2)
+
+#define CONV_TEST_VALID_PARTIAL_PARAMS(input_a_len, input_b_len, \
+ first_index, num_points) \
+ (((((input_a_len) + (input_b_len) - 1)) >= num_points + first_index ) \
+ && (num_points > 0))
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define CONV_arm_conv_INPUT_INTERFACE(input_a, input_a_len, input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_fut)
+
+#define CONV_ref_conv_INPUT_INTERFACE(input_a, input_a_len, input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_ref)
+
+#define CONV_arm_conv_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_fut, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_ref_conv_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_ref, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_arm_conv_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_fut)
+
+#define CONV_ref_conv_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_ref)
+
+#define CONV_arm_conv_fast_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_fut, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_ref_conv_fast_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_ref, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_arm_conv_partial_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_fut, first_index, num_points)
+
+#define CONV_ref_conv_partial_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_ref, first_index, num_points)
+
+#define CONV_arm_conv_partial_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_fut, first_index, num_points)
+
+#define CONV_ref_conv_partial_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_ref, first_index, num_points)
+
+#define CONV_arm_conv_partial_opt_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_fut, first_index, num_points, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_ref_conv_partial_opt_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_ref, first_index, num_points, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_arm_conv_partial_fast_opt_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_fut, first_index, num_points, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CONV_ref_conv_partial_fast_opt_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len, \
+ first_index, num_points) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*)filtering_output_ref, first_index, num_points, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Inputs */
+/*--------------------------------------------------------------------------------*/
+
+/* The following symbols alias the filtering_q31_inputs array:
+ *
+ * - filtering_q15_inputs
+ * - filtering_q7_inputs
+ *
+ * The aliasing conflicts with the instantiation of #ARR_DESC_t structs.
+ *
+ * These macro-level aliases allow the #CONV_DEFINE_RAND_INPUT_ARR_DESCS() macro
+ * to correctly select the filtering_q31_input or filtering_f32_input array,
+ * within a template, by type_suffix.
+ *
+ */
+#define CONV_f32_INPUTS filtering_f32_inputs
+#define CONV_q31_INPUTS filtering_q31_inputs
+#define CONV_q15_INPUTS filtering_q31_inputs
+#define CONV_q7_INPUTS filtering_q31_inputs
+
+/**
+ * Defines #ARR_DESC_t objects that wrap existing, type-specific, common
+ * inputs.
+ */
+#define CONV_DEFINE_RAND_INPUT_ARR_DESCS(type_suffix) \
+ ARR_DESC_DEFINE_USING_ARR( \
+ TYPE_FROM_ABBREV(type_suffix), \
+ conv_input_rand1_##type_suffix, \
+ CONV_##type_suffix##_INPUTS, \
+ 0, \
+ CONV_MAX_INPUT_ELTS); \
+ \
+ ARR_DESC_DEFINE_USING_ARR( \
+ TYPE_FROM_ABBREV(type_suffix), \
+ conv_input_rand2_##type_suffix, \
+ CONV_##type_suffix##_INPUTS, \
+ 1, \
+ CONV_MAX_INPUT_ELTS) /* Note the lacking semicolon */
+
+CONV_DEFINE_RAND_INPUT_ARR_DESCS(f32);
+CONV_DEFINE_RAND_INPUT_ARR_DESCS(q31);
+CONV_DEFINE_RAND_INPUT_ARR_DESCS(q15);
+CONV_DEFINE_RAND_INPUT_ARR_DESCS(q7);
+ARR_DESC_DEFINE(float32_t, conv_input_zeros, CONV_MAX_INPUT_ELTS, CURLY(0));
+
+/**
+ * Define Input #ARR_DESC_t arrays by type suffix.
+ *
+ * Taking inputs in parallel from the 'a' and 'b' arrays yields the following
+ * test cases (star is convolution):
+ *
+ * - zero_array * zero_array
+ * - zero_array * random_array
+ * - random_array * zero_array
+ * - random_array * different_random_arary
+ */
+#define CONV_DEFINE_ALL_INPUTS(type_suffix) \
+ ARR_DESC_DEFINE(ARR_DESC_t *, \
+ conv_##type_suffix##_a_inputs, \
+ 4, \
+ CURLY( \
+ &conv_input_zeros, \
+ &conv_input_zeros, \
+ &conv_input_rand1_##type_suffix, \
+ &conv_input_rand1_##type_suffix \
+ )); \
+ ARR_DESC_DEFINE(ARR_DESC_t *, \
+ conv_##type_suffix##_b_inputs, \
+ 4, \
+ CURLY( \
+ &conv_input_zeros, \
+ &conv_input_rand1_##type_suffix, \
+ &conv_input_zeros, \
+ &conv_input_rand2_##type_suffix \
+ )) /* Note the lacking semicolon */
+
+CONV_DEFINE_ALL_INPUTS(f32);
+CONV_DEFINE_ALL_INPUTS(q31);
+CONV_DEFINE_ALL_INPUTS(q15);
+CONV_DEFINE_ALL_INPUTS(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Lengths */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ * The conv_lens_a and conv_lens_b #ARR_DESC_t objects are accessed in parallel
+ * to provide convolution-length pairs. Taken in parallel they provide the
+ * following cases:
+ *
+ * - 1 * 1 : Shortest convolution possible.
+ * - 1 * 2 : Short convolution , one side is degenerate .
+ * - 17 * 1 : Medium convolution , one side is degenerate .
+ * - 15 * MAX : Longest convolution , one side is degenerate .
+ * MAX * MAX : Longest convolution.
+ */
+ARR_DESC_DEFINE(uint32_t,
+ conv_lens_a,
+ 5,
+ CURLY(
+ 1,
+ 1,
+ 17,
+ 15,
+ CONV_MAX_INPUT_ELTS
+ ));
+
+ARR_DESC_DEFINE(uint32_t,
+ conv_lens_b,
+ 5,
+ CURLY(
+ 1,
+ 2,
+ 1,
+ CONV_MAX_INPUT_ELTS,
+ CONV_MAX_INPUT_ELTS
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* Partial Indexing */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(uint32_t,
+ first_index_arr_desc,
+ 4,
+ CURLY(
+ 0,
+ 1,
+ CONV_MAX_INPUT_ELTS / 2,
+ CONV_MAX_INPUT_ELTS
+ ));
+
+ARR_DESC_DEFINE(uint32_t,
+ num_points_arr_desc,
+ 3,
+ CURLY(
+ 1,
+ CONV_MAX_OUTPUT_ELTS / 2,
+ CONV_MAX_OUTPUT_ELTS
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Tests */
+/*--------------------------------------------------------------------------------*/
+
+#define CONV_TEST_TEMPLATE(fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ suffix, output_type) \
+ JTEST_DEFINE_TEST(fut##_tests, fut) \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, conv_##suffix##_a_inputs \
+ , \
+ void * input_a_ptr = input_ptr->data_ptr; \
+ void * input_b_ptr = ARR_DESC_ELT( \
+ ARR_DESC_t *, input_idx, \
+ &(conv_##suffix##_b_inputs))->data_ptr; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ conv_len_idx, uint32_t, conv_len_a, conv_lens_a \
+ , \
+ uint32_t conv_len_b = ARR_DESC_ELT( \
+ uint32_t, conv_len_idx, &(conv_lens_b)); \
+ \
+ JTEST_DUMP_STRF("Input A Length: %d\n" \
+ "Input B Length: %d\n", \
+ (int)conv_len_a, \
+ (int)conv_len_b); \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_a_ptr, conv_len_a, input_b_ptr, conv_len_b), \
+ ref, ref_arg_interface( \
+ input_a_ptr, conv_len_a, input_b_ptr, conv_len_b)); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ conv_len_a + conv_len_b - 1, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ } \
+ \
+
+#define CONV_PARTIAL_TEST_TEMPLATE(fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ suffix, output_type) \
+ JTEST_DEFINE_TEST(fut##_tests, fut) \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, conv_##suffix##_a_inputs \
+ , \
+ void * input_a_ptr = input_ptr->data_ptr; \
+ void * input_b_ptr = ARR_DESC_ELT( \
+ ARR_DESC_t *, input_idx, \
+ &(conv_##suffix##_b_inputs))->data_ptr; \
+ TEMPLATE_DO_ARR_DESC( \
+ conv_len_idx, uint32_t, conv_len_a, conv_lens_a \
+ , \
+ uint32_t conv_len_b = ARR_DESC_ELT( \
+ uint32_t, conv_len_idx, &(conv_lens_b)); \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ first_index_idx, uint32_t, first_index, \
+ first_index_arr_desc \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ num_points_idx, uint32_t, num_points, \
+ num_points_arr_desc \
+ , \
+ if (CONV_TEST_VALID_PARTIAL_PARAMS( \
+ conv_len_a, conv_len_b, \
+ first_index, num_points)) \
+ { \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Input A Length: %d\n" \
+ "Input B Length: %d\n" \
+ "First Sample Index: %d\n" \
+ "Number of Output Points: %d\n", \
+ (int)conv_len_a, \
+ (int)conv_len_b, \
+ (int)first_index, \
+ (int)num_points); \
+ \
+ memset(filtering_output_ref,0, \
+ (2*CONV_MAX_INPUT_ELTS)*sizeof(output_type)); \
+ memset(filtering_output_fut,0, \
+ (2*CONV_MAX_INPUT_ELTS)*sizeof(output_type)); \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_a_ptr, conv_len_a, \
+ input_b_ptr, conv_len_b, \
+ first_index, num_points), \
+ ref, ref_arg_interface( \
+ input_a_ptr, conv_len_a, \
+ input_b_ptr, conv_len_b, \
+ first_index, num_points)); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE_OFFSET( \
+ first_index, \
+ num_points, \
+ output_type); \
+ } else { \
+ /* FUT should return ARM_MATH_ARGUMENT_ERROR*/ \
+ /* if first_index and num_points don't make */ \
+ /* sense*/ \
+ \
+ arm_status conv_test_retval; \
+ TEST_CALL_FUT( \
+ conv_test_retval = fut, \
+ fut_arg_interface( \
+ input_a_ptr, conv_len_a, \
+ input_b_ptr, conv_len_b, \
+ first_index, num_points)); \
+ \
+ if (conv_test_retval != ARM_MATH_ARGUMENT_ERROR) { \
+ JTEST_DUMP_STR("FUT failed to raise error."); \
+ /* return JTEST_TEST_FAILED; */ \
+ } \
+ })))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define CONV_DEFINE_TEST(fn_name, suffix, output_type, test_template) \
+ test_template( \
+ arm_##fn_name##_##suffix, \
+ CONV_arm_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ CONV_ref_##fn_name##_INPUT_INTERFACE, \
+ suffix, \
+ output_type \
+ ) /* Note the lacking semicolon*/
+
+/* Tests on functions without partial outputs */
+CONV_DEFINE_TEST(conv , f32, float32_t, CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv , q31, q31_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv , q15, q15_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv , q7 , q7_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_opt , q15, q15_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_opt , q7 , q7_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_fast , q31, q31_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_fast , q15, q15_t , CONV_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_fast_opt , q15, q15_t , CONV_TEST_TEMPLATE);
+
+/* Tests on functions with partial outputs */
+CONV_DEFINE_TEST(conv_partial , f32, float32_t, CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial , q31, q31_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial , q15, q15_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial , q7 , q7_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial_fast , q31, q31_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial_fast , q15, q15_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial_fast_opt , q15, q15_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial_opt , q15, q15_t , CONV_PARTIAL_TEST_TEMPLATE);
+CONV_DEFINE_TEST(conv_partial_opt , q7 , q7_t , CONV_PARTIAL_TEST_TEMPLATE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(conv_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_conv_f32_tests);
+ JTEST_TEST_CALL(arm_conv_q31_tests);
+ JTEST_TEST_CALL(arm_conv_q15_tests);
+ JTEST_TEST_CALL(arm_conv_q7_tests);
+
+ JTEST_TEST_CALL(arm_conv_opt_q15_tests);
+ JTEST_TEST_CALL(arm_conv_opt_q7_tests);
+
+ JTEST_TEST_CALL(arm_conv_fast_q31_tests);
+ JTEST_TEST_CALL(arm_conv_fast_q15_tests);
+
+ JTEST_TEST_CALL(arm_conv_fast_opt_q15_tests);
+
+ JTEST_TEST_CALL(arm_conv_partial_f32_tests);
+ JTEST_TEST_CALL(arm_conv_partial_q31_tests);
+ JTEST_TEST_CALL(arm_conv_partial_q15_tests);
+ JTEST_TEST_CALL(arm_conv_partial_q7_tests);
+
+ JTEST_TEST_CALL(arm_conv_partial_fast_q31_tests);
+ JTEST_TEST_CALL(arm_conv_partial_fast_q15_tests);
+
+ JTEST_TEST_CALL(arm_conv_partial_fast_opt_q15_tests);
+
+ JTEST_TEST_CALL(arm_conv_partial_opt_q15_tests);
+ JTEST_TEST_CALL(arm_conv_partial_opt_q7_tests);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/correlate_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/correlate_tests.c new file mode 100644 index 0000000..689b075 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/correlate_tests.c @@ -0,0 +1,310 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Header Stuff */
+/*--------------------------------------------------------------------------------*/
+
+#define CORRELATE_MAX_INPUT_ELTS 32
+#define CORRELATE_MAX_OUTPUT_ELTS (CORRELATE_MAX_INPUT_ELTS * 2)
+
+/*--------------------------------------------------------------------------------*/
+/* Input Interfaces */
+/*--------------------------------------------------------------------------------*/
+/*
+ * General:
+ * Input interfaces provide inputs to functions inside test templates. They
+ * ONLY provide the inputs. The output variables should be hard coded.
+ *
+ * The input interfaces must have the following format:
+ *
+ * ARM_xxx_INPUT_INTERFACE() or
+ * REF_xxx_INPUT_INTERFACE()
+ *
+ * The xxx must be lowercase, and is intended to be the indentifying substring
+ * in the function's name. Acceptable values are 'sub' or 'add' from the
+ * functions arm_add_q31.
+ */
+
+#define CORRELATE_arm_correlate_INPUT_INTERFACE(input_a, input_a_len, input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_fut)
+
+#define CORRELATE_ref_correlate_INPUT_INTERFACE(input_a, input_a_len, input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_ref)
+
+#define CORRELATE_arm_correlate_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_fut, \
+ (void*) filtering_scratch)
+
+#define CORRELATE_arm_correlate_opt_q7_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_fut, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CORRELATE_ref_correlate_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_ref, \
+ (void*) filtering_scratch)
+
+#define CORRELATE_ref_correlate_opt_q7_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_ref, \
+ (void*) filtering_scratch, \
+ (void*) filtering_scratch2)
+
+#define CORRELATE_arm_correlate_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_fut)
+
+#define CORRELATE_ref_correlate_fast_INPUT_INTERFACE(input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, (void*)filtering_output_ref)
+
+#define CORRELATE_arm_correlate_fast_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_fut, \
+ (void*) filtering_scratch)
+
+#define CORRELATE_ref_correlate_fast_opt_INPUT_INTERFACE( \
+ input_a, input_a_len, \
+ input_b, input_b_len) \
+ PAREN(input_a, input_a_len, input_b, input_b_len, \
+ (void*) filtering_output_ref, \
+ (void*) filtering_scratch)
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Inputs */
+/*--------------------------------------------------------------------------------*/
+
+/* The following symbols alias the filtering_q31_inputs array:
+ *
+ * - filtering_q15_inputs
+ * - filtering_q7_inputs
+ *
+ * The aliasing conflicts with the instantiation of #ARR_DESC_t structs.
+ *
+ * These macro-level aliases allow the #CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS() macro
+ * to correctly select the filtering_q31_input or filtering_f32_input array,
+ * within a template, by type_suffix.
+ *
+ */
+#define CORRELATE_f32_INPUTS filtering_f32_inputs
+#define CORRELATE_q31_INPUTS filtering_q31_inputs
+#define CORRELATE_q15_INPUTS filtering_q31_inputs
+#define CORRELATE_q7_INPUTS filtering_q31_inputs
+
+/**
+ * Defines #ARR_DESC_t objects that wrap existing, type-specific, common
+ * inputs.
+ */
+#define CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS(type_suffix) \
+ ARR_DESC_DEFINE_USING_ARR( \
+ TYPE_FROM_ABBREV(type_suffix), \
+ correlate_input_rand1_##type_suffix, \
+ CORRELATE_##type_suffix##_INPUTS, \
+ 0, \
+ CORRELATE_MAX_INPUT_ELTS); \
+ \
+ ARR_DESC_DEFINE_USING_ARR( \
+ TYPE_FROM_ABBREV(type_suffix), \
+ correlate_input_rand2_##type_suffix, \
+ CORRELATE_##type_suffix##_INPUTS, \
+ 1, \
+ CORRELATE_MAX_INPUT_ELTS) /* Note the lacking semicolon */
+
+CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS(f32);
+CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS(q31);
+CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS(q15);
+CORRELATE_DEFINE_RAND_INPUT_ARR_DESCS(q7);
+ARR_DESC_DEFINE(float32_t, correlate_input_zeros, CORRELATE_MAX_INPUT_ELTS, CURLY(0));
+
+/**
+ * Define Input #ARR_DESC_t arrays by type suffix.
+ *
+ * Taking inputs in parallel from the 'a' and 'b' arrays yields the following
+ * test cases (star is correlate):
+ *
+ * - zero_array * zero_array
+ * - zero_array * random_array
+ * - random_array * zero_array
+ * - random_array * different_random_arary
+ */
+#define CORRELATE_DEFINE_ALL_INPUTS(type_suffix) \
+ ARR_DESC_DEFINE(ARR_DESC_t *, \
+ correlate_##type_suffix##_a_inputs, \
+ 4, \
+ CURLY( \
+ &correlate_input_zeros, \
+ &correlate_input_zeros, \
+ &correlate_input_rand1_##type_suffix, \
+ &correlate_input_rand1_##type_suffix \
+ )); \
+ ARR_DESC_DEFINE(ARR_DESC_t *, \
+ correlate_##type_suffix##_b_inputs, \
+ 4, \
+ CURLY( \
+ &correlate_input_zeros, \
+ &correlate_input_rand1_##type_suffix, \
+ &correlate_input_zeros, \
+ &correlate_input_rand2_##type_suffix \
+ )) /* Note the lacking semicolon */
+
+CORRELATE_DEFINE_ALL_INPUTS(f32);
+CORRELATE_DEFINE_ALL_INPUTS(q31);
+CORRELATE_DEFINE_ALL_INPUTS(q15);
+CORRELATE_DEFINE_ALL_INPUTS(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Lengths */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ * The correlate_lens_a and correlate_lens_b #ARR_DESC_t objects are accessed in parallel
+ * to provide correlate-length pairs. Taken in parallel they provide the
+ * following cases:
+ *
+ * - 1 * 1 : Shortest correlate possible.
+ * - 1 * 2 : Short correlate , one side is degenerate.
+ * - 17 * 1 : Medium correlate, one side is degenerate.
+ * - 15 * MAX : Longest correlate.
+ * MAX * MAX : Longest correlate.
+ */
+ARR_DESC_DEFINE(uint32_t,
+ correlate_lens_a,
+ 5,
+ CURLY(
+ 1,
+ 1,
+ 17,
+ 15,
+ CORRELATE_MAX_INPUT_ELTS
+ ));
+
+ARR_DESC_DEFINE(uint32_t,
+ correlate_lens_b,
+ 5,
+ CURLY(
+ 1,
+ 2,
+ 1,
+ CORRELATE_MAX_INPUT_ELTS,
+ CORRELATE_MAX_INPUT_ELTS
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* Convolution Tests */
+/*--------------------------------------------------------------------------------*/
+
+#define CORRELATE_TEST_TEMPLATE(fut, fut_arg_interface, \
+ ref, ref_arg_interface, \
+ suffix, output_type) \
+ JTEST_DEFINE_TEST(fut##_tests, fut) \
+ { \
+ TEMPLATE_DO_ARR_DESC( \
+ input_idx, ARR_DESC_t *, input_ptr, correlate_##suffix##_a_inputs \
+ , \
+ void * input_a_ptr = input_ptr->data_ptr; \
+ void * input_b_ptr = ARR_DESC_ELT( \
+ ARR_DESC_t *, input_idx, \
+ &(correlate_##suffix##_b_inputs))->data_ptr; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ correlate_len_idx, uint32_t, correlate_len_a, correlate_lens_a \
+ , \
+ uint32_t correlate_len_b = ARR_DESC_ELT( \
+ uint32_t, correlate_len_idx, &(correlate_lens_b)); \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Input A Length: %d\n" \
+ "Input B Length: %d\n", \
+ (int)correlate_len_a, \
+ (int)correlate_len_b); \
+ \
+ memset(filtering_output_ref,0, \
+ (2*CORRELATE_MAX_INPUT_ELTS)*sizeof(output_type)); \
+ memset(filtering_output_fut,0, \
+ (2*CORRELATE_MAX_INPUT_ELTS)*sizeof(output_type)); \
+ \
+ TEST_CALL_FUT_AND_REF( \
+ fut, fut_arg_interface( \
+ input_a_ptr, correlate_len_a, input_b_ptr, correlate_len_b), \
+ ref, ref_arg_interface( \
+ input_a_ptr, correlate_len_a, input_b_ptr, correlate_len_b)); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ correlate_len_a + correlate_len_b - 2, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define CORRELATE_DEFINE_TEST(fn_name, suffix, output_type, test_template) \
+ test_template( \
+ arm_##fn_name##_##suffix, \
+ CORRELATE_arm_##fn_name##_INPUT_INTERFACE, \
+ ref_##fn_name##_##suffix, \
+ CORRELATE_ref_##fn_name##_INPUT_INTERFACE, \
+ suffix, \
+ output_type \
+ ) /* Note the lacking semicolon*/
+
+/* Tests on functions without partial outputs */
+CORRELATE_DEFINE_TEST(correlate , f32, float32_t, CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate , q31, q31_t , CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate , q15, q15_t , CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate , q7 , q7_t , CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate_opt , q15, q15_t , CORRELATE_TEST_TEMPLATE);
+
+CORRELATE_TEST_TEMPLATE(
+ arm_correlate_opt_q7,
+ CORRELATE_arm_correlate_opt_q7_INPUT_INTERFACE,
+ ref_correlate_opt_q7,
+ CORRELATE_ref_correlate_opt_q7_INPUT_INTERFACE,
+ q7,
+ q7_t
+ );
+
+CORRELATE_DEFINE_TEST(correlate_fast , q31, q31_t , CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate_fast , q15, q15_t , CORRELATE_TEST_TEMPLATE);
+CORRELATE_DEFINE_TEST(correlate_fast_opt , q15, q15_t , CORRELATE_TEST_TEMPLATE);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(correlate_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_correlate_f32_tests);
+ JTEST_TEST_CALL(arm_correlate_q31_tests);
+ JTEST_TEST_CALL(arm_correlate_q15_tests);
+ JTEST_TEST_CALL(arm_correlate_q7_tests);
+
+ JTEST_TEST_CALL(arm_correlate_opt_q15_tests);
+ JTEST_TEST_CALL(arm_correlate_opt_q7_tests);
+
+ JTEST_TEST_CALL(arm_correlate_fast_q31_tests);
+ JTEST_TEST_CALL(arm_correlate_fast_q15_tests);
+
+ JTEST_TEST_CALL(arm_correlate_fast_opt_q15_tests);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_common_data.c new file mode 100644 index 0000000..0bea4de --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_common_data.c @@ -0,0 +1,757 @@ +#include "filtering_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+//must be max(LMS_MAX_BLOCKSIZE*2, FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_L)
+float32_t filtering_output_fut[LMS_MAX_BLOCKSIZE*2] = {0};
+float32_t filtering_output_ref[LMS_MAX_BLOCKSIZE*2] = {0};
+float32_t filtering_output_f32_fut[LMS_MAX_BLOCKSIZE*2] = {0};
+float32_t filtering_output_f32_ref[LMS_MAX_BLOCKSIZE*2] = {0};
+float32_t filtering_input_lms[LMS_MAX_BLOCKSIZE*2] = {0};
+__ALIGNED(8) float32_t filtering_pState[LMS_MAX_BLOCKSIZE + FILTERING_MAX_NUMTAPS] = {0};
+float32_t filtering_scratch[FILTERING_MAX_BLOCKSIZE * 3] = {0};
+float32_t filtering_scratch2[FILTERING_MAX_BLOCKSIZE * 3] = {0};
+float32_t filtering_coeffs_lms[FILTERING_MAX_NUMTAPS];
+
+const q31_t filtering_q31_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS] =
+{
+ 0xC14A5524, 0xCCABDA17, 0xAD6F5B56, 0xFDAFCE3B, 0xA9B226EB,
+ 0x41F6F6A, 0xA5CE38BF, 0x3A978AFA, 0xBA44B82A, 0x855C0F8,
+ 0x3D060524, 0x93D5E570, 0x97D7791D, 0xFFE0C38C, 0x26749841,
+ 0xC0A6EE54, 0x218EC386, 0x39FF3726, 0x8DC1F7CA, 0x702F2CF5,
+ 0xC1142FF1, 0xEC1476AB, 0x15F640DD, 0xE62CCE49, 0x3805DE7E,
+ 0xF70871FE, 0xCF8BD360, 0x8D19A8A0, 0xD764F821, 0xA58558CF,
+ 0x8C0CE04D, 0x50A46C19, 0x66D2370D, 0x50FA359A, 0xB646AE24,
+ 0x6CE00F5C, 0xE6D48948, 0xB55BD831, 0x3B72950A, 0x9EB69530,
+ 0x73394127, 0x773FA6F4, 0x9805A980, 0x838DE587, 0x9CF597F4,
+ 0xA2AD1691, 0xFA81A473, 0x7CDC7D7F, 0x4A5190D0, 0xED895BB9,
+ 0x8FD60F35, 0x1A21D530, 0xA0EB6DDA, 0xBDE6A516, 0x2501A3E1,
+ 0x5ED893C8, 0xE1E175B1, 0xACBBB2F3, 0xED350907, 0xDB140D7E,
+ 0xEEAE272D, 0xBE229841, 0xC18BFB88, 0xA6BB9B80, 0xBCF090E4,
+ 0x24DB166C, 0xF9AB7E42, 0x62DF28D1, 0xC7004665, 0xE3F56FC6,
+ 0x419E0C75, 0x46BE9F38, 0x2432B9B2, 0x758D83E0, 0xDCE12926,
+ 0x3F57CB74, 0x1F4458E2, 0xF1DD639, 0x83A1FB49, 0x173AFC76,
+ 0x86EF7531, 0x48D32F34, 0x7D3E3063, 0x8F2FB549, 0x5C314C9,
+ 0x18CBEB6D, 0xA6F8B697, 0x447B9E9C, 0x2E32BA33, 0xD074D715,
+ 0x81ACD746, 0xE55A4E04, 0x4891860F, 0x1DA3EB4F, 0xE0E6A27F,
+ 0x20BFDEB4, 0xD0B3A25B, 0x40C10544, 0xC15656C, 0x15405EAE,
+ 0x9858E3E1, 0xA36A9C4E, 0x88BD21F9, 0xAACF7A68, 0x773665E5,
+ 0xCEDFDF66, 0x617A9610, 0x524FC968, 0xC2D086CD, 0x5F008079,
+ 0x24DCA447, 0x6A4F5599, 0xB706CD4A, 0x1DE70608, 0xA33A2EE5,
+ 0x137E488E, 0x98061B7B, 0x4079D69D, 0xA4A897D5, 0xC4CEC8F5,
+ 0xD75F7883, 0x22406802, 0xF1AD70BB, 0x9D4ADD79, 0xBCBC7CE4,
+ 0xB358C0D8, 0x85792E47, 0xA7ADAC05, 0x3D19EEAB, 0x331AC0AF,
+ 0x33035831, 0x13D93987, 0xFC542094, 0x845F317E, 0xDDC4BF8B,
+ 0x1379E50C, 0x5C20193F, 0xFDD58298, 0x9D482B82, 0x4A6BE062,
+ 0xDC8A757B, 0x272917C1, 0x90E1EFBC, 0x355AD882, 0xE6F8EA35,
+ 0x604555A1, 0x7DFFFBB, 0xF58AE216, 0x9A11B463, 0xD3541BAD,
+ 0xA1576756, 0x483BED8D, 0x1F05AFCC, 0xCEA63DFB, 0x55B84677,
+ 0xFB2E04F2, 0x787AF96C, 0x84A12CD3, 0x460A9BD, 0x9DB22DD8,
+ 0x1A8C7F28, 0x861E452E, 0x932D3F78, 0x7652D852, 0x73357BBA,
+ 0xEBBB0A58, 0x62536AFA, 0x3F6B65EF, 0x6DC57B58, 0x9EB798CE,
+ 0xE6B0A740, 0xDFF68B47, 0x3247FB8F, 0xFFF3D302, 0xA9FD3E40,
+ 0x475A43D1, 0x6FF9528A, 0x2018A09D, 0x47E0F9C9, 0x4CF5F6D3,
+ 0x2807CE34, 0xDD6FD8ED, 0x234045D1, 0x51CEB5F9, 0x25297896,
+ 0x6443A0FE, 0x8F4449A9, 0xD4C3E1C6, 0xF01D52F1, 0x4E09C820,
+ 0xF18F0810, 0xE1548689, 0xF9DE5A1F, 0x5286DC23, 0x48AC3A4B,
+ 0xEA0C1BE0, 0xA1B785DB, 0x7086465D, 0x1CC10929, 0x1E1D716E,
+ 0xED231D4C, 0x2049D108, 0xB8FF9971, 0x949CF8D4, 0x441F1E8B,
+ 0xC3D95372, 0x69C324B4, 0xA10BFDC9, 0xC781DE78, 0x82476137,
+ 0xE163DDF, 0x390DEEC2, 0xAF68CE5B, 0x8E680ABD, 0x8223A615,
+ 0x92593380, 0x7B1465FE, 0x865AE957, 0x930F53EB, 0xED772EF7,
+ 0x10E916B6, 0xE3BCFA68, 0x2ACB80BB, 0xE51C5590, 0x994714B5,
+ 0xF30984EE, 0x59BBE1B4, 0xB4867DBC, 0xB91C706C, 0xBC16C218,
+ 0xA8931CD0, 0x129A66AB, 0x13171F4D, 0x62882872, 0x4B167FD4,
+ 0xE6902F4C, 0xFA794932, 0xD4B152C, 0xB0856EA9, 0x39466D55,
+ 0x3669E451, 0x8F5B9E8C, 0x877A3C6A, 0x51B956B4, 0x367EAD2A,
+ 0x9D2C662A, 0x78FB6880, 0x4E6D40B6, 0x4070EFDC, 0x4DF9679C,
+ 0x20306EDB, 0xE381AAE7, 0xA55DA748, 0x9B8B617B, 0x3E036FAD,
+ 0x84E4C4A7, 0xD5A3F517, 0x669BA988, 0x98FDDE8C, 0x67BD85CE,
+ 0x34BBB46C, 0x76994800, 0x85B9D8B6, 0x6DFA2FEF, 0x205DB5C,
+ 0x9F843C4C, 0x72721B52, 0x73EF6B86, 0x5FB98B61, 0xC323DDAC,
+ 0x31D424B4, 0xF68C0D7E, 0x162FAF9D, 0x7B2A7A99, 0xF9392693,
+ 0xC42D12C0, 0x8692A73E, 0xD9A1EE80, 0xDD956856, 0x44E7BDAC,
+ 0x8D874532, 0x5F5C9DD0, 0x5D167858, 0x8559FEA2, 0x9D821476,
+ 0xD9654ED2, 0x594C0DC7, 0x1A87B506, 0x3F693200, 0x7A651AB5,
+ 0xA0CCBC8A, 0x9F9E662C, 0x78EF631, 0x2A09DA0, 0xB088C72F,
+ 0x92EE0D42, 0x360DCD5F, 0xF333FE48, 0x8D63CC06, 0x233A8ACB,
+ 0x706651ED, 0x7AA5C079, 0x262239D1, 0x3EBBEBB6, 0xA25A4F3D,
+ 0x32581A06, 0x6E6FD780, 0x5773F7C7, 0x75ED1DDC, 0x90DF2D15,
+ 0xBC79A9BC, 0xB7175917, 0x354E381C, 0x762AADD7, 0xF643DAC1,
+ 0xF3BBF49E, 0xD2FECE7E, 0x6C8140F4, 0xD7694875, 0x92D30822,
+ 0xC742A7CF, 0xB792ED98, 0x121CFE24, 0xA04E1EE7, 0x58CE268,
+ 0x215A080, 0x316CB323, 0xFAB14A31, 0xE1C13C03, 0xFD8EF4F1,
+ 0xF3F446D0, 0x6C6CEA0A, 0xBBFDF9FB, 0x67242969, 0xBE55A4EB,
+ 0x8FF5534, 0x52F0DF1C, 0x9710ADE3, 0xD40F4A21, 0x7984E8E7,
+ 0x419545EB, 0x993F7880, 0xAB246B20, 0x408AABC4, 0xCBF6EA49,
+ 0xC0894C55, 0x4CAA6398, 0xA47856E9, 0xAF2AE47D, 0x22F55D33,
+ 0xF0D37915, 0xD0634C72, 0xD983671, 0x2BCC5AF8, 0x9A77D48,
+ 0xC11B5CFA, 0xF107CD7E, 0x3A6B3593, 0xE1425F05, 0x6271812A,
+ 0x5B838310, 0xBD8418CA, 0x10A58792, 0x239F7137, 0xA13D5071,
+ 0x7F9930D4, 0xA462664F, 0x54180F8E, 0x291585BA, 0xE586B87A,
+ 0x144B2C12, 0x98E425C7, 0xBAA4B373, 0x18F0D03C, 0x99462AC0,
+ 0xD8B4D2EF, 0x72473895, 0xA6BF5435, 0xEDAD53B, 0xE0912FA6,
+ 0x5C33F331, 0x3D93CD7, 0x4D03D752, 0x20699929, 0xB89962F9,
+ 0x36E781E9, 0xF58B642C, 0x5FCA69E3, 0x5960A7F4, 0xAD5AAFD0,
+ 0xDF18324A, 0x3DB1E5AA, 0x76BA3876, 0x1BC29AF6, 0xBCC18841,
+ 0x73A60174, 0x625BFF58, 0x67C57724, 0x4458E53C, 0xE157B095,
+ 0x2B370837, 0x83DF6CE3, 0xDD08EEFA, 0x3F52A7C2, 0x191B4785,
+ 0x60843D82, 0xB0DE11F1, 0x105EA26C, 0x6E1C7AA2, 0x47AADD14,
+ 0xB6676D03, 0x3B8D4DF6, 0x737A694, 0x409521DC, 0x744206A,
+ 0xC722023F, 0x2BE4EAD5, 0x63E11D76, 0xCA4A09AB, 0x5CF2D2B9,
+ 0x31586916, 0xCDFD7D84, 0xB203F634, 0xAD7329D4, 0xC524582F,
+ 0x2E53E6C1, 0xBB0E019B, 0xB8538C6A, 0x6A2542D, 0x8A6A00E5,
+ 0x119725CC, 0x5406D347, 0x1B6FFAF1, 0xECCF71F1, 0x981117F2,
+ 0x7167CA76, 0x74F4B880, 0x77A55F47, 0x59EADB62, 0x4A331D95,
+ 0xBCBBA76F, 0xA45C4D50, 0xC718D5, 0x87CE05D1, 0x60D47AD5,
+ 0xA5CA9C40, 0xB0061766, 0xE69B39DF, 0xBD5F1320, 0x9930EAD3,
+ 0xA8B38325, 0x8DD090F, 0x6A6EEF37, 0x2DF16F66, 0xAB514C7E,
+ 0x31109C58, 0xFD48C7FC, 0x515341CA, 0x77AB8EA6, 0x41328DAF,
+ 0xBAF8D31E, 0xA4B31611, 0xED37F331, 0x7A832A22, 0xA22591C7,
+ 0x722D1F89, 0x3B19CF18, 0x261B8A4D, 0xC3F6F6DB, 0xCF8CED61,
+ 0x990FA250, 0xA02E72A9, 0x560DCEA2, 0xB08E67B4, 0x3674E663,
+ 0x97CC3852, 0xA7EB2EAC, 0xFFDE0AA8, 0xA64719A, 0x23269EDD,
+ 0x3C0B339E, 0x86284D40, 0x48D82ECB, 0xA4D4CCF8, 0x43631B91,
+ 0x4BF0C248, 0xB6497B9B, 0x6827BC58, 0xE30B7AF9, 0xA0CCBF26,
+ 0x6C3B7B71, 0xD744B3ED, 0xFA25D2F6, 0x4CDE642D, 0xD65B8142,
+ 0xA6F9207F, 0xE7A207BE, 0xDB506684, 0x44DA4780, 0x9175EA0C,
+ 0x156104AF, 0x4155E1B0, 0x6E3A6886, 0x9DBA1EA2, 0x5423D9C8,
+ 0xCC024E22, 0x758F852A, 0x1DD6395, 0x2D19CBAD, 0xE164F5A1,
+ 0xC2084602, 0x89C274AD, 0x13CB5562, 0xD7FE2D5B, 0xE07A4EE5,
+ 0x1672BA91, 0x4F624CCF, 0x2E5EA4A3, 0x28FEEFAF, 0xBDDA6EF4,
+ 0x32AFD40C, 0x99A5FB3B, 0xDD1D73A3, 0xA342CB3E, 0xA78445F5,
+ 0x53979C3B, 0x427D7943, 0x5221B58C, 0xA6CE9A5E, 0xFB50ECA4,
+ 0xBB86E36E, 0x60839F6D, 0xC5E1C2F3, 0xA1B7FB04, 0xFBB65E0C,
+ 0x78B80F5E, 0xFD8D972B, 0x3BF3BA90, 0x2D572D9, 0x2B5BC920,
+ 0xB6A0DE01, 0xD274D306, 0xC7C6C855, 0x9CAA669B, 0xB04AA641,
+ 0x4D6B1760, 0x3E17ED79, 0xD23241B0, 0xA4A6F957, 0xCBDE76AF,
+ 0x4E5F9493, 0x4C215DA5, 0x33A052B, 0x1A4D80C2, 0x40AEEBCA,
+ 0x390D106B, 0xE9E8E018, 0x5AF3D6CF, 0xE35E1D4, 0xC4FB1C6,
+ 0x14B6299B, 0x8D2E25F0, 0xCCBF932A, 0xC5AC18B6, 0x2227567D,
+ 0x86B5CE2F, 0x26344534, 0x22C515EC, 0x2442B70D, 0xEC3721C6,
+ 0x34EF687D, 0x9C06323A, 0xEAF3EA60, 0x60396F52, 0xEAE78AA1,
+ 0xC9D06CBC, 0x6F95F6C8, 0x584CC258, 0xBA9A27BB, 0x66DF8D47,
+ 0x9D4804EA, 0x57DD9E67, 0xF89C7895, 0xF5336111, 0x25C122C8,
+ 0x62742114, 0xCFBF6D26, 0xBF9F6482, 0xE6F02CD9, 0x11083202,
+ 0xC99E2618, 0x7EBC9351, 0x440112F1, 0xC9DFFBC1, 0x3BF4DC25,
+ 0xB1BA7FA0, 0x61AF9AED, 0x6B1F7D29, 0xAD865294, 0xE3E01129,
+ 0x7E9E77A5, 0x100435D7, 0x9FE3A71, 0x88597C81, 0x722849FA,
+ 0x31C5A0AF, 0xFBA178DC, 0x7F102D31, 0x5CA07864, 0x950E6F98,
+ 0x82C34882, 0x5D041F11, 0x8C613C57, 0xD398CFD1, 0x426F38AD,
+ 0x5599AB1D, 0xFAFA078D, 0xAB25B413, 0xD94B32CF, 0xB288FE38,
+ 0x2893BB46, 0x9A0B4168, 0xA91BCA94, 0x653A5E8D, 0x2174EBBE,
+ 0xDEFE6415, 0x30DA429C, 0xD0C5E40C, 0xB4719AA4, 0xD29CE7A6,
+ 0x905957CD, 0xCD287499, 0x83CA0AA7, 0xA8385832, 0x25A0CA02,
+ 0xC20D47A4, 0xB562F556, 0x4BC19E4C, 0xD9E215C7, 0x27E838B4,
+ 0xC58612F4, 0xA2827F6F, 0xC49DCDBA, 0x679B7362, 0x4E495845,
+ 0xCFD2F0D1, 0x395E76A0, 0x375A655E, 0x92E2058F, 0x73F9F0CA,
+ 0x61EFF3B3, 0x51FFD362, 0xE7410345, 0x7FDA8B3B, 0xA219E2E8,
+ 0x17ABE543, 0x26557412, 0x4B30084D, 0xA68E191D, 0xFE0D93DF,
+ 0x73EF127D, 0x4DECDDB1, 0x77FAF45F, 0xD6002898, 0x92DD0A40,
+ 0x157F6DDF, 0xC2A55F8E, 0x4359F924, 0xFB630C3F, 0x338B6B58,
+ 0xB2945F75, 0x4FA23A0E, 0x836EB8C0, 0xB3B18FD, 0x86114337,
+ 0x24668ACB, 0x99BB82F0, 0x924C8A47, 0xBA959701, 0x81155ABF,
+ 0x8C612D71, 0x36074CA7, 0xD1668C41, 0xE35F58C7, 0x7FC2802D,
+ 0x8E6A7CF3, 0x65B07D07, 0x815F6A6B, 0x791BF0DD, 0x6E47D719,
+ 0xC24394C7, 0xE84A6EB, 0xF194AFEE, 0x464A2F52, 0x677579FD,
+ 0xEBA775AE, 0x1F6EEFF, 0x9A795237, 0x78D9D45F, 0x9D0B344D,
+ 0xBBD34AB7, 0x2F85B12A, 0x16C5C2AD, 0x3990985D, 0x88DF3351,
+ 0x82811AA5, 0x6D351F41, 0x4066A69D, 0x86B660BF, 0x6EDB4768,
+ 0xDDD78CF0, 0xB5D74F6E, 0xE89E220C, 0x91439687, 0x947CC9C9,
+ 0x3857E2BD, 0x302F8AE4, 0x1DABE7F8, 0x4832D6C9, 0x37D58FCB,
+ 0x4EA8A711, 0xCD7BAC98, 0x19DBF8BC, 0xD8DE8DC2, 0xEAFF7E7B,
+ 0xB7629C93, 0x792C6E19, 0xF7009192, 0xFF88439D, 0x2E196A66,
+ 0xEC71B78C, 0xEAF4BB3A, 0x7C16225E, 0x668F337, 0xCBEE1608,
+ 0x6D5B5552, 0x345DC590, 0x681209CC, 0x7B24A819, 0xD08A1416,
+ 0x99888FE3, 0x9FC7288A, 0x24BD8502, 0xEA1D9678, 0x20EECA0,
+ 0x59BEA057, 0x5ADE91EB, 0xDEA8E49D, 0xFA200E6F, 0x9149C81D,
+ 0xF2281E93, 0x8A5B0451, 0x67312D58, 0xE3B849F1, 0xD2217960,
+ 0x7CDF59F3, 0x33C775C0, 0x9EBA8799, 0x7DF9506, 0xB4E96110,
+ 0xB8FCF3E3, 0xDEA059B2, 0x8229B6EA, 0x316486F6, 0x43919185,
+ 0x6C0D90F3, 0x1C6F3DF8, 0x38DB92A9, 0x5CD41244, 0x2C9F0A7B,
+ 0xDF4A315F, 0xF7CE9C66, 0x4C800860, 0x318D53E0, 0xF105C20D,
+ 0xD753E1F2, 0x750810BA, 0xA17ECCA5, 0x2010140, 0x4D884763,
+ 0xC2BB0DA7, 0xB2D5BA74, 0x141CECD4, 0x887FDFC3, 0xC64B53,
+ 0x2D2A85F6, 0x15532B45, 0x5D5CBCE1, 0xBEB9A16A, 0xA214611B,
+ 0x9FC5AC5F, 0x11AE5DD7, 0xA0B9A5A9, 0xFC648AF4, 0x740009AC,
+ 0xED0E0321, 0xB8E6A61, 0x8910C544, 0xC74F26C8, 0x9525CCF3,
+ 0xB41AEB59, 0xE61984CE, 0x598B2197, 0xA412E59D, 0xE1976DD4,
+ 0xB29BBE16, 0x88FD9FB0, 0xB04006F3, 0xB45E309, 0xD5CC15F1,
+ 0xD9DAF630, 0xDC809335, 0x803ED52, 0xB537F5A5, 0xA994F6EB,
+ 0xF5288568, 0xF66FD264, 0x2EA2B3A6, 0x647619F3, 0xFFB38C7A,
+ 0x1BC03B9, 0xB6BC3061, 0xBF30596E, 0xBE2AD27B, 0x8AC04220,
+ 0x641979A3, 0x9ECCBB89, 0xA144FBC1, 0x4E8FAE26, 0x8C5A9D90,
+ 0x299ED467, 0xD7C9C7E3, 0x1D4865ED, 0x76F31C3D, 0xCEE81CDF,
+ 0xB479195E, 0x6FFB3AE1, 0xDC8A398, 0x300F7364, 0xC7940AFA,
+ 0x3B85BE3E, 0xD98CC40D, 0xA24A3D89, 0x3A674204, 0x22888A38,
+ 0x2E77F2D, 0xA2841C9C, 0xCF0689C3, 0x9FE98922, 0x89335017,
+ 0x2D6B69A7, 0xFEDB63F9, 0x899AF4EF, 0x9F9F9B40, 0xA4BE97E8,
+ 0xA51DAF7A, 0x16AC50D3, 0xA8D7ED6, 0xED193443, 0x7615EF1B,
+ 0xB0DF6A4E, 0x64FFE794, 0xE3DB2C9A, 0x7435B022, 0x556E825C,
+ 0x23802AF9, 0xC25098A4, 0xE75A18BB, 0x70B2A7B9, 0x7FB81BF,
+ 0x63EF910, 0x6C669591, 0x6574DD2B, 0xCF6E379D, 0xD2B3AFAC,
+ 0x1E6A1101, 0x1DE22385, 0x2338191F, 0xC69704B6, 0xCBABC599,
+ 0x54EB4809, 0x7839BE6D, 0xD50017DD, 0x39B1A0E1, 0x288D52D3,
+ 0x2D52668C, 0x20D22A68, 0x4E1207D1, 0x3FCC0EFE, 0x47F3FE64,
+ 0x25177A90, 0xB4BFDD4D, 0xDA8DBDCE, 0x6F7275A8, 0x6BEAA655,
+ 0xAA1810FC, 0xE4DB593A, 0x8A4D4BC0, 0x2C402E93, 0xF1C0F7F9,
+ 0x6F0CC577, 0x70412414, 0x752F9DC1, 0xD82E38EA, 0xAC455F7B,
+ 0x4DCD4EDB, 0x92BC2696, 0xFB03F135, 0x4FCA1F8C, 0xBD5E75F6,
+ 0x502F41B0, 0x3616D3F1, 0x2E5B8E31, 0x2026EB19, 0x57E783D7,
+ 0x467BBE00, 0x4703ABA3, 0x1F776B9C, 0xE2570A84, 0xFEC7DB48,
+ 0x1BD5012, 0xFD0A2D5D, 0x7FCC29F2, 0x291304B6, 0x99D5D8ED,
+ 0xC7551C8, 0xFD12F38F, 0xBADE8892, 0xDF749997, 0xA5DAE2F,
+ 0x2B9FA269, 0x5C13CFED, 0x15E9A399, 0x54437F4E, 0xA72DB2AB,
+ 0x56186AA1, 0xFE4DB55C, 0xA34D7836, 0x2A879760, 0xC63FA94,
+ 0xAC18B207, 0x5FC78B3, 0x7F10621E, 0xA769E6B2, 0xEC9F4A11,
+ 0xCE3F982C, 0x62BA2EF5, 0xA5F239CD, 0x73D63FED, 0xE36E9F5E,
+ 0x8AC1DA0E, 0x3F3DB3EB, 0x738326EA, 0x35C366B1, 0xCD476E86,
+ 0x82F6B208, 0xF11A9FC1, 0x426AC396, 0x7E4D1B93, 0x75E4EDB7,
+ 0xAF3C44A7, 0x51A5EF5C, 0xFAD2463D, 0x8A5639CA, 0xC995AC78,
+ 0xCC4BE4F6, 0x3AFE7F8D, 0x66993D04, 0x4386FF37, 0xCBC1C6C2,
+ 0x55A8F5EC, 0xE81A9A75, 0x30A67E1B, 0x4A4A7D0C, 0x20F7F993,
+ 0x1891805, 0x738976AD, 0xD426E7D6, 0x3C5CEEBF, 0x4499187F,
+ 0xABF17C97, 0x447C317F, 0x68D8419C, 0x7AAB6456, 0x421BCF29,
+ 0xF6740F9C, 0x8916BB8D, 0x3D72AAB, 0x9AD54DD7, 0x7549C6EE,
+ 0x7317342B, 0xA18546D4, 0x1056BDA7, 0x54BBCCCE, 0x8CE63E46,
+ 0x5D146234, 0x33BE6C63, 0xB250C4E5, 0x89D72335, 0x87C36BA,
+ 0xB65530CC, 0x2DFAC48C, 0x1663D16F, 0x59B80AA, 0x950274EA,
+ 0x92532D4A, 0x3CEF802D, 0x492FBDA5, 0xA63A2574, 0xEF8005C2,
+ 0x94A18651, 0xAF627ABA, 0x6829B238, 0xA698F646, 0xD2598516,
+ 0x10144D36, 0xD9B1D1B9, 0xAB2ACF05, 0x5395B699, 0xA7851C75,
+ 0x1806C6F3, 0xAE970306, 0x3284B145, 0x98F4FE8F, 0xECDD35CC,
+ 0xDDC1EE0E, 0xC4848865, 0x925826BD, 0x4078BE39, 0x68A8561A,
+ 0x323045DC, 0xA933B37F, 0xBA2AEE2E, 0x4F24F65D, 0x349EE246,
+ 0xF97B9D0E, 0x46DC5759, 0x4529F425, 0x80D17B42, 0x8E16F709,
+ 0x1B42206A, 0x4934A526, 0x391BB6DE, 0xB52EF45C, 0x26C30290,
+ 0xCBA23CAA, 0xA501A8C3, 0xD922C4F8, 0xE8824E53, 0x6F4255DC,
+ 0x5960B544, 0x58BC69D6, 0xCA936323, 0xFDDF053C, 0xC2E002D6,
+ 0x7D750755, 0x8A3F9CD1, 0x35F8F6F8, 0xFB7BD154, 0x65CFF94F,
+ 0x390A58DD, 0xD97C4093, 0x501CA2A3, 0x8EA5DEBC, 0xCA93461F,
+ 0xE02D984C, 0x126F8517, 0x39FDD887, 0x46241AE9, 0x777E854D,
+ 0xE2B36349, 0x58E3FA9F, 0x971DEF1E, 0x8E156228, 0xC0E14E9,
+ 0xA9A01BE6, 0xB318C990, 0x971680D6, 0xA1F359CE, 0x487E23F4,
+ 0x7DE465B0, 0x4E4C905E, 0x2A652959, 0x116FF167, 0x5C74AAB9,
+ 0x467BBE00, 0x4703ABA3, 0x1F776B9C, 0xE2570A84, 0xFEC7DB48,
+ 0x1BD5012, 0xFD0A2D5D, 0x7FCC29F2, 0x291304B6, 0x99D5D8ED,
+ 0xC7551C8, 0xFD12F38F, 0xBADE8892, 0xDF749997, 0xA5DAE2F,
+ 0x2B9FA269, 0x5C13CFED, 0x15E9A399, 0x54437F4E, 0xA72DB2AB,
+ 0x56186AA1, 0xFE4DB55C, 0xA34D7836, 0x2A879760, 0xC63FA94,
+ 0xAC18B207, 0x5FC78B3, 0x7F10621E, 0xA769E6B2, 0xEC9F4A11,
+ 0xCE3F982C, 0x62BA2EF5, 0xA5F239CD, 0x4FEFC920, 0x28DF4EB8,
+ 0x29EBF45A, 0x1E350CF6
+ };
+
+/* The source data is random across the q31_t range. Accessing it by word should
+ remain random. */
+const q15_t * filtering_q15_inputs = (q15_t *) filtering_q31_inputs;
+const q7_t * filtering_q7_inputs = (q7_t *) filtering_q31_inputs;
+
+const float32_t filtering_f32_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS] =
+{
+ 43.0264275639 , -17.0525215570 , -94.8488973910 , -8.1924989580 , 7.2830326091 , 66.8368719314 , 33.9778190671 , 117.8652289772 ,
+ -129.6077797465, -14.6420815368 , 18.0239223278 , 20.6760530292 , 55.0375037651 , 1.8674609862 , -85.6534302408 , -33.5750364909 ,
+ 29.2110949614 , 110.4727049460 , -94.1914619387 , -1.4084169343 , 83.5181653041 , 47.3073514127 , -13.3420621181 , 30.3389699104 ,
+ 12.1188124277 , 100.9730921941 , -114.0146362390, -77.5823200409 , 37.2019034618 , 40.0026301128 , -58.3387276630 , -34.9472398600 ,
+ -5.1169678311 , -87.7660091118 , -150.5888601131, 56.0349370503 , 50.2168884079 , -74.2313236767 , 22.3648603560 , -6.8676387051 ,
+ 74.8957303680 , -90.1292012823 , -55.1436241586 , -66.6732976100 , -6.7918147615 , 7.7612697081 , 35.7892605979 , -20.0470508830 ,
+ 41.8369017546 , -143.7378056984, -41.9127158600 , -108.3531841158, -57.1917422289 , -124.2808828105, 38.9316388820 , -77.9212517405 ,
+ 37.1990818377 , -28.9545952748 , -155.6371057564, 45.8088886393 , 36.2537018275 , -6.5727656016 , -104.2070491921, 45.5583813729 ,
+ -19.7674717059 , -80.4802190947 , -1.4444563441 , -42.2142256438 , 36.6546339194 , -57.0866498590 , 44.4677067511 , 65.7285753407 ,
+ -103.8158864647, 25.4348723711 , -153.5419639389, 39.3608409474 , 49.1658103436 , 79.5570602275 , 75.2944095996 , 58.9394700746 ,
+ -53.1018534392 , 33.4172444014 , 35.6224682287 , -64.4353396418 , -125.8464291251, -47.6072111617 , -26.2177687594 , -12.0061322096 ,
+ -17.7887967585 , -28.2926175090 , -62.0691715749 , 40.5098573604 , -191.1123732593, 119.6750713043 , 19.6182375803 , -26.7615252921 ,
+ 2.2957847015 , -108.3436451287, -50.5906164995 , -5.6360985100 , -11.6772204201 , -84.2765293757 , -60.9317810068 , 82.0446350218 ,
+ -70.2048296348 , 72.8738253222 , 60.2450218115 , 114.2741231228 , 46.8180775285 , 6.9915412654 , -8.9909197429 , -78.9165936808 ,
+ 66.4731535459 , -68.4235455651 , -79.8254597080 , -10.6308477115 , -62.6161569330 , -55.7744410292 , -11.8408366528 , 98.1034940997 ,
+ 35.8213741877 , -54.4694482732 , 86.9631830044 , -53.0343838122 , -47.4898642865 , -47.2010929590 , -31.3312639685 , -23.0908245172 ,
+ 12.0258009869 , -5.1098204703 , -9.8420230737 , -107.3328761158, 44.6810431959 , -17.9083820345 , -60.9753512872 , -7.5915088994 ,
+ 17.2250813329 , 57.9176125648 , 124.3004161362 , -63.1950908493 , 120.5788885640 , -44.1734238117 , -91.7408095116 , -43.5696066595 ,
+ -49.9560710099 , -167.8513443296, -70.9437505499 , -46.4109705355 , -64.2264526456 , -13.9995803916 , -100.9548186356, 9.9101010575 ,
+ -50.0615130815 , -55.7590145012 , -60.3195153388 , 61.7913378549 , -102.0850899209, 53.2360193126 , -25.8997883369 , 75.1445512333 ,
+ -113.8148602310, 17.8027281119 , -19.5006822722 , -44.2169628471 , 107.5017084384 , -113.7909124666, -43.9735396033 , 7.6880981388 ,
+ 46.7384653508 , 9.9047443751 , 81.8646964362 , 132.3812863877 , -95.6959050236 , -68.5015813484 , 65.8586404494 , 18.5039353889 ,
+ -30.1786166621 , -90.3098515667 , -22.9356228552 , -20.5778272423 , -2.2127786675 , -35.4418447703 , -51.8722915974 , -107.9024439078,
+ -51.5940748232 , -51.7463262677 , 74.2795485984 , 94.2205022462 , 9.7016384049 , -47.3556083155 , -36.7822314478 , -151.6455525363,
+ -15.7183814485 , 78.2063383182 , 0.1516414969 , 37.9304181609 , 20.6185902740 , -22.2164106778 , 6.1160554677 , 2.4061326953 ,
+ -111.6681824598, -60.0858917090 , 75.1698614693 , -76.5787410444 , 28.3391655715 , -2.4946186443 , -68.0378899682 , 104.0893199171 ,
+ -51.8319647254 , 38.8521710524 , 75.9114239564 , 73.9206172905 , -103.2533029987, 6.9002718274 , -36.6346436319 , -25.1990926265 ,
+ 1.5852145953 , -50.6438436795 , 21.5018844428 , -151.9305562846, -51.7326681814 , 21.4475994143 , 42.2564011921 , -74.0520586926 ,
+ 49.7370635809 , -13.2957534126 , 36.6746826778 , -31.7005492589 , 148.4894964268 , 79.7890632353 , 16.8856024809 , 16.1690460177 ,
+ 39.2665169484 , 117.2461167794 , -37.4827984831 , -47.8387803604 , -95.7025286193 , 34.3058214285 , -124.9536456028, 56.1640195764 ,
+ 94.3636873606 , 35.3992852810 , -38.3920852159 , -100.5738062016, -29.7837022314 , 42.9133913996 , -34.2715618187 , -14.3589115627 ,
+ -16.5935468750 , 20.4574192236 , -88.7897972666 , -38.6285080386 , 53.3203422726 , 98.5991486746 , 122.7305462474 , 67.7902817187 ,
+ 5.1764117389 , 5.0632821624 , 21.9288789574 , -78.3140512638 , -21.2069682335 , 23.6342010925 , 34.4445769455 , 59.1346766615 ,
+ 28.9978778000 , 39.8121180845 , -17.1650033520 , -56.9174900874 , 17.8157086148 , -112.8801457350, -122.4019040408, 140.8669393157 ,
+ -65.4664329639 , 40.6952775518 , 32.7260891658 , -43.2565155866 , 19.3945751928 , -20.1815002000 , -67.6601711640 , -18.1921178207 ,
+ -35.6802153684 , 49.9550290306 , 131.4925251016 , -31.2940938167 , -5.2848453344 , -109.5580577933, 20.2437599390 , -8.8782958734 ,
+ 54.1836717264 , 7.2555852190 , -3.5698316137 , -51.9236786262 , 6.7861547980 , -104.4814551670, 45.8458629668 , 70.0890876844 ,
+ 38.3572837740 , 61.8024165129 , 68.0176962024 , -12.8193934080 , -21.4661610917 , -0.9377108815 , -74.2100679061 , 71.0490808147 ,
+ 91.9813889497 , -14.5797640164 , 3.5036749129 , -138.3605478356, -48.1501349794 , -16.0636922482 , -12.1334197606 , 15.0562207637 ,
+ -34.0878176054 , 55.1075126157 , 97.3829871877 , 0.2053358099 , -94.8713267382 , 51.5460954054 , 21.2966946363 , 58.1331025047 ,
+ -23.4599044132 , -19.3315856528 , -8.4497193577 , -1.9594679356 , -33.1906549336 , -144.6825417978, -57.1218958072 , 35.7353406097 ,
+ 61.4666549819 , 14.6536253128 , 82.1632196866 , -44.6230161723 , -91.1022589278 , -18.5737673927 , -136.8975612334, 56.9606788003 ,
+ 70.7059960183 , -68.2829345081 , -10.2629800455 , -53.6385325047 , -68.7928766204 , 88.2444688302 , 83.1412324801 , -102.9206928160,
+ -68.2329763159 , -69.7552955469 , 108.2132269009 , -28.2582329307 , 5.6685898328 , -36.0392956840 , 43.3269513128 , -8.6436416796 ,
+ -16.5054886972 , 11.5008791788 , 39.6923606683 , -28.9039554061 , 13.5938214364 , -23.6296332202 , 49.1171161163 , 53.1636857935 ,
+ -62.9672053166 , -54.2594757384 , 48.3838956696 , 8.0469071555 , -33.6472086213 , -120.5381752144, 55.0880453111 , 17.8990740563 ,
+ 144.9402232336 , 101.7886229203 , -73.3666393712 , -16.4721379138 , -12.7447935685 , 101.8245160983 , -49.7026860415 , -15.1227790364 ,
+ 65.7430288442 , -131.8695390036, 10.2750933946 , 90.9752774838 , -26.5859990591 , -95.6962772568 , 76.2174589344 , 24.8796848060 ,
+ -38.8938223046 , 54.1687774852 , -37.3585968996 , -34.6848570502 , 33.0151011570 , -55.8345877671 , -3.9009101671 , -31.5024971691 ,
+ -9.6863895491 , 91.8719195957 , -58.9993249744 , -25.6887030614 , -8.0829472205 , 4.6386491741 , -71.4019697167 , -21.3734669095 ,
+ 86.2079144404 , 79.6823974266 , -0.0910915997 , 44.8067718095 , 58.7204020766 , 72.6856808976 , -50.3373732478 , -116.1175365534,
+ -15.0884909384 , 5.4593772059 , -63.6553527905 , 37.3460388205 , -32.2399421679 , 95.7569350513 , -7.3700141964 , -56.0370832967 ,
+ -41.7377150439 , -42.0042856519 , 12.5134312941 , 93.7845584531 , -32.4801087157 , -33.3976050318 , -24.2252126001 , -46.3199064467 ,
+ -20.3704610276 , 15.8571376404 , 88.9127217235 , -33.1132582267 , -1.0005675836 , -28.1780471904 , 150.9349379135 , 38.0600520828 ,
+ 36.4338677563 , -3.3709201641 , 29.7709773016 , 16.5064119077 , 21.3147729463 , 110.6714300904 , 18.8406036507 , 14.8963298097 ,
+ 50.9975960392 , 16.3991140350 , -194.0805845907, -41.6723945839 , -74.8991127408 , -6.4587655805 , -0.6883628218 , -49.8709647175 ,
+ 194.2265120473 , 64.3043624521 , 16.0040882780 , 68.4032551772 , -43.4050313128 , 84.6826289824 , -28.1357565943 , 134.6895584120 ,
+ -7.9746152680 , -95.6692886462 , -48.9444370342 , 79.4479343188 , -50.5345228122 , 52.4800633307 , -14.7735051703 , -20.1510237050 ,
+ 22.5049816980 , 64.4191999102 , 24.8385648232 , 99.4265041360 , 62.0189508473 , -28.3892600378 , -109.8842008564, -79.0407483407 ,
+ 18.3408112020 , 49.1650536089 , 31.5419844924 , -36.1160722679 , -132.9148081329, 10.4053531567 , -129.2463715470, -43.4602207151 ,
+ -24.2420653292 , 91.5388317556 , 21.4762248190 , -44.3810909139 , 18.4098011282 , -45.8691164539 , -20.9831197962 , 16.2076792914 ,
+ 66.0224147666 , -13.6794615513 , 101.2163279622 , -62.4462618603 , 22.2040981785 , -52.3208382802 , -24.7909079016 , 58.5150375093 ,
+ 18.8569705105 , -55.6083430939 , 131.0273367422 , -34.5209015065 , 121.4357296573 , -77.2590299593 , -51.5929566898 , 5.0247131098 ,
+ -23.8451707592 , -4.5912313547 , 31.1387246821 , 61.7019310824 , 49.1912429744 , -50.5836913031 , -74.8182600630 , -21.6209317022 ,
+ 20.9409464654 , -72.7870824583 , -28.3530746820 , -45.0794425434 , -13.4910629905 , -62.0158772255 , -34.1421181246 , 44.2844972784 ,
+ 8.4213193211 , 79.9349022793 , 60.0160502260 , 32.2272994080 , -72.2893887746 , 17.3063698247 , -134.6335742431, 64.6499736261 ,
+ 7.1411921919 , -37.5517577873 , 6.2405670930 , 117.1920927305 , 128.7420689815 , -3.1556854963 , -13.4100422909 , -11.9336372907 ,
+ -8.6022400553 , -102.0033506666, -78.4696575074 , 15.0765861403 , -111.5219718576, -13.4162786508 , 38.2437013694 , 61.1637732561 ,
+ -34.4804160003 , 107.4438003830 , -79.4193067813 , -81.1842853968 , -26.2622970331 , 132.3205425408 , -119.1464268477, 67.3048866598 ,
+ 103.3266736715 , -58.1865815617 , 27.6231908601 , -11.2004371750 , 26.0340617206 , 12.5696123916 , 0.6442714420 , -30.7393043544 ,
+ 1.5314955897 , 49.9110088250 , -106.1358721920, 51.1608329944 , -32.8684239794 , -27.7215905745 , -11.6450303367 , -36.7731678028 ,
+ 59.9383486599 , -4.6301990580 , 5.0361682939 , -10.5669407980 , 124.0908762205 , 35.8305364082 , -123.6216777114, -74.2569079167 ,
+ -56.7651776816 , 16.0736385582 , 23.5030632215 , -110.6764295938, 44.3086821806 , 9.4452708243 , 5.3300080251 , 39.0483916714 ,
+ 151.4550562868 , 62.8957092621 , -116.8103461233, 5.1129927759 , -33.2252515135 , -9.4522506046 , 22.7026048372 , -15.5264414569 ,
+ 71.2087620034 , 19.1191568332 , 50.3019546809 , -5.6096922409 , 22.9344126462 , -7.7591876203 , 31.8949515564 , -58.4253952381 ,
+ 66.4341297173 , -19.0583083044 , 96.7695087855 , 20.4934280047 , 4.9544603116 , -20.8288135920 , -173.2659655408, -62.4883621640 ,
+ -48.5528422703 , 12.1437504278 , 60.2482234666 , -19.6072312919 , -34.6320214291 , 129.0089698963 , -50.9042160618 , 98.3952661477 ,
+ -4.7051792479 , -13.1768910826 , 69.5138802139 , 58.5748201565 , -45.9385652563 , 151.7952104306 , 34.2541941013 , -58.0417838381 ,
+ 28.1480473670 , 46.4006562684 , 97.7001828545 , 4.0855607626 , -32.6097018162 , 16.8913949959 , 105.7266202978 , -89.3978374651 ,
+ -60.9338593128 , -41.2220734230 , 49.9393070783 , 95.0974764854 , 49.2498366456 , 58.6214364590 , 34.1113830569 , 45.6634098874 ,
+ -22.5356086770 , -97.1978653617 , 86.5565049535 , 70.6118545777 , -30.6978082909 , 118.7238621666 , 14.5922386932 , 11.3449652072 ,
+ 65.6007783405 , 82.6369678204 , -52.0390492248 , -47.0160551227 , -95.5142448634 , 99.7162626888 , -36.5523815090 , -42.8042935534 ,
+ 68.3566199798 , -13.8451547552 , -71.1629911780 , 36.2989433752 , -32.4867163365 , 112.4079947071 , -75.6295117422 , 47.5276421639 ,
+ 51.8078250755 , -26.8715188457 , -9.6291144797 , 40.1999849640 , -38.4634033246 , 40.9764960915 , -26.1715730268 , 36.5996396515 ,
+ -26.9924731886 , 53.7879986570 , -83.1658398348 , 23.6381378489 , 43.8794937753 , -55.4133836419 , 90.0266130838 , 14.1036181982 ,
+ -18.1225736715 , 85.1363181151 , -62.5970846379 , -18.5291947838 , -25.7341986703 , -49.7061342931 , -59.0442763971 , 50.8960636803 ,
+ -87.6471123430 , -36.7217762531 , 22.5952364054 , 11.1107885650 , -0.5377327229 , 160.8145792630 , 73.3103441505 , 10.1656872354 ,
+ -50.4554350397 , -57.3478171016 , -15.4201715357 , -26.9135446491 , -4.9891264771 , -37.0226770057 , -80.9919535641 , 50.4418660876 ,
+ -25.8517575250 , -69.9538258421 , -17.5730160671 , 15.9405836751 , 113.9545230349 , -46.1040379057 , -94.2458635014 , -69.0338522452 ,
+ 43.5813790265 , 107.1836101171 , -55.1012654323 , -77.1529555887 , -33.1530320656 , -94.5582659641 , -53.6837586872 , 27.0680381378 ,
+ 93.9385415207 , -61.0955216188 , 18.0530957225 , 7.9150142320 , -12.1218191587 , 34.0173961457 , 40.0084937565 , 9.8119275580 ,
+ 44.2065861274 , -1.8718514394 , 67.4740024215 , 46.7391150131 , 207.2404815875 , 45.1635364462 , 43.3580102761 , -44.0244218674 ,
+ 83.2387206007 , -8.6441851856 , 12.3993902588 , -22.5091685270 , -19.8332981376 , 97.9196509289 , -76.6720306234 , 28.9740705859 ,
+ 121.9415248016 , 9.6656982611 , -51.0996453694 , 37.3704374740 , 74.7589840907 , -113.4066752631, 120.0029566342 , -105.3786221360,
+ 81.8152755619 , -13.4979932982 , -21.4680758393 , -85.1088235539 , -65.3610798409 , -35.0444139470 , -48.0220794487 , -41.6210317362 ,
+ 33.1212995259 , -82.1480936443 , -10.5479715135 , 76.4601917004 , 42.1983651157 , 92.6104239912 , -42.3536237955 , -24.5644182272 ,
+ 30.4446637772 , -90.2899420489 , 63.6723540422 , 103.0895811428 , 64.1706769263 , -10.7069812309 , 21.8927240409 , 6.3571071738 ,
+ 57.1457649358 , -52.9866276448 , 66.0981829072 , -29.5372056881 , -79.2252039810 , -136.2440652798, -57.0106422562 , 86.8203548141 ,
+ 66.4244149837 , 53.3230426111 , -66.1283059222 , -131.0402660353, 8.0548411081 , 122.9088988100 , 1.2626894208 , -60.5059112373 ,
+ -68.8707203082 , -6.4747987200 , 85.8411327244 , 99.9624156733 , 90.4197864338 , -35.9630441182 , -22.9158275507 , -17.3660128776 ,
+ 16.7845345761 , 34.7219749782 , -39.3513765878 , 1.0460702756 , -60.9494500182 , 20.0900333387 , -85.9636743832 , 88.4400782168 ,
+ 15.0729628728 , 61.5499846243 , 11.8579871757 , 107.8617581581 , -42.9393027864 , -62.8422307621 , -19.0589600542 , 4.0750325807 ,
+ -36.0651825425 , 55.7638724501 , -10.4691736080 , -55.5672537178 , -61.2061519915 , -21.1885348576 , -131.2535612498, 24.7463552676 ,
+ 22.9426321237 , 14.3038202264 , -138.0926317438, -59.0892900856 , -162.5416439986, 7.1307658250 , -141.1236672256, -4.7173618068 ,
+ -16.7741532807 , -68.2615451173 , -2.6608701102 , 84.1978109826 , -11.3446202072 , 59.9630033088 , -1.8994925010 , -37.9301641959 ,
+ -119.4435600954, -11.4587491646 , 12.2423215240 , -7.3169898616 , -67.0373621128 , 36.0198843055 , 53.9791315249 , -134.5885680695,
+ -83.8330811965 , -16.6714816463 , -8.8498552035 , -24.0513088196 , -22.9444328877 , -37.7961441531 , 25.1975736186 , -136.1611637464,
+ -5.0843464033 , -10.3939554694 , 20.7422826935 , 75.6854136623 , 46.4179626736 , -57.0052830175 , 7.3457235521 , -51.5504447254 ,
+ -158.4375751701, -200.2426967181, -48.1234996261 , 1.6623945527 , 21.1746524375 , 99.4092980367 , -2.3206772903 , 45.7989166757 ,
+ 2.0181548348 , -88.0556010969 , -59.1527212096 , 47.3607925077 , -10.4181140309 , 56.3558125650 , -8.9799125560 , -30.0376711812 ,
+ -36.7132904688 , 35.7785050392 , -13.0763909369 , -2.1855594714 , 18.1550954005 , -28.6711803575 , -55.4495172398 , -2.8812973198 ,
+ -59.9575059158 , 40.0588875786 , 57.4713686602 , -3.2835144853 , -36.7193552111 , -64.9415131516 , -166.9555466445, -23.5556853844 ,
+ -54.9408569587 , -35.2310451959 , 21.3345143458 , 65.7590671151 , 51.2214538168 , 46.1271939944 , -42.2235267919 , 127.2329928299 ,
+ 105.2391778600 , 17.6726845966 , -129.9021148044, 8.7065613044 , -94.0987112511 , -3.5375742950 , -23.1385452379 , 60.6219530633 ,
+ 92.5445564235 , 48.5111974469 , -52.5699309159 , -60.0634811685 , 25.9034368684 , 140.0249495491 , 1.5918852392 , 38.0266038291 ,
+ 17.5588710703 , 3.4294066089 , -27.6748782173 , 59.6182974489 , -35.2924781853 , -38.6198576115 , -13.6119803198 , 7.8375587489 ,
+ 22.7250686519 , -28.3524510951 , -34.4269062817 , 22.6464817325 , -61.6528147860 , -5.9782002429 , 61.4730771294 , 43.5582379527 ,
+ 55.6862408270 , 87.8745651631 , 46.3401042715 , -19.8780979663 , 74.1272633369 , 29.8590452377 , -12.8665765140 , 34.2931401219 ,
+ 53.9279617551 , -16.9017895140 , -70.1527553166 , -79.6367897992 , 109.3728271017 , -129.2214826835, -53.4644539730 , -51.5654458993 ,
+ 17.6062148433 , 3.5090251835 , 74.2615941204 , -109.3431097845, 40.1403465151 , 28.8714561280 , 94.0868659302 , -19.0047033845 ,
+ -60.0967410050 , -19.0998457619 , -67.2027075128 , 72.0711434846 , -17.8737851232 , 123.7050551274 , 132.6331504104 , 25.5018761009 ,
+ -36.7817189239 , -29.1580893235 , -6.5848563828 , 90.2868948516 , -35.7017258498 , -68.5675432955 , -52.4888589786 , 47.1377730021 ,
+ -7.4546621940 , -52.0657517138 , -49.0404829633 , -114.6910280126, -117.6819819437, -32.7856729408 , 31.8232065591 , 12.1192973039 ,
+ 35.2678513420 , -1.0336778293 , 30.7021249679 , 127.0442906046 , -84.8457819393 , 28.9862843096 , -47.3524701726 , -126.1094998460,
+ -2.9700276582 , -2.4956545870 , -53.8624121141 , -85.2114117637 , 76.9057985618 , 137.1205201755 , -19.0830817212 , 14.3407526579 ,
+ -56.5921994449 , -25.6084873186 , -44.9470801106 , -133.3139496090, 0.3487447576 , 33.4499716730 , 34.7126257844 , -9.3307383323 ,
+ 27.2996276947 , 10.8765676134 , -91.1032360444 , -90.9584216222 , 1.6981490570 , 96.8557438791 , 56.7726390913 , -44.3246449237 ,
+ 52.3260643361 , 21.5551140465 , 27.4535327381 , 2.0072717479 , 7.4823125629 , 77.1185863870 , 16.1372262663 , -10.7206012957 ,
+ 66.8830091413 , 49.3523828287 , 54.0855375598 , 30.8570349345 , -10.9255375390 , 62.3910624674 , 30.9238561381 , 0.3352881853 ,
+ 72.1022806197 , -28.8319885008 , 23.3335288806 , 46.8999035980 , -67.0984424822 , -164.7917209112, 42.5767681360 , -92.4668227688 ,
+ 43.8491734282 , -17.1126540408 , 37.4819594334 , 69.0774409673 , -39.3530526854 , -14.0693747124 , -60.2520781215 , -80.3860105519 ,
+ 32.6689956840 , 15.3393042576 , -18.5529761307 , 97.3942151573 , -4.4462855745 , 13.7614349817 , 158.3358780719 , -44.7258299667 ,
+ -17.7741912819 , 116.5136962268 , -33.6261057820 , 22.8344441288 , -155.1423976144, 5.7070117893 , -22.7906543902 , -45.0633909283 ,
+ -13.9329987929 , -66.0848932507 , 1.1383038109 , 123.8386958483 , 67.6662401589 , 45.9152963554 , -27.4397697462 , 97.9596747354 ,
+ -6.3544655181 , 29.0832146722 , 96.3468162499 , 32.4535976137 , -91.0650399301 , 2.7293262791 , 70.7853483111 , -92.3655274571 ,
+ 69.0359217256 , 83.1530567979 , 35.8375091111 , 7.3393552348 , -95.1770165365 , 76.4905790891 , 55.6253140577 , -29.5315327050 ,
+ -16.5935468750 , 20.4574192236 , -88.7897972666 , -38.6285080386 , 53.3203422726 , 98.5991486746 , 122.7305462474 , 67.7902817187 ,
+ 5.1764117389 , 5.0632821624 , 21.9288789574 , -78.3140512638 , -21.2069682335 , 23.6342010925 , 34.4445769455 , 59.1346766615 ,
+ 28.9978778000 , 39.8121180845 , -17.1650033520 , -56.9174900874 , 17.8157086148 , -112.8801457350, -122.4019040408, 140.8669393157 ,
+ -65.4664329639 , 40.6952775518 , 32.7260891658 , -43.2565155866 , 19.3945751928 , -20.1815002000 , -67.6601711640 , -18.1921178207 ,
+ -35.6802153684 , -19.6571455162
+};
+
+const float64_t filtering_f64_inputs[FILTERING_MAX_BLOCKSIZE * FILTERING_MAX_M + FILTERING_MAX_NUMTAPS] =
+{
+ 43.0264275639 , -17.0525215570 , -94.8488973910 , -8.1924989580 , 7.2830326091 , 66.8368719314 , 33.9778190671 , 117.8652289772 ,
+ -129.6077797465, -14.6420815368 , 18.0239223278 , 20.6760530292 , 55.0375037651 , 1.8674609862 , -85.6534302408 , -33.5750364909 ,
+ 29.2110949614 , 110.4727049460 , -94.1914619387 , -1.4084169343 , 83.5181653041 , 47.3073514127 , -13.3420621181 , 30.3389699104 ,
+ 12.1188124277 , 100.9730921941 , -114.0146362390, -77.5823200409 , 37.2019034618 , 40.0026301128 , -58.3387276630 , -34.9472398600 ,
+ -5.1169678311 , -87.7660091118 , -150.5888601131, 56.0349370503 , 50.2168884079 , -74.2313236767 , 22.3648603560 , -6.8676387051 ,
+ 74.8957303680 , -90.1292012823 , -55.1436241586 , -66.6732976100 , -6.7918147615 , 7.7612697081 , 35.7892605979 , -20.0470508830 ,
+ 41.8369017546 , -143.7378056984, -41.9127158600 , -108.3531841158, -57.1917422289 , -124.2808828105, 38.9316388820 , -77.9212517405 ,
+ 37.1990818377 , -28.9545952748 , -155.6371057564, 45.8088886393 , 36.2537018275 , -6.5727656016 , -104.2070491921, 45.5583813729 ,
+ -19.7674717059 , -80.4802190947 , -1.4444563441 , -42.2142256438 , 36.6546339194 , -57.0866498590 , 44.4677067511 , 65.7285753407 ,
+ -103.8158864647, 25.4348723711 , -153.5419639389, 39.3608409474 , 49.1658103436 , 79.5570602275 , 75.2944095996 , 58.9394700746 ,
+ -53.1018534392 , 33.4172444014 , 35.6224682287 , -64.4353396418 , -125.8464291251, -47.6072111617 , -26.2177687594 , -12.0061322096 ,
+ -17.7887967585 , -28.2926175090 , -62.0691715749 , 40.5098573604 , -191.1123732593, 119.6750713043 , 19.6182375803 , -26.7615252921 ,
+ 2.2957847015 , -108.3436451287, -50.5906164995 , -5.6360985100 , -11.6772204201 , -84.2765293757 , -60.9317810068 , 82.0446350218 ,
+ -70.2048296348 , 72.8738253222 , 60.2450218115 , 114.2741231228 , 46.8180775285 , 6.9915412654 , -8.9909197429 , -78.9165936808 ,
+ 66.4731535459 , -68.4235455651 , -79.8254597080 , -10.6308477115 , -62.6161569330 , -55.7744410292 , -11.8408366528 , 98.1034940997 ,
+ 35.8213741877 , -54.4694482732 , 86.9631830044 , -53.0343838122 , -47.4898642865 , -47.2010929590 , -31.3312639685 , -23.0908245172 ,
+ 12.0258009869 , -5.1098204703 , -9.8420230737 , -107.3328761158, 44.6810431959 , -17.9083820345 , -60.9753512872 , -7.5915088994 ,
+ 17.2250813329 , 57.9176125648 , 124.3004161362 , -63.1950908493 , 120.5788885640 , -44.1734238117 , -91.7408095116 , -43.5696066595 ,
+ -49.9560710099 , -167.8513443296, -70.9437505499 , -46.4109705355 , -64.2264526456 , -13.9995803916 , -100.9548186356, 9.9101010575 ,
+ -50.0615130815 , -55.7590145012 , -60.3195153388 , 61.7913378549 , -102.0850899209, 53.2360193126 , -25.8997883369 , 75.1445512333 ,
+ -113.8148602310, 17.8027281119 , -19.5006822722 , -44.2169628471 , 107.5017084384 , -113.7909124666, -43.9735396033 , 7.6880981388 ,
+ 46.7384653508 , 9.9047443751 , 81.8646964362 , 132.3812863877 , -95.6959050236 , -68.5015813484 , 65.8586404494 , 18.5039353889 ,
+ -30.1786166621 , -90.3098515667 , -22.9356228552 , -20.5778272423 , -2.2127786675 , -35.4418447703 , -51.8722915974 , -107.9024439078,
+ -51.5940748232 , -51.7463262677 , 74.2795485984 , 94.2205022462 , 9.7016384049 , -47.3556083155 , -36.7822314478 , -151.6455525363,
+ -15.7183814485 , 78.2063383182 , 0.1516414969 , 37.9304181609 , 20.6185902740 , -22.2164106778 , 6.1160554677 , 2.4061326953 ,
+ -111.6681824598, -60.0858917090 , 75.1698614693 , -76.5787410444 , 28.3391655715 , -2.4946186443 , -68.0378899682 , 104.0893199171 ,
+ -51.8319647254 , 38.8521710524 , 75.9114239564 , 73.9206172905 , -103.2533029987, 6.9002718274 , -36.6346436319 , -25.1990926265 ,
+ 1.5852145953 , -50.6438436795 , 21.5018844428 , -151.9305562846, -51.7326681814 , 21.4475994143 , 42.2564011921 , -74.0520586926 ,
+ 49.7370635809 , -13.2957534126 , 36.6746826778 , -31.7005492589 , 148.4894964268 , 79.7890632353 , 16.8856024809 , 16.1690460177 ,
+ 39.2665169484 , 117.2461167794 , -37.4827984831 , -47.8387803604 , -95.7025286193 , 34.3058214285 , -124.9536456028, 56.1640195764 ,
+ 94.3636873606 , 35.3992852810 , -38.3920852159 , -100.5738062016, -29.7837022314 , 42.9133913996 , -34.2715618187 , -14.3589115627 ,
+ -16.5935468750 , 20.4574192236 , -88.7897972666 , -38.6285080386 , 53.3203422726 , 98.5991486746 , 122.7305462474 , 67.7902817187 ,
+ 5.1764117389 , 5.0632821624 , 21.9288789574 , -78.3140512638 , -21.2069682335 , 23.6342010925 , 34.4445769455 , 59.1346766615 ,
+ 28.9978778000 , 39.8121180845 , -17.1650033520 , -56.9174900874 , 17.8157086148 , -112.8801457350, -122.4019040408, 140.8669393157 ,
+ -65.4664329639 , 40.6952775518 , 32.7260891658 , -43.2565155866 , 19.3945751928 , -20.1815002000 , -67.6601711640 , -18.1921178207 ,
+ -35.6802153684 , 49.9550290306 , 131.4925251016 , -31.2940938167 , -5.2848453344 , -109.5580577933, 20.2437599390 , -8.8782958734 ,
+ 54.1836717264 , 7.2555852190 , -3.5698316137 , -51.9236786262 , 6.7861547980 , -104.4814551670, 45.8458629668 , 70.0890876844 ,
+ 38.3572837740 , 61.8024165129 , 68.0176962024 , -12.8193934080 , -21.4661610917 , -0.9377108815 , -74.2100679061 , 71.0490808147 ,
+ 91.9813889497 , -14.5797640164 , 3.5036749129 , -138.3605478356, -48.1501349794 , -16.0636922482 , -12.1334197606 , 15.0562207637 ,
+ -34.0878176054 , 55.1075126157 , 97.3829871877 , 0.2053358099 , -94.8713267382 , 51.5460954054 , 21.2966946363 , 58.1331025047 ,
+ -23.4599044132 , -19.3315856528 , -8.4497193577 , -1.9594679356 , -33.1906549336 , -144.6825417978, -57.1218958072 , 35.7353406097 ,
+ 61.4666549819 , 14.6536253128 , 82.1632196866 , -44.6230161723 , -91.1022589278 , -18.5737673927 , -136.8975612334, 56.9606788003 ,
+ 70.7059960183 , -68.2829345081 , -10.2629800455 , -53.6385325047 , -68.7928766204 , 88.2444688302 , 83.1412324801 , -102.9206928160,
+ -68.2329763159 , -69.7552955469 , 108.2132269009 , -28.2582329307 , 5.6685898328 , -36.0392956840 , 43.3269513128 , -8.6436416796 ,
+ -16.5054886972 , 11.5008791788 , 39.6923606683 , -28.9039554061 , 13.5938214364 , -23.6296332202 , 49.1171161163 , 53.1636857935 ,
+ -62.9672053166 , -54.2594757384 , 48.3838956696 , 8.0469071555 , -33.6472086213 , -120.5381752144, 55.0880453111 , 17.8990740563 ,
+ 144.9402232336 , 101.7886229203 , -73.3666393712 , -16.4721379138 , -12.7447935685 , 101.8245160983 , -49.7026860415 , -15.1227790364 ,
+ 65.7430288442 , -131.8695390036, 10.2750933946 , 90.9752774838 , -26.5859990591 , -95.6962772568 , 76.2174589344 , 24.8796848060 ,
+ -38.8938223046 , 54.1687774852 , -37.3585968996 , -34.6848570502 , 33.0151011570 , -55.8345877671 , -3.9009101671 , -31.5024971691 ,
+ -9.6863895491 , 91.8719195957 , -58.9993249744 , -25.6887030614 , -8.0829472205 , 4.6386491741 , -71.4019697167 , -21.3734669095 ,
+ 86.2079144404 , 79.6823974266 , -0.0910915997 , 44.8067718095 , 58.7204020766 , 72.6856808976 , -50.3373732478 , -116.1175365534,
+ -15.0884909384 , 5.4593772059 , -63.6553527905 , 37.3460388205 , -32.2399421679 , 95.7569350513 , -7.3700141964 , -56.0370832967 ,
+ -41.7377150439 , -42.0042856519 , 12.5134312941 , 93.7845584531 , -32.4801087157 , -33.3976050318 , -24.2252126001 , -46.3199064467 ,
+ -20.3704610276 , 15.8571376404 , 88.9127217235 , -33.1132582267 , -1.0005675836 , -28.1780471904 , 150.9349379135 , 38.0600520828 ,
+ 36.4338677563 , -3.3709201641 , 29.7709773016 , 16.5064119077 , 21.3147729463 , 110.6714300904 , 18.8406036507 , 14.8963298097 ,
+ 50.9975960392 , 16.3991140350 , -194.0805845907, -41.6723945839 , -74.8991127408 , -6.4587655805 , -0.6883628218 , -49.8709647175 ,
+ 194.2265120473 , 64.3043624521 , 16.0040882780 , 68.4032551772 , -43.4050313128 , 84.6826289824 , -28.1357565943 , 134.6895584120 ,
+ -7.9746152680 , -95.6692886462 , -48.9444370342 , 79.4479343188 , -50.5345228122 , 52.4800633307 , -14.7735051703 , -20.1510237050 ,
+ 22.5049816980 , 64.4191999102 , 24.8385648232 , 99.4265041360 , 62.0189508473 , -28.3892600378 , -109.8842008564, -79.0407483407 ,
+ 18.3408112020 , 49.1650536089 , 31.5419844924 , -36.1160722679 , -132.9148081329, 10.4053531567 , -129.2463715470, -43.4602207151 ,
+ -24.2420653292 , 91.5388317556 , 21.4762248190 , -44.3810909139 , 18.4098011282 , -45.8691164539 , -20.9831197962 , 16.2076792914 ,
+ 66.0224147666 , -13.6794615513 , 101.2163279622 , -62.4462618603 , 22.2040981785 , -52.3208382802 , -24.7909079016 , 58.5150375093 ,
+ 18.8569705105 , -55.6083430939 , 131.0273367422 , -34.5209015065 , 121.4357296573 , -77.2590299593 , -51.5929566898 , 5.0247131098 ,
+ -23.8451707592 , -4.5912313547 , 31.1387246821 , 61.7019310824 , 49.1912429744 , -50.5836913031 , -74.8182600630 , -21.6209317022 ,
+ 20.9409464654 , -72.7870824583 , -28.3530746820 , -45.0794425434 , -13.4910629905 , -62.0158772255 , -34.1421181246 , 44.2844972784 ,
+ 8.4213193211 , 79.9349022793 , 60.0160502260 , 32.2272994080 , -72.2893887746 , 17.3063698247 , -134.6335742431, 64.6499736261 ,
+ 7.1411921919 , -37.5517577873 , 6.2405670930 , 117.1920927305 , 128.7420689815 , -3.1556854963 , -13.4100422909 , -11.9336372907 ,
+ -8.6022400553 , -102.0033506666, -78.4696575074 , 15.0765861403 , -111.5219718576, -13.4162786508 , 38.2437013694 , 61.1637732561 ,
+ -34.4804160003 , 107.4438003830 , -79.4193067813 , -81.1842853968 , -26.2622970331 , 132.3205425408 , -119.1464268477, 67.3048866598 ,
+ 103.3266736715 , -58.1865815617 , 27.6231908601 , -11.2004371750 , 26.0340617206 , 12.5696123916 , 0.6442714420 , -30.7393043544 ,
+ 1.5314955897 , 49.9110088250 , -106.1358721920, 51.1608329944 , -32.8684239794 , -27.7215905745 , -11.6450303367 , -36.7731678028 ,
+ 59.9383486599 , -4.6301990580 , 5.0361682939 , -10.5669407980 , 124.0908762205 , 35.8305364082 , -123.6216777114, -74.2569079167 ,
+ -56.7651776816 , 16.0736385582 , 23.5030632215 , -110.6764295938, 44.3086821806 , 9.4452708243 , 5.3300080251 , 39.0483916714 ,
+ 151.4550562868 , 62.8957092621 , -116.8103461233, 5.1129927759 , -33.2252515135 , -9.4522506046 , 22.7026048372 , -15.5264414569 ,
+ 71.2087620034 , 19.1191568332 , 50.3019546809 , -5.6096922409 , 22.9344126462 , -7.7591876203 , 31.8949515564 , -58.4253952381 ,
+ 66.4341297173 , -19.0583083044 , 96.7695087855 , 20.4934280047 , 4.9544603116 , -20.8288135920 , -173.2659655408, -62.4883621640 ,
+ -48.5528422703 , 12.1437504278 , 60.2482234666 , -19.6072312919 , -34.6320214291 , 129.0089698963 , -50.9042160618 , 98.3952661477 ,
+ -4.7051792479 , -13.1768910826 , 69.5138802139 , 58.5748201565 , -45.9385652563 , 151.7952104306 , 34.2541941013 , -58.0417838381 ,
+ 28.1480473670 , 46.4006562684 , 97.7001828545 , 4.0855607626 , -32.6097018162 , 16.8913949959 , 105.7266202978 , -89.3978374651 ,
+ -60.9338593128 , -41.2220734230 , 49.9393070783 , 95.0974764854 , 49.2498366456 , 58.6214364590 , 34.1113830569 , 45.6634098874 ,
+ -22.5356086770 , -97.1978653617 , 86.5565049535 , 70.6118545777 , -30.6978082909 , 118.7238621666 , 14.5922386932 , 11.3449652072 ,
+ 65.6007783405 , 82.6369678204 , -52.0390492248 , -47.0160551227 , -95.5142448634 , 99.7162626888 , -36.5523815090 , -42.8042935534 ,
+ 68.3566199798 , -13.8451547552 , -71.1629911780 , 36.2989433752 , -32.4867163365 , 112.4079947071 , -75.6295117422 , 47.5276421639 ,
+ 51.8078250755 , -26.8715188457 , -9.6291144797 , 40.1999849640 , -38.4634033246 , 40.9764960915 , -26.1715730268 , 36.5996396515 ,
+ -26.9924731886 , 53.7879986570 , -83.1658398348 , 23.6381378489 , 43.8794937753 , -55.4133836419 , 90.0266130838 , 14.1036181982 ,
+ -18.1225736715 , 85.1363181151 , -62.5970846379 , -18.5291947838 , -25.7341986703 , -49.7061342931 , -59.0442763971 , 50.8960636803 ,
+ -87.6471123430 , -36.7217762531 , 22.5952364054 , 11.1107885650 , -0.5377327229 , 160.8145792630 , 73.3103441505 , 10.1656872354 ,
+ -50.4554350397 , -57.3478171016 , -15.4201715357 , -26.9135446491 , -4.9891264771 , -37.0226770057 , -80.9919535641 , 50.4418660876 ,
+ -25.8517575250 , -69.9538258421 , -17.5730160671 , 15.9405836751 , 113.9545230349 , -46.1040379057 , -94.2458635014 , -69.0338522452 ,
+ 43.5813790265 , 107.1836101171 , -55.1012654323 , -77.1529555887 , -33.1530320656 , -94.5582659641 , -53.6837586872 , 27.0680381378 ,
+ 93.9385415207 , -61.0955216188 , 18.0530957225 , 7.9150142320 , -12.1218191587 , 34.0173961457 , 40.0084937565 , 9.8119275580 ,
+ 44.2065861274 , -1.8718514394 , 67.4740024215 , 46.7391150131 , 207.2404815875 , 45.1635364462 , 43.3580102761 , -44.0244218674 ,
+ 83.2387206007 , -8.6441851856 , 12.3993902588 , -22.5091685270 , -19.8332981376 , 97.9196509289 , -76.6720306234 , 28.9740705859 ,
+ 121.9415248016 , 9.6656982611 , -51.0996453694 , 37.3704374740 , 74.7589840907 , -113.4066752631, 120.0029566342 , -105.3786221360,
+ 81.8152755619 , -13.4979932982 , -21.4680758393 , -85.1088235539 , -65.3610798409 , -35.0444139470 , -48.0220794487 , -41.6210317362 ,
+ 33.1212995259 , -82.1480936443 , -10.5479715135 , 76.4601917004 , 42.1983651157 , 92.6104239912 , -42.3536237955 , -24.5644182272 ,
+ 30.4446637772 , -90.2899420489 , 63.6723540422 , 103.0895811428 , 64.1706769263 , -10.7069812309 , 21.8927240409 , 6.3571071738 ,
+ 57.1457649358 , -52.9866276448 , 66.0981829072 , -29.5372056881 , -79.2252039810 , -136.2440652798, -57.0106422562 , 86.8203548141 ,
+ 66.4244149837 , 53.3230426111 , -66.1283059222 , -131.0402660353, 8.0548411081 , 122.9088988100 , 1.2626894208 , -60.5059112373 ,
+ -68.8707203082 , -6.4747987200 , 85.8411327244 , 99.9624156733 , 90.4197864338 , -35.9630441182 , -22.9158275507 , -17.3660128776 ,
+ 16.7845345761 , 34.7219749782 , -39.3513765878 , 1.0460702756 , -60.9494500182 , 20.0900333387 , -85.9636743832 , 88.4400782168 ,
+ 15.0729628728 , 61.5499846243 , 11.8579871757 , 107.8617581581 , -42.9393027864 , -62.8422307621 , -19.0589600542 , 4.0750325807 ,
+ -36.0651825425 , 55.7638724501 , -10.4691736080 , -55.5672537178 , -61.2061519915 , -21.1885348576 , -131.2535612498, 24.7463552676 ,
+ 22.9426321237 , 14.3038202264 , -138.0926317438, -59.0892900856 , -162.5416439986, 7.1307658250 , -141.1236672256, -4.7173618068 ,
+ -16.7741532807 , -68.2615451173 , -2.6608701102 , 84.1978109826 , -11.3446202072 , 59.9630033088 , -1.8994925010 , -37.9301641959 ,
+ -119.4435600954, -11.4587491646 , 12.2423215240 , -7.3169898616 , -67.0373621128 , 36.0198843055 , 53.9791315249 , -134.5885680695,
+ -83.8330811965 , -16.6714816463 , -8.8498552035 , -24.0513088196 , -22.9444328877 , -37.7961441531 , 25.1975736186 , -136.1611637464,
+ -5.0843464033 , -10.3939554694 , 20.7422826935 , 75.6854136623 , 46.4179626736 , -57.0052830175 , 7.3457235521 , -51.5504447254 ,
+ -158.4375751701, -200.2426967181, -48.1234996261 , 1.6623945527 , 21.1746524375 , 99.4092980367 , -2.3206772903 , 45.7989166757 ,
+ 2.0181548348 , -88.0556010969 , -59.1527212096 , 47.3607925077 , -10.4181140309 , 56.3558125650 , -8.9799125560 , -30.0376711812 ,
+ -36.7132904688 , 35.7785050392 , -13.0763909369 , -2.1855594714 , 18.1550954005 , -28.6711803575 , -55.4495172398 , -2.8812973198 ,
+ -59.9575059158 , 40.0588875786 , 57.4713686602 , -3.2835144853 , -36.7193552111 , -64.9415131516 , -166.9555466445, -23.5556853844 ,
+ -54.9408569587 , -35.2310451959 , 21.3345143458 , 65.7590671151 , 51.2214538168 , 46.1271939944 , -42.2235267919 , 127.2329928299 ,
+ 105.2391778600 , 17.6726845966 , -129.9021148044, 8.7065613044 , -94.0987112511 , -3.5375742950 , -23.1385452379 , 60.6219530633 ,
+ 92.5445564235 , 48.5111974469 , -52.5699309159 , -60.0634811685 , 25.9034368684 , 140.0249495491 , 1.5918852392 , 38.0266038291 ,
+ 17.5588710703 , 3.4294066089 , -27.6748782173 , 59.6182974489 , -35.2924781853 , -38.6198576115 , -13.6119803198 , 7.8375587489 ,
+ 22.7250686519 , -28.3524510951 , -34.4269062817 , 22.6464817325 , -61.6528147860 , -5.9782002429 , 61.4730771294 , 43.5582379527 ,
+ 55.6862408270 , 87.8745651631 , 46.3401042715 , -19.8780979663 , 74.1272633369 , 29.8590452377 , -12.8665765140 , 34.2931401219 ,
+ 53.9279617551 , -16.9017895140 , -70.1527553166 , -79.6367897992 , 109.3728271017 , -129.2214826835, -53.4644539730 , -51.5654458993 ,
+ 17.6062148433 , 3.5090251835 , 74.2615941204 , -109.3431097845, 40.1403465151 , 28.8714561280 , 94.0868659302 , -19.0047033845 ,
+ -60.0967410050 , -19.0998457619 , -67.2027075128 , 72.0711434846 , -17.8737851232 , 123.7050551274 , 132.6331504104 , 25.5018761009 ,
+ -36.7817189239 , -29.1580893235 , -6.5848563828 , 90.2868948516 , -35.7017258498 , -68.5675432955 , -52.4888589786 , 47.1377730021 ,
+ -7.4546621940 , -52.0657517138 , -49.0404829633 , -114.6910280126, -117.6819819437, -32.7856729408 , 31.8232065591 , 12.1192973039 ,
+ 35.2678513420 , -1.0336778293 , 30.7021249679 , 127.0442906046 , -84.8457819393 , 28.9862843096 , -47.3524701726 , -126.1094998460,
+ -2.9700276582 , -2.4956545870 , -53.8624121141 , -85.2114117637 , 76.9057985618 , 137.1205201755 , -19.0830817212 , 14.3407526579 ,
+ -56.5921994449 , -25.6084873186 , -44.9470801106 , -133.3139496090, 0.3487447576 , 33.4499716730 , 34.7126257844 , -9.3307383323 ,
+ 27.2996276947 , 10.8765676134 , -91.1032360444 , -90.9584216222 , 1.6981490570 , 96.8557438791 , 56.7726390913 , -44.3246449237 ,
+ 52.3260643361 , 21.5551140465 , 27.4535327381 , 2.0072717479 , 7.4823125629 , 77.1185863870 , 16.1372262663 , -10.7206012957 ,
+ 66.8830091413 , 49.3523828287 , 54.0855375598 , 30.8570349345 , -10.9255375390 , 62.3910624674 , 30.9238561381 , 0.3352881853 ,
+ 72.1022806197 , -28.8319885008 , 23.3335288806 , 46.8999035980 , -67.0984424822 , -164.7917209112, 42.5767681360 , -92.4668227688 ,
+ 43.8491734282 , -17.1126540408 , 37.4819594334 , 69.0774409673 , -39.3530526854 , -14.0693747124 , -60.2520781215 , -80.3860105519 ,
+ 32.6689956840 , 15.3393042576 , -18.5529761307 , 97.3942151573 , -4.4462855745 , 13.7614349817 , 158.3358780719 , -44.7258299667 ,
+ -17.7741912819 , 116.5136962268 , -33.6261057820 , 22.8344441288 , -155.1423976144, 5.7070117893 , -22.7906543902 , -45.0633909283 ,
+ -13.9329987929 , -66.0848932507 , 1.1383038109 , 123.8386958483 , 67.6662401589 , 45.9152963554 , -27.4397697462 , 97.9596747354 ,
+ -6.3544655181 , 29.0832146722 , 96.3468162499 , 32.4535976137 , -91.0650399301 , 2.7293262791 , 70.7853483111 , -92.3655274571 ,
+ 69.0359217256 , 83.1530567979 , 35.8375091111 , 7.3393552348 , -95.1770165365 , 76.4905790891 , 55.6253140577 , -29.5315327050 ,
+ -16.5935468750 , 20.4574192236 , -88.7897972666 , -38.6285080386 , 53.3203422726 , 98.5991486746 , 122.7305462474 , 67.7902817187 ,
+ 5.1764117389 , 5.0632821624 , 21.9288789574 , -78.3140512638 , -21.2069682335 , 23.6342010925 , 34.4445769455 , 59.1346766615 ,
+ 28.9978778000 , 39.8121180845 , -17.1650033520 , -56.9174900874 , 17.8157086148 , -112.8801457350, -122.4019040408, 140.8669393157 ,
+ -65.4664329639 , 40.6952775518 , 32.7260891658 , -43.2565155866 , 19.3945751928 , -20.1815002000 , -67.6601711640 , -18.1921178207 ,
+ -35.6802153684 , -19.6571455162
+};
+
+/*--------------------------------------------------------------------------------*/
+/* Blocksizes */
+/*--------------------------------------------------------------------------------*/
+ARR_DESC_DEFINE(uint32_t,
+ filtering_blocksizes,
+ 5,
+ CURLY(
+ 1, 7, 14, 32, FILTERING_MAX_BLOCKSIZE));
+
+ARR_DESC_DEFINE(uint32_t,
+ lms_blocksizes,
+ 3,
+ CURLY(
+ 128, 256, LMS_MAX_BLOCKSIZE));
+
+ARR_DESC_DEFINE(uint16_t,
+ filtering_numtaps,
+ 5,
+ CURLY(
+ 4, 6, 14, 32, FILTERING_MAX_NUMTAPS));
+
+ARR_DESC_DEFINE(uint16_t,
+ filtering_numtaps2,
+ 5,
+ CURLY(
+ 6, 12, 18, 24, 30));
+
+ARR_DESC_DEFINE(uint16_t,
+ filtering_numstages,
+ 3,
+ CURLY(
+ 1, 7, FILTERING_MAX_NUMSTAGES));
+
+ARR_DESC_DEFINE(uint8_t,
+ filtering_postshifts,
+ 3,
+ CURLY(
+ 0, 1, FILTERING_MAX_POSTSHIFT));
+
+ARR_DESC_DEFINE(uint8_t,
+ filtering_Ls,
+ 3,
+ CURLY(
+ 1, 2, FILTERING_MAX_L));
+
+ARR_DESC_DEFINE(uint8_t,
+ filtering_Ms,
+ 6,
+ CURLY(
+ 1, 2, 4, 7, 11, FILTERING_MAX_M));
+
+
+/*--------------------------------------------------------------------------------*/
+/* Coefficient Lists */
+/*--------------------------------------------------------------------------------*/
+
+// There must be at least max( FILTERING_MAX_NUMTAPS + 2 , FILTERING_MAX_NUMSTAGES * 6 + 2) coefficients
+const float32_t filtering_coeffs_f32[FILTERING_MAX_NUMSTAGES * 6 + 2] =
+{
+ -13.0572f, 0.0f , -97.4724f, 8.4111f , -7.2193f , -53.7577f, 22.2630f ,
+ -1.0509f , -25.9198f, 26.5207f , -12.6697f, -78.7453f, -0.6540f , 0.3119f ,
+ 13.4595f , -6.7225f , -4.1313f , -38.5974f, 3.2700f , -51.6191f, -22.4314f,
+ 0.2481f , 32.9779f , -37.6421f, 5.4469f , -7.0023f , 24.3657f , 9.9140f ,
+ 0.2870f , -13.0499f, 29.3333f , -53.1396f, -2.7555f , 0.5377f , 35.3491f ,
+ -3.7134f , 0.8548f , 4.7469f , -10.5865f, -2.7285f , -1.5912f , -13.3502f,
+ 6.8532f , -8.2304f , -8.1193f , 3.8257f , -2.1703f , 13.5727f , 14.2736f ,
+ -0.9855f , -8.9334f , -13.8883f, 11.8430f , -2.2024f , 0.9795f , 15.6191f ,
+ 5.2121f , 10.8102f , -9.4171f , 6.0411f , -0.9131f , 10.6992f , -3.2634f ,
+ 7.5849f , -4.9305f , -6.0549f , -7.9409f , 1.5827f , 13.3177f , 8.6727f ,
+ -13.2268f , 11.1239f , 0.2481f , 32.9779f , -37.6421f, 5.4469f , -13.8883f,
+ 11.8430f , -2.2024f , 0.9795f , 15.6191f , 0.2481f , 32.9779f , -37.6421f,
+ 3.2700f , -51.6191f
+};
+const float64_t filtering_coeffs_f64[FILTERING_MAX_NUMSTAGES * 6 + 2] =
+{
+ -13.0572f, 0.0f , -97.4724f, 8.4111f , -7.2193f , -53.7577f, 22.2630f ,
+ -1.0509f , -25.9198f, 26.5207f , -12.6697f, -78.7453f, -0.6540f , 0.3119f ,
+ 13.4595f , -6.7225f , -4.1313f , -38.5974f, 3.2700f , -51.6191f, -22.4314f,
+ 0.2481f , 32.9779f , -37.6421f, 5.4469f , -7.0023f , 24.3657f , 9.9140f ,
+ 0.2870f , -13.0499f, 29.3333f , -53.1396f, -2.7555f , 0.5377f , 35.3491f ,
+ -3.7134f , 0.8548f , 4.7469f , -10.5865f, -2.7285f , -1.5912f , -13.3502f,
+ 6.8532f , -8.2304f , -8.1193f , 3.8257f , -2.1703f , 13.5727f , 14.2736f ,
+ -0.9855f , -8.9334f , -13.8883f, 11.8430f , -2.2024f , 0.9795f , 15.6191f ,
+ 5.2121f , 10.8102f , -9.4171f , 6.0411f , -0.9131f , 10.6992f , -3.2634f ,
+ 7.5849f , -4.9305f , -6.0549f , -7.9409f , 1.5827f , 13.3177f , 8.6727f ,
+ -13.2268f , 11.1239f , 0.2481f , 32.9779f , -37.6421f, 5.4469f , -13.8883f,
+ 11.8430f , -2.2024f , 0.9795f , 15.6191f , 0.2481f , 32.9779f , -37.6421f,
+ 3.2700f , -51.6191f
+};
+
+const float32_t filtering_coeffs_b_f32[FILTERING_MAX_NUMSTAGES * 6 + 2] =
+{
+ -0.0572f, 0.0f , -0.4724f, 0.4111f , -0.9999f, -0.7577f, 0.2630f ,
+ -0.0509f, -1.0000f, 0.5207f , -0.6697f, -0.7453f, -0.6540f, 0.3119f ,
+ 0.4595f , -0.7225f, -0.1313f, -0.5974f, 0.2700f , -0.6191f, -0.4314f,
+ 0.2481f , 0.9779f , -0.6421f, 0.4469f , -0.0023f, 0.3657f , 0.9140f ,
+ 0.2870f , -0.0499f, 0.3333f , -0.1396f, -0.7555f, 0.5377f , 0.3491f ,
+ 0.2369f , -0.5310f, -0.5904f, 0.6263f , 0.0205f , 0.1088f , -0.2926f,
+ -0.4187f, -0.5094f, 0.4479f , -0.3594f, -0.3102f, 0.6748f , 0.7620f ,
+ 0.0033f , -0.9195f, 0.3192f , -0.1705f, 0.5524f , -0.5025f, 0.4898f ,
+ -0.0119f, -0.3982f, -0.7818f, -0.9186f, -0.0944f, 0.7228f , 0.7014f ,
+ 0.4850f , -0.6814f, 0.4914f , -0.6286f, 0.5130f , -0.8585f, 0.3000f ,
+ 0.6068f , 0.4978f , -0.7225f, -0.1313f, -0.5974f, 0.2700f , -0.6191f,
+ 0.2481f , 0.9779f , -0.6421f, 0.4469f , -0.0023f, 0.3657f , 0.9140f ,
+ 0.2369f , -0.5310f
+};
+
+const float64_t filtering_coeffs_b_f64[FILTERING_MAX_NUMSTAGES * 6 + 2] =
+{
+ -0.0572f, 0.0f , -0.4724f, 0.4111f , -0.9999f, -0.7577f, 0.2630f ,
+ -0.0509f, -1.0000f, 0.5207f , -0.6697f, -0.7453f, -0.6540f, 0.3119f ,
+ 0.4595f , -0.7225f, -0.1313f, -0.5974f, 0.2700f , -0.6191f, -0.4314f,
+ 0.2481f , 0.9779f , -0.6421f, 0.4469f , -0.0023f, 0.3657f , 0.9140f ,
+ 0.2870f , -0.0499f, 0.3333f , -0.1396f, -0.7555f, 0.5377f , 0.3491f ,
+ 0.2369f , -0.5310f, -0.5904f, 0.6263f , 0.0205f , 0.1088f , -0.2926f,
+ -0.4187f, -0.5094f, 0.4479f , -0.3594f, -0.3102f, 0.6748f , 0.7620f ,
+ 0.0033f , -0.9195f, 0.3192f , -0.1705f, 0.5524f , -0.5025f, 0.4898f ,
+ -0.0119f, -0.3982f, -0.7818f, -0.9186f, -0.0944f, 0.7228f , 0.7014f ,
+ 0.4850f , -0.6814f, 0.4914f , -0.6286f, 0.5130f , -0.8585f, 0.3000f ,
+ 0.6068f , 0.4978f , -0.7225f, -0.1313f, -0.5974f, 0.2700f , -0.6191f,
+ 0.2481f , 0.9779f , -0.6421f, 0.4469f , -0.0023f, 0.3657f , 0.9140f ,
+ 0.2369f , -0.5310f
+};
+
+const float32_t *filtering_coeffs_c_f32 = filtering_coeffs_b_f32 + 1;
+
+const q31_t filtering_coeffs_q31[FILTERING_MAX_NUMSTAGES * 6 + 2] =
+{
+ 0xEEDA759C, 0x00000000, 0x80000000, 0x0B0BA027, 0xF6850544, 0xB967E3EC,
+ 0x1D3C4F64, 0xFFFFFFFF, 0xDDF65B14, 0x22D3A62D, 0xEF5CBB89, 0x98979EE0,
+ 0xFF242597, 0x0068D9E9, 0x11ACC4F3, 0xF72C0F21, 0xFA9326BC, 0xCD506BD5,
+ 0x044B50CD, 0xBC36D4BC, 0xE28B1589, 0x0053690B, 0x2B4E6639, 0xCE919690,
+ 0x0727234D, 0xF6CDFB14, 0x1FFF2FCF, 0x0D04DC35, 0x00607E4D, 0xEEDCF04A,
+ 0x268530EF, 0xBA37B050, 0x7FFFFFFF, 0xEF5CBB89, 0x00000000, 0x2B4E6639,
+ 0xFF242597, 0x0068D9E9, 0x11ACC4F3, 0xF72C0F21, 0xFA9326BC, 0xCD506BD5,
+ 0x1D3C4F64, 0xFFFFFFFF, 0xDDF65B14, 0x22D3A62D, 0xEF5CBB89, 0x98979EE0,
+ 0x044B50CD, 0xBC36D4BC, 0xE28B1589, 0x0053690B, 0x2B4E6639, 0xCE919690,
+ 0x0727234D, 0xF6CDFB14, 0x1FFF2FCF, 0x0D04DC35, 0x00607E4D, 0xEEDCF04A,
+ 0xE28B1589, 0x0053690B, 0x044B50CD, 0xBC36D4BC, 0xE28B1589, 0xB967E3EC,
+ 0x044B50CD, 0xBC36D4BC, 0xE28B1589, 0x0053690B, 0x2B4E6639, 0xCE919690,
+ 0x1FFF2FCF, 0x0D04DC35, 0x00607E4D, 0xEEDCF04A, 0xFFFFFFFF, 0xDDF65B14,
+ 0xFF242597, 0x0068D9E9, 0x11ACC4F3, 0xF72C0F21, 0xFA9326BC, 0xCD506BD5,
+ 0x2B4E6639, 0xCE919690
+};
+
+const q31_t *filtering_coeffs_b_q31 = filtering_coeffs_q31 + 1;
+const q31_t *filtering_coeffs_c_q31 = filtering_coeffs_q31 + 2;
+
+//fourth coefficient MUST be zero for arm_biquad_cascade_df1_fast_q15 to work
+//every 6th coefficient after that must also be zero
+const q15_t filtering_coeffs_q15[FILTERING_MAX_NUMSTAGES * 6 + 4] =
+{
+ 0xBA37, 0xEEDA, 0x8000, 0x0000, 0x0B0B, 0xF685, 0xB967,
+ 0x1D3C, 0xFFFF, 0x0000, 0x22D3, 0xEF5C, 0x9897,
+ 0xFF24, 0x0068, 0x0000, 0xF72C, 0xFA93, 0xCD50,
+ 0x044B, 0xBC36, 0x0000, 0x0053, 0x2B4E, 0xCE91,
+ 0x0727, 0xF6CD, 0x0000, 0x0D04, 0x0060, 0xEEDC,
+ 0x2685, 0xBA37, 0x0000, 0xDDF6, 0x0000, 0x2B4E,
+ 0xFF24, 0x0068, 0x0000, 0xF72C, 0xFA93, 0xCD50,
+ 0x1D3C, 0xFFFF, 0x0000, 0x22D3, 0xEF5C, 0x9897,
+ 0x044B, 0xBC36, 0x0000, 0x0053, 0x2B4E, 0xCE91,
+ 0x0727, 0xF6CD, 0x0000, 0x0D04, 0x0060, 0xEEDC,
+ 0xE28B, 0x0053, 0x0000, 0xBC36, 0xE28B, 0xB967,
+ 0x044B, 0xBC36, 0x0000, 0x0053, 0x2B4E, 0xCE91,
+ 0x044B, 0xBC36, 0x0000, 0x0053, 0x2B4E, 0xCE91,
+ 0x0727, 0xF6CD, 0x0000, 0x0D04, 0x0060, 0xEEDC,
+ 0xE28B, 0x11AC, 0x0000,
+};
+
+const q15_t *filtering_coeffs_b_q15 = filtering_coeffs_q15 + 2;
+const q15_t *filtering_coeffs_c_q15 = filtering_coeffs_q15 + 4;
+
+const q7_t filtering_coeffs_q7[FILTERING_MAX_NUMSTAGES * 6 + 8] =
+{
+ 0xEE, 0x00, 0x80, 0x0B, 0xF6, 0xB9,
+ 0x1D, 0xFF, 0xDD, 0x22, 0xEF, 0x98,
+ 0xFF, 0x00, 0x11, 0xF7, 0xFA, 0xCD,
+ 0x04, 0xBC, 0xE2, 0x00, 0x2B, 0xCE,
+ 0x07, 0xF6, 0x1F, 0x0D, 0x00, 0xEE,
+ 0x26, 0xBA, 0x7F, 0x00, 0x80, 0x2B,
+ 0xFF, 0x00, 0x11, 0xF7, 0xFA, 0xCD,
+ 0x1D, 0xFF, 0xDD, 0x22, 0xEF, 0x98,
+ 0x04, 0xBC, 0xE2, 0x00, 0x2B, 0xCE,
+ 0x07, 0xF6, 0x1F, 0x0D, 0x00, 0xEE,
+ 0xE2, 0x00, 0x04, 0xBC, 0xE2, 0xB9,
+ 0x04, 0xBC, 0xE2, 0x00, 0x2B, 0xCE,
+ 0x07, 0xF6, 0x1F, 0x0D, 0x00, 0xEE,
+ 0x26, 0xBA, 0x7F, 0x00, 0x80, 0x2B,
+ 0x07, 0xF6, 0x1F, 0x0D, 0x00, 0xEE,
+ 0xFA, 0xCD
+};
+
+const q7_t *filtering_coeffs_b_q7 = filtering_coeffs_q7 + 4;
+const q7_t *filtering_coeffs_c_q7 = filtering_coeffs_q7 + 8;
+
+/*--------------------------------------------------------------------------------*/
+/* Tap Delay Lists */
+/*--------------------------------------------------------------------------------*/
+//const int32_t filtering_tap_delay[FILTERING_MAX_NUMTAPS] = {
+// 0xEE, 0x00, 0x10, 0x0B, 0xF6, 0xD9,
+// 0x1D, 0xFF, 0xDD, 0x1A, 0xEF, 0xE8,
+// 0xFF, 0x00, 0x11, 0xF7, 0xFA, 0xDD,
+// 0x04, 0xEC, 0xE2, 0x00, 0x2B, 0xFE,
+// 0x07, 0xF6, 0x1F, 0x0D, 0x00, 0xEE,
+// 0x20, 0xDF, 0x21
+//};
+
+const int32_t filtering_tap_delay[FILTERING_MAX_NUMTAPS] = {
+ 0x00, 0x01, 0x10, 0x0B, 0x03, 0x05,
+ 0x1D, 0x21, 0x11, 0x1A, 0x1F, 0x07,
+ 0x20, 0x01, 0x10, 0x0B, 0x03, 0x05,
+ 0x1D, 0x21, 0x11, 0x1A, 0x1F, 0x07,
+ 0x00, 0x01, 0x10, 0x0B, 0x03, 0x05,
+ 0x1D, 0x21, 0x11
+};
+
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_group.c new file mode 100644 index 0000000..fb59448 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/filtering_test_group.c @@ -0,0 +1,17 @@ +#include "jtest.h"
+#include "filtering_tests.h"
+
+JTEST_DEFINE_GROUP(filtering_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_GROUP_CALL(biquad_tests);
+ JTEST_GROUP_CALL(conv_tests);
+ JTEST_GROUP_CALL(correlate_tests);
+ JTEST_GROUP_CALL(fir_tests);
+ JTEST_GROUP_CALL(iir_tests);
+ JTEST_GROUP_CALL(lms_tests);
+
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/fir_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/fir_tests.c new file mode 100644 index 0000000..40e52b2 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/fir_tests.c @@ -0,0 +1,402 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+#define FIR_DEFINE_TEST(suffix, config_suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir##config_suffix##_##suffix##_test, \
+ arm_fir##config_suffix##_##suffix) \
+ { \
+ arm_fir_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ /* Initialize the FIR Instances */ \
+ arm_fir_init_##suffix( \
+ &fir_inst_fut, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n", \
+ (int)blockSize, \
+ (int)numTaps); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir##config_suffix##_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_fir_init_##suffix( \
+ &fir_inst_ref, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_fir##config_suffix##_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define FIR_INTERPOLATE_DEFINE_TEST(suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir_interpolate_##suffix##_test, \
+ arm_fir_interpolate_##suffix) \
+ { \
+ arm_fir_interpolate_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_interpolate_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps2 \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ L_idx, uint8_t, L, filtering_Ls \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n" \
+ "Upsample factor: %d\n", \
+ (int)blockSize, \
+ (int)numTaps, \
+ (int)L); \
+ \
+ /* Initialize the FIR Instances */ \
+ arm_fir_interpolate_init_##suffix( \
+ &fir_inst_fut, L, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir_interpolate_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_fir_interpolate_init_##suffix( \
+ &fir_inst_ref, L, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_fir_interpolate_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize * (uint32_t)L, \
+ output_type)))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define FIR_DECIMATE_DEFINE_TEST(suffix, config_suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir_decimate##config_suffix##_##suffix##_test, \
+ arm_fir_decimate##config_suffix##_##suffix) \
+ { \
+ arm_fir_decimate_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_decimate_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ M_idx, uint8_t, M, filtering_Ms \
+ , \
+ if (blockSize % M == 0) \
+ { \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n" \
+ "Decimation Factor: %d\n", \
+ (int)blockSize, \
+ (int)numTaps, \
+ (int)M); \
+ \
+ /* Initialize the FIR Instances */ \
+ arm_fir_decimate_init_##suffix( \
+ &fir_inst_fut, numTaps, M, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir_decimate##config_suffix##_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_fir_decimate_init_##suffix( \
+ &fir_inst_ref, numTaps, M, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_fir_decimate##config_suffix##_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize / M, \
+ output_type); \
+ }))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define FIR_LATTICE_DEFINE_TEST(suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir_lattice_##suffix##_test, \
+ arm_fir_lattice_##suffix) \
+ { \
+ arm_fir_lattice_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_lattice_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n", \
+ (int)blockSize, \
+ (int)numStages); \
+ \
+ /* Initialize the FIR Instances */ \
+ arm_fir_lattice_init_##suffix( \
+ &fir_inst_fut, numStages, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir_lattice_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_fir_lattice_init_##suffix( \
+ &fir_inst_ref, numStages, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState); \
+ \
+ ref_fir_lattice_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+
+#define FIR_SPARSE_DEFINE_TEST(suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir_sparse_##suffix##_test, \
+ arm_fir_sparse_##suffix) \
+ { \
+ arm_fir_sparse_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_sparse_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n" \
+ "Tap Delay: %d\n", \
+ (int)blockSize, \
+ (int)numTaps, \
+ (int)FILTERING_MAX_TAP_DELAY); \
+ \
+ /* Initialize the FIR Instances */ \
+ arm_fir_sparse_init_##suffix( \
+ &fir_inst_fut, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, \
+ (int32_t*)filtering_tap_delay, \
+ FILTERING_MAX_TAP_DELAY, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir_sparse_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ (void *) filtering_scratch, \
+ blockSize)); \
+ \
+ arm_fir_sparse_init_##suffix( \
+ &fir_inst_ref, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, \
+ (int32_t*)filtering_tap_delay, \
+ FILTERING_MAX_TAP_DELAY, blockSize); \
+ \
+ ref_fir_sparse_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ (void *) filtering_scratch, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define FIR_SPARSE2_DEFINE_TEST(suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_fir_sparse_##suffix##_test, \
+ arm_fir_sparse_##suffix) \
+ { \
+ arm_fir_sparse_instance_##suffix fir_inst_fut = { 0 }; \
+ arm_fir_sparse_instance_##suffix fir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n" \
+ "Tap Delay: %d\n", \
+ (int)blockSize, \
+ (int)numTaps, \
+ (int)FILTERING_MAX_TAP_DELAY); \
+ \
+ /* Initialize the FIR Instances */ \
+ arm_fir_sparse_init_##suffix( \
+ &fir_inst_fut, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, \
+ (int32_t*)filtering_tap_delay, \
+ FILTERING_MAX_TAP_DELAY, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_fir_sparse_##suffix( \
+ &fir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ (void *) filtering_scratch, \
+ (void *) filtering_scratch2, \
+ blockSize)); \
+ \
+ arm_fir_sparse_init_##suffix( \
+ &fir_inst_ref, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, \
+ (int32_t*)filtering_tap_delay, \
+ FILTERING_MAX_TAP_DELAY, blockSize); \
+ \
+ ref_fir_sparse_##suffix( \
+ &fir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ (void *) filtering_scratch, \
+ (void *) filtering_scratch2, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+FIR_DEFINE_TEST(f32,,float32_t);
+FIR_DEFINE_TEST(q31,,q31_t);
+FIR_DEFINE_TEST(q15,,q15_t);
+FIR_DEFINE_TEST(q31,_fast,q31_t);
+FIR_DEFINE_TEST(q15,_fast,q15_t);
+FIR_DEFINE_TEST(q7,,q7_t);
+
+FIR_LATTICE_DEFINE_TEST(f32,float32_t);
+FIR_LATTICE_DEFINE_TEST(q31,q31_t);
+FIR_LATTICE_DEFINE_TEST(q15,q15_t);
+
+FIR_INTERPOLATE_DEFINE_TEST(f32,float32_t);
+FIR_INTERPOLATE_DEFINE_TEST(q31,q31_t);
+FIR_INTERPOLATE_DEFINE_TEST(q15,q15_t);
+
+FIR_DECIMATE_DEFINE_TEST(f32,,float32_t);
+FIR_DECIMATE_DEFINE_TEST(q31,,q31_t);
+FIR_DECIMATE_DEFINE_TEST(q15,,q15_t);
+FIR_DECIMATE_DEFINE_TEST(q31,_fast,q31_t);
+FIR_DECIMATE_DEFINE_TEST(q15,_fast,q15_t);
+
+FIR_SPARSE_DEFINE_TEST(f32,float32_t);
+FIR_SPARSE_DEFINE_TEST(q31,q31_t);
+FIR_SPARSE2_DEFINE_TEST(q15,q15_t);
+FIR_SPARSE2_DEFINE_TEST(q7,q7_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(fir_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_fir_f32_test);
+ JTEST_TEST_CALL(arm_fir_q31_test);
+ JTEST_TEST_CALL(arm_fir_q15_test);
+ JTEST_TEST_CALL(arm_fir_q7_test);
+ JTEST_TEST_CALL(arm_fir_fast_q31_test);
+ JTEST_TEST_CALL(arm_fir_fast_q15_test);
+
+ JTEST_TEST_CALL(arm_fir_lattice_f32_test);
+ JTEST_TEST_CALL(arm_fir_lattice_q31_test);
+ JTEST_TEST_CALL(arm_fir_lattice_q15_test);
+
+ JTEST_TEST_CALL(arm_fir_interpolate_f32_test);
+ JTEST_TEST_CALL(arm_fir_interpolate_q31_test);
+ JTEST_TEST_CALL(arm_fir_interpolate_q15_test);
+
+ JTEST_TEST_CALL(arm_fir_decimate_f32_test);
+ JTEST_TEST_CALL(arm_fir_decimate_q31_test);
+ JTEST_TEST_CALL(arm_fir_decimate_q15_test);
+ JTEST_TEST_CALL(arm_fir_decimate_fast_q31_test);
+ JTEST_TEST_CALL(arm_fir_decimate_fast_q15_test);
+
+ JTEST_TEST_CALL(arm_fir_sparse_f32_test);
+ JTEST_TEST_CALL(arm_fir_sparse_q31_test);
+ JTEST_TEST_CALL(arm_fir_sparse_q15_test);
+ JTEST_TEST_CALL(arm_fir_sparse_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/iir_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/iir_tests.c new file mode 100644 index 0000000..8d31c3f --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/iir_tests.c @@ -0,0 +1,76 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+#define IIR_DEFINE_TEST(suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_iir_lattice_##suffix##_test, \
+ arm_iir_lattice_##suffix) \
+ { \
+ arm_iir_lattice_instance_##suffix iir_inst_fut = { 0 }; \
+ arm_iir_lattice_instance_##suffix iir_inst_ref = { 0 }; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, filtering_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numstages_idx, uint16_t, numStages, filtering_numstages \
+ , \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Stages: %d\n", \
+ (int)blockSize, \
+ (int)numStages); \
+ \
+ /* Initialize the IIR Instances */ \
+ arm_iir_lattice_init_##suffix( \
+ &iir_inst_fut, numStages, (output_type*)filtering_coeffs_b_##suffix, \
+ (output_type*)filtering_coeffs_c_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_iir_lattice_##suffix( \
+ &iir_inst_fut, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_fut, \
+ blockSize)); \
+ \
+ arm_iir_lattice_init_##suffix( \
+ &iir_inst_ref, numStages, (output_type*)filtering_coeffs_b_##suffix, \
+ (output_type*)filtering_coeffs_c_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_iir_lattice_##suffix( \
+ &iir_inst_ref, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_output_ref, \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+IIR_DEFINE_TEST(f32, float32_t);
+IIR_DEFINE_TEST(q31, q31_t);
+IIR_DEFINE_TEST(q15, q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(iir_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_iir_lattice_f32_test);
+ JTEST_TEST_CALL(arm_iir_lattice_q31_test);
+ JTEST_TEST_CALL(arm_iir_lattice_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/lms_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/lms_tests.c new file mode 100644 index 0000000..06e96b6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/filtering_tests/lms_tests.c @@ -0,0 +1,219 @@ +#include "jtest.h"
+#include "filtering_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "filtering_templates.h"
+#include "type_abbrev.h"
+
+static const float32_t mu_f32 = 0.00854f;//1.0f;
+static const float32_t mu2_f32 = 1.0f;
+static const q31_t mu_q31 = 0x7fffffff;
+static const q15_t mu_q15 = 0x7fff;
+
+#define LMS_DEFINE_TEST(suffix, config_suffix, output_type, mu) \
+ JTEST_DEFINE_TEST(arm_lms##config_suffix##_##suffix##_test, \
+ arm_lms##config_suffix##_##suffix) \
+ { \
+ arm_lms##config_suffix##_instance_##suffix lms_inst_fut = { 0 }; \
+ arm_lms##config_suffix##_instance_##suffix lms_inst_ref = { 0 }; \
+ arm_fir_instance_##suffix fir_inst = { 0 }; \
+ uint32_t i; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, lms_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ /* Initialize the FIR Instances */ \
+ arm_fir_init_##suffix( \
+ &fir_inst, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_fir_##suffix( \
+ &fir_inst, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_input_lms, \
+ blockSize); \
+ \
+ for(i=0;i<numTaps;i++) \
+ { \
+ *((output_type*)filtering_coeffs_lms + i) = (output_type)0; \
+ } \
+ \
+ for(i=0;i<blockSize;i++) \
+ { \
+ /* scaled down so that lms will converge */ \
+ /* scaled down by almost the max of the abs(input) */ \
+ *((output_type*)filtering_input_lms + i) = \
+ *((output_type*)filtering_input_lms + i) / 200.0f; \
+ \
+ *((output_type*)filtering_output_f32_fut + i) = \
+ *((output_type*)filtering_##suffix##_inputs + i) / 200.0f; \
+ } \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n", \
+ (int)blockSize, \
+ (int)numTaps); \
+ \
+ /* Initialize the LMS Instances */ \
+ arm_lms##config_suffix##_init_##suffix( \
+ &lms_inst_fut, numTaps, \
+ (output_type*)filtering_coeffs_lms, \
+ (void *) filtering_pState, mu, blockSize); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_lms##config_suffix##_##suffix( \
+ &lms_inst_fut, \
+ (void *) filtering_output_f32_fut, \
+ (void *) filtering_input_lms, \
+ (void *) filtering_output_fut, \
+ (void *) ((output_type*)filtering_output_fut+blockSize), \
+ blockSize)); \
+ \
+ for(i=0;i<numTaps;i++) \
+ { \
+ *((output_type*)filtering_coeffs_lms + i) = (output_type)0; \
+ } \
+ \
+ arm_lms##config_suffix##_init_##suffix( \
+ &lms_inst_ref, numTaps, \
+ (output_type*)filtering_coeffs_lms, \
+ (void *) filtering_pState, mu, blockSize); \
+ \
+ ref_lms##config_suffix##_##suffix( \
+ &lms_inst_ref, \
+ (void *) filtering_output_f32_fut, \
+ (void *) filtering_input_lms, \
+ (void *) filtering_output_ref, \
+ (void *) ((output_type*)filtering_output_fut+blockSize), \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+#define LMS_WITH_POSTSHIFT_DEFINE_TEST(suffix, config_suffix, output_type) \
+ JTEST_DEFINE_TEST(arm_lms##config_suffix##_##suffix##_test, \
+ arm_lms##config_suffix##_##suffix) \
+ { \
+ arm_lms##config_suffix##_instance_##suffix lms_inst_fut = { 0 }; \
+ arm_lms##config_suffix##_instance_##suffix lms_inst_ref = { 0 }; \
+ arm_fir_instance_##suffix fir_inst = { 0 }; \
+ uint32_t i; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ blocksize_idx, uint32_t, blockSize, lms_blocksizes \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ numtaps_idx, uint16_t, numTaps, filtering_numtaps \
+ , \
+ TEMPLATE_DO_ARR_DESC( \
+ postshifts_idx, uint8_t, postShift, filtering_postshifts \
+ , \
+ /* Initialize the FIR Instances */ \
+ arm_fir_init_##suffix( \
+ &fir_inst, numTaps, \
+ (output_type*)filtering_coeffs_##suffix, \
+ (void *) filtering_pState, blockSize); \
+ \
+ ref_fir_##suffix( \
+ &fir_inst, \
+ (void *) filtering_##suffix##_inputs, \
+ (void *) filtering_input_lms, \
+ blockSize); \
+ \
+ for(i=0;i<numTaps;i++) \
+ { \
+ *((output_type*)filtering_coeffs_lms + i) = (output_type)0; \
+ } \
+ \
+ for(i=0;i<blockSize;i++) \
+ { \
+ /* scaled down so that lms will converge */ \
+ /* scaled down by log2(numTaps) bits */ \
+ *((output_type*)filtering_output_f32_fut + i) = \
+ *((output_type*)filtering_##suffix##_inputs + i) >> 6; \
+ } \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Number of Taps: %d\n" \
+ "Post Shift: %d\n", \
+ (int)blockSize, \
+ (int)numTaps, \
+ (int)postShift); \
+ \
+ /* Initialize the LMS Instances */ \
+ arm_lms##config_suffix##_init_##suffix( \
+ &lms_inst_fut, numTaps, \
+ (output_type*)filtering_coeffs_lms, \
+ (void *) filtering_pState, mu_##suffix, blockSize, postShift); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_lms##config_suffix##_##suffix( \
+ &lms_inst_fut, \
+ (void *) filtering_output_f32_fut, \
+ (void *) filtering_input_lms, \
+ (void *) filtering_output_fut, \
+ (void *) ((output_type*)filtering_output_fut+blockSize), \
+ blockSize)); \
+ \
+ for(i=0;i<numTaps;i++) \
+ { \
+ *((output_type*)filtering_coeffs_lms + i) = (output_type)0; \
+ } \
+ \
+ arm_lms##config_suffix##_init_##suffix( \
+ &lms_inst_ref, numTaps, \
+ (output_type*)filtering_coeffs_lms, \
+ (void *) filtering_pState, mu_##suffix, blockSize, postShift); \
+ \
+ ref_lms##config_suffix##_##suffix( \
+ &lms_inst_ref, \
+ (void *) filtering_output_f32_fut, \
+ (void *) filtering_input_lms, \
+ (void *) filtering_output_ref, \
+ (void *) ((output_type*)filtering_output_ref+blockSize), \
+ blockSize); \
+ \
+ FILTERING_SNR_COMPARE_INTERFACE( \
+ blockSize, \
+ output_type)))); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+LMS_DEFINE_TEST(f32,,float32_t, mu_f32);
+LMS_WITH_POSTSHIFT_DEFINE_TEST(q31,,q31_t);
+LMS_WITH_POSTSHIFT_DEFINE_TEST(q15,,q15_t);
+
+LMS_DEFINE_TEST(f32,_norm,float32_t, mu2_f32);
+LMS_WITH_POSTSHIFT_DEFINE_TEST(q31,_norm,q31_t);
+LMS_WITH_POSTSHIFT_DEFINE_TEST(q15,_norm,q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(lms_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_lms_f32_test);
+ JTEST_TEST_CALL(arm_lms_q31_test);
+ JTEST_TEST_CALL(arm_lms_q15_test);
+
+ JTEST_TEST_CALL(arm_lms_norm_f32_test);
+ JTEST_TEST_CALL(arm_lms_norm_q31_test);
+ JTEST_TEST_CALL(arm_lms_norm_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests.c new file mode 100644 index 0000000..5e826e7 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests.c @@ -0,0 +1,62 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "intrinsics_templates.h"
+#include "intrinsics_test_data.h"
+#include "type_abbrev.h"
+
+INTRINSICS_TEST_TEMPLATE_ELT2(__QADD8, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QSUB8, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QADD16, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SHADD16, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QSUB16, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SHSUB16, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QASX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SHASX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QSAX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SHSAX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SMUSDX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SMUADX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QADD, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__QSUB, q31);
+INTRINSICS_TEST_TEMPLATE_ELT3(__SMLAD, q31);
+INTRINSICS_TEST_TEMPLATE_ELT3(__SMLADX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT3(__SMLSDX, q31);
+INTRINSICS_TEST_TEMPLATE_ELT4(__SMLALD, q31, q63);
+INTRINSICS_TEST_TEMPLATE_ELT4(__SMLALDX, q31, q63);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SMUAD, q31);
+INTRINSICS_TEST_TEMPLATE_ELT2(__SMUSD, q31);
+INTRINSICS_TEST_TEMPLATE_ELT1(__SXTB16, q31);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(intrinsics_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(__QADD8_test);
+ JTEST_TEST_CALL(__QSUB8_test);
+ JTEST_TEST_CALL(__QADD16_test);
+ JTEST_TEST_CALL(__SHADD16_test);
+ JTEST_TEST_CALL(__QSUB16_test);
+ JTEST_TEST_CALL(__SHSUB16_test);
+ JTEST_TEST_CALL(__QASX_test);
+ JTEST_TEST_CALL(__SHASX_test);
+ JTEST_TEST_CALL(__QSAX_test);
+ JTEST_TEST_CALL(__SHSAX_test);
+ JTEST_TEST_CALL(__SMUSDX_test);
+ JTEST_TEST_CALL(__SMUADX_test);
+ JTEST_TEST_CALL(__QADD_test);
+ JTEST_TEST_CALL(__QSUB_test);
+ JTEST_TEST_CALL(__SMLAD_test);
+ JTEST_TEST_CALL(__SMLADX_test);
+ JTEST_TEST_CALL(__SMLSDX_test);
+ JTEST_TEST_CALL(__SMLALD_test);
+ JTEST_TEST_CALL(__SMLALDX_test);
+ JTEST_TEST_CALL(__SMUAD_test);
+ JTEST_TEST_CALL(__SMUSD_test);
+ JTEST_TEST_CALL(__SXTB16_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests_common_data.c new file mode 100644 index 0000000..621656d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/intrinsics_tests/intrinsics_tests_common_data.c @@ -0,0 +1,189 @@ +#include "intrinsics_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+q63_t intrinsics_output_fut[INTRINSICS_MAX_LEN] = {0};
+q63_t intrinsics_output_ref[INTRINSICS_MAX_LEN] = {0};
+float32_t intrinsics_output_f32_fut[INTRINSICS_MAX_LEN] = {0};
+float32_t intrinsics_output_f32_ref[INTRINSICS_MAX_LEN] = {0};
+
+const q63_t intrinsics_q63_inputs[INTRINSICS_MAX_LEN] =
+{
+ 0xF7D2D6F5414A5524, 0x5297DAF44CAB5A17, 0x54129B222D6F5B56, 0x54141F6F7DAF4E3B, 0x44C414A529B226EB, 0x22D4CAB541F6F6A ,
+ 0x6053A44325CE38BF, 0x33D055403A970AFA, 0x0133D0603A44382A, 0x32513D5605540F8 , 0x03A25CE33D060524, 0x03A3A97013D56570,
+ 0x3402674117D7791D, 0x72140A667FE0438C, 0x439218E426741841, 0x11739FF340A66E54, 0x67F17D77218E4386, 0x4267FE0439FF3726,
+ 0x46C411420DC177CA, 0x7156C147702F2CF5, 0x26615F6441142FF1, 0x20D662C46C1476AB, 0x7700DC1715F640DD, 0x441702F2662C4E49,
+ 0x50D4F8B538055E7E, 0x5570D192770871FE, 0x725576474F8B5360, 0x538258550D1928A0, 0x2773805557647821, 0x74F77087258558CF,
+ 0x05066D230C0C604D, 0x63650FA350A46C19, 0x66C3646266D2370D, 0x30C6CE0050FA359A, 0x3500C0C636462E24, 0x26650A466CE00F5C,
+ 0x21E3B72166D40948, 0x0731EB61355B5831, 0x577733943B72150A, 0x166773F21EB61530, 0x13566D4073394127, 0x43B355B5773F26F4,
+ 0x7221CF5118052980, 0x27A22AD1038D6587, 0x67C7A8121CF517F4, 0x1187CDC722AD1691, 0x103180527A812473, 0x21C038D67CDC7D7F,
+ 0x21A0FD604A5110D0, 0x1201A2156D895BB9, 0x53D20EB60FD60F35, 0x04A3DE621A215530, 0x56D4A51120EB6DDA, 0x60F6D8953DE62516,
+ 0x02C61E17250123E1, 0x26D2CBB35ED813C8, 0x15B6D35061E175B1, 0x7255B1402CBB32F3, 0x35E250126D350907, 0x0615ED815B140D7E,
+ 0x126418B76EAE272D, 0x23C26BB13E221841, 0x1243CF01418B7B88, 0x76E24DB126BB1B80, 0x13E6EAE23CF010E4, 0x1413E22124DB166C,
+ 0x1634700479AB7E42, 0x74163F5662DF28D1, 0x246419E047004665, 0x47946BE163F56FC6, 0x66279AB7419E0C75, 0x04762DF246BE1F38,
+ 0x63F5CE12243239B2, 0x31F3F574758D03E0, 0x0711F4455CE12926, 0x22471D563F574B74, 0x475243231F4458E2, 0x55C758D071D5639 ,
+ 0x34806EF703A17B49, 0x77D48D32173A7C76, 0x70F7D3E306EF7531, 0x7030F2F348D32F34, 0x21703A177D3E3063, 0x306173A70F2F3549,
+ 0x54426F835C314C9 , 0x42E447B118CB6B6D, 0x6502E32326F83697, 0x35C50745447B1E9C, 0x1185C3142E323A33, 0x32618CB650745715,
+ 0x51D4891001AC5746, 0x5601DA36655A4E04, 0x42060E624891060F, 0x00120BF51DA36B4F, 0x66501AC560E6227F, 0x248655A420BF5EB4,
+ 0x1154156550B3225B, 0x2181540540C10544, 0x02318586415656C , 0x550236A115405EAE, 0x54050B32185863E1, 0x64140C10236A1C4E,
+ 0x44E7736608BD21F9, 0x2614EDF52ACF7A68, 0x752617A1773665E5, 0x608524F44EDF5F66, 0x52A08BD2617A1610, 0x1772ACF7524F4968,
+ 0x06A24DC242D006CD, 0x0376A4F55F000079, 0x01D3706424DC2447, 0x2421DE706A4F5599, 0x55F42D0037064D4A, 0x4245F0001DE70608,
+ 0x44018061233A2EE5, 0x22440795137E488E, 0x44424A8118061B7B, 0x12344CE44079569D, 0x513233A224A817D5, 0x118137E444CE48F5,
+ 0x41D71AD7575F7883, 0x73C1D4A522406802, 0x6333CBC771AD70BB, 0x757335841D4A5D79, 0x522575F73CBC7CE4, 0x77122406335840D8,
+ 0x3333D19605792E47, 0x233331A427AD2C05, 0x213330353D196EAB, 0x60513D93331A40AF, 0x4270579233035831, 0x53D27AD213D93987,
+ 0x0135DC437C542094, 0x25C13796045F317E, 0x37D5C2015DC43F8B, 0x37C7DD501379650C, 0x6047C5425C20193F, 0x15D045F37DD50298,
+ 0x5275C8A71D482B82, 0x210272914A6B6062, 0x63510E165C8A757B, 0x71D355A5272917C1, 0x14A1D48210E16FBC, 0x65C4A6B6355A5882,
+ 0x1757DF7F66F86A35, 0x61A758A6604555A1, 0x5531A1137DF7FBB , 0xF6653541758A6216, 0x66066F861A113463, 0x37D6045553541BAD,
+ 0x04E1F05221576756, 0x6554EA63483B6D8D, 0x67B55B841F052FCC, 0x2217B2E04EA63DFB, 0x3482157655B84677, 0x41F483B67B2E04F2,
+ 0x41D46029787A796C, 0x71A1DB2204A12CD3, 0x2061A8C746029BD , 0x978061E41DB22DD8, 0x204787A71A8C7F28, 0x74604A12061E452E,
+ 0x66B73357132D3F78, 0x3626BBB076525852, 0x53F6253673357BBA, 0x7133F6B66BBB0A58, 0x076132D362536AFA, 0x673765253F6B65EF,
+ 0x55F66B026DC57B58, 0x7325FF601EB718CE, 0x17F3247766B02740, 0x26D7FF355FF60B47, 0x01E6DC5732477B8F, 0x7661EB717FF35302,
+ 0x7206FF9529FD3E40, 0x34720182475A43D1, 0x44C47E076FF9528A, 0x5294CF572018209D, 0x24729FD347E079C9, 0x76F475A44CF576D3,
+ 0x2512340428074E34, 0x42551CE35D6F58ED, 0x56425297234045D1, 0x4286443251CE35F9, 0x35D2807425297896, 0x7235D6F5644320FE,
+ 0x04E701D50F4449A9, 0x4714E09454C361C6, 0x661718F0701D52F1, 0x50F615404E094820, 0x4540F444718F0810, 0x07054C3661540689,
+ 0x46A48AC379DE5A1F, 0x5216A0C152865C23, 0x57021B7048AC3A4B, 0x379708646A0C1BE0, 0x15279DE521B705DB, 0x048528657086465D,
+ 0x7206D2311CC10929, 0x038204951E1D716E, 0x71438FF16D231D4C, 0x11C149C720495108, 0x51E1CC1038FF1971, 0x16D1E1D7149C78D4,
+ 0x62169C32441F1E8B, 0x147210B743D95372, 0x5024781569C324B4, 0x24402476210B7DC9, 0x743441F147815E78, 0x56943D9502476137,
+ 0x30E2F6846163DDF , 0xD020E680390D6EC2, 0x612022322F684E5B, 0x461125930E680ABD, 0x0396163D02232615, 0x22F390D612593380,
+ 0x76D130F57B1465FE, 0x6106D772065A6957, 0x66310E91130F53EB, 0x57B63BC76D772EF7, 0x2067B14610E916B6, 0x113065A663BC7A68,
+ 0x773194712ACB00BB, 0x05973090651C5590, 0x53459BB6194714B5, 0x12A34867730904EE, 0x0652ACB059BB61B4, 0x619651C534867DBC,
+ 0x21228931391C706C, 0x713129A63C164218, 0x4621317128931CD0, 0x13962882129A66AB, 0x63C391C713171F4D, 0x1283C16462882872,
+ 0x6547A7944B167FD4, 0x73054B1566902F4C, 0x239308567A794932, 0x44B3946654B152C , 0x5664B16730856EA9, 0x67A6690239466D55,
+ 0x651077A336696451, 0x63651B950F5B1E8C, 0x11D367E2077A3C6A, 0x3361D2C651B956B4, 0x50F36696367E2D2A, 0x2070F5B11D2C662A,
+ 0x24D4070678FB6880, 0x6204DF964E6D40B6, 0x4632030640706FDC, 0x678638124DF9679C, 0x64E78FB620306EDB, 0x6404E6D463812AE7,
+ 0x2043E036255D2748, 0x25504E441B8B617B, 0x66655A373E036FAD, 0x625669B204E444A7, 0x41B255D255A37517, 0x73E1B8B6669B2988,
+ 0x27634BB318FD5E8C, 0x5057699467BD05CE, 0x06D05B9534BB346C, 0x3186DFA276994800, 0x46718FD505B958B6, 0x53467BD06DFA2FEF,
+ 0x573727212055B5C , 0xB5F73EF61F843C4C, 0x3435FB9072721B52, 0x1204323573EF6B86, 0x61F2055B5FB90B61, 0x0721F84343235DAC,
+ 0x17B162F231D424B4, 0x2797B2A7768C0D7E, 0x04479392162F2F9D, 0x231442D17B2A7A99, 0x77631D4279392693, 0x216768C0442D12C0,
+ 0x1445D9560692273E, 0x20D44E7359A16E80, 0x65F0D8745D956856, 0x6065F5C144E73DAC, 0x359069220D874532, 0x45D59A165F5C1DD0,
+ 0x3591D8215D167858, 0x7595965405597EA2, 0x71A594C01D821476, 0x15D1A87359654ED2, 0x4055D167594C0DC7, 0x01D055971A873506,
+ 0xD1F20CC33F693200, 0x3781F9E67A651AB5, 0x12A78E7620CC3C8A, 0x33F2A01D1F9E662C, 0x67A3F69378E7631 , 0x6207A6512A01DA0 ,
+ 0x073360D43088472F, 0x40D7333712EE0D42, 0x0230D634360D4D5F, 0x430233A073337E48, 0x712308840D634C06, 0x43612EE0233A0ACB,
+ 0x13E26223706651ED, 0x5223EBB67AA54079, 0x432225A4262239D1, 0x370325813EBB6BB6, 0x67A70665225A4F3D, 0x4267AA5432581A06,
+ 0x51075ED16E6F5780, 0x53C10DF2577377C7, 0x7373C79275ED1DDC, 0x16E3717510DF2D15, 0x2576E6F53C7929BC, 0x2755773737175917,
+ 0x47376435354E381C, 0x35273BB7762A2DD7, 0x26C52FE476435AC1, 0x5356C81473BB749E, 0x776354E352FE4E7E, 0x476762A26C8140F4,
+ 0x1374742257694875, 0x4123792612D30822, 0x020121C7474227CF, 0x257204E137926D98, 0x61257694121C7E24, 0x74712D30204E1EE7,
+ 0x77A316C358C6268 , 0x2617AB142152080 , 0x07D61C13316C3323, 0x3587D8E77AB14A31, 0x42158C6261C13C03, 0x331215207D8E74F1,
+ 0x5673BFD773F446D0, 0x43E672426C6C6A0A, 0x60F3E5523BFD79FB, 0x7730FF5567242969, 0x26C73F443E5524EB, 0x23B6C6C60FF5534 ,
+ 0x779540F452F05F1C, 0x5417984617102DE3, 0x21941954540F4A21, 0x452193F7798468E7, 0x61752F05419545EB, 0x45417102193F7880,
+ 0x5404BF662B246B20, 0x64C40894408A2BC4, 0x2244CAA64BF66A49, 0x62B2478540894C55, 0x4402B2464CAA6398, 0x64B408A2247856E9,
+ 0x55070D372F2A647D, 0x6595063422F55D33, 0x52B5983670D37915, 0x72F2BCC550634C72, 0x4222F2A65983671 , 0x67022F552BCC5AF8,
+ 0x03A710741A77D48 , 0xD613A6B3411B5CFA, 0x5626142571074D7E, 0x41A627103A6B3593, 0x3411A77D61425F05, 0x571411B56271012A,
+ 0x32310A505B830310, 0x021239F73D8418CA, 0x17F213D510A50792, 0x05B7F993239F7137, 0x73D5B830213D5071, 0x5103D8417F9930D4,
+ 0x265291502462664F, 0x6146586354180F8E, 0x018144B2291505BA, 0x02418E426586387A, 0x35424626144B2C12, 0x2295418018E425C7,
+ 0x558194623AA43373, 0x37258B4518F0503C, 0x5267247319462AC0, 0x23A26BF558B452EF, 0x5183AA4372473895, 0x31918F0526BF5435,
+ 0x13D5C3376DA553B , 0x54D3D93C60912FA6, 0x2204D0355C337331, 0x76D206913D93CD7 , 0xC606DA554D035752, 0x55C6091220691929,
+ 0x25F758B6389962F9, 0x6595FCA636E701E9, 0x02D59602758B642C, 0x6382D5A25FCA69E3, 0x63638996596027F4, 0x27536E702D5A2FD0,
+ 0x01B76BA35F18324A, 0x33C1BC213DB165AA, 0x6733CC1076BA3876, 0x35F73A601BC21AF6, 0x13D5F1833CC10841, 0x0763DB1673A60174,
+ 0x66144586625B7F58, 0x72B6157367C57724, 0x7032B3704458653C, 0x66203DF661573095, 0x367625B72B370837, 0x04467C5703DF6CE3,
+ 0x260191B45D086EFA, 0x630608433F5227C2, 0x21030DE1191B4785, 0x45D105E260843D82, 0x33F5D08630DE11F1, 0x1193F522105E226C,
+ 0x23B366766E1C7AA2, 0x7733B8D447AA5D14, 0x5407372636676D03, 0x66E409523B8D4DF6, 0x4476E1C77372694 , 0x63647AA5409521DC,
+ 0x5632BE46744206A , 0x04A63E114722023F, 0x05C4A4A02BE46AD5, 0x6745CF2563E11D76, 0x147744204A4A09AB, 0x02B472205CF252B9,
+ 0x62D3203731586916, 0x6452D7324DFD7D84, 0x72E4524532037634, 0x7312E5362D7329D4, 0x24D315864524582F, 0x5324DFD72E5366C1,
+ 0x50A6A2543B0E019B, 0x0110A6A038530C6A, 0x054119726A2542D , 0x43B540650A6A00E5, 0x0383B0E0119725CC, 0x26A3853054065347,
+ 0x571181111B6F7AF1, 0x774716746CCF71F1, 0x77774F43181117F2, 0x11B77A5571674A76, 0x46C1B6F774F43880, 0x3186CCF777A55F47,
+ 0x0243CBB259EA5B62, 0x547245C44A331D95, 0x1074718D3CBB276F, 0x25907CE0245C4D50, 0x44A59EA54718D5 , 0xD3C4A33107CE05D1,
+ 0x6663006160D47AD5, 0x73D669B325CA1C40, 0x1193D5F130061766, 0x16019306669B39DF, 0x32560D473D5F1320, 0x13025CA119306AD3,
+ 0x12D6A6E628B30325, 0x02B2DF160DD090F , 0x9312B5146A6E6F37, 0x628311012DF16F66, 0x60D28B302B514C7E, 0x46A0DD0931101C58,
+ 0x14177AB07D4847FC, 0x43A41320515341CA, 0x4243AF8577AB0EA6, 0x07D24B3141320DAF, 0x0517D4843AF8531E, 0x5775153424B31611,
+ 0x072222516D377331, 0x73B722D17A832A22, 0x2263B194222511C7, 0x16D261B0722D1F89, 0x17A6D3773B194F18, 0x4227A832261B0A4D,
+ 0x620190F243F676DB, 0x756202E74F8C6D61, 0x630560D4190F2250, 0x243308E6202E72A9, 0x74F43F67560D4EA2, 0x4194F8C6308E67B4,
+ 0x17F27EB236746663, 0x6267FDE017CC3852, 0x3232647127EB2EAC, 0x236232617FDE0AA8, 0x01736746264719A , 0x12717CC323261EDD,
+ 0x42448D823C0B339E, 0x34324D4406284D40, 0x44B4363148D82ECB, 0x23C4BF0424D44CF8, 0x4063C0B343631B91, 0x148062844BF04248,
+ 0x320630B736497B9B, 0x76C20CC368273C58, 0x3576C3B7630B7AF9, 0x7365744320CC3F26, 0x368364976C3B7B71, 0x76368273574433ED,
+ 0x626565B07A2552F6, 0x56726F924CDE642D, 0x65B67A20565B0142, 0x07A5B50626F9207F, 0x24C7A25567A207BE, 0x0564CDE65B506684,
+ 0x1411561044DA4780, 0x46E4155611756A0C, 0x61D6E3A6156104AF, 0x0441DBA1415561B0, 0x61144DA46E3A6886, 0x615117561DBA1EA2,
+ 0x71D758F0542359C8, 0x52D1DD634C024E22, 0x4612D194758F052A, 0x054616471DD6395 , 0x34C542352D194BAD, 0x4754C024616475A1,
+ 0x35713CB542084602, 0x46057FE209C274AD, 0x716607A413CB5562, 0x5421672357FE2D5B, 0x20942084607A4EE5, 0x41309C2716723A91,
+ 0x73D28FE64F624CCF, 0x4323DDA62E5E24A3, 0x21932AF528FE6FAF, 0x64F19A573DDA6EF4, 0x62E4F62432AF540C, 0x5282E5E219A57B3B,
+ 0x353278445D1D73A3, 0x7425397123424B3E, 0x452427D7278445F5, 0x45D5221353971C3B, 0x1235D1D7427D7943, 0x727234245221358C,
+ 0x7603B86626CE1A5E, 0x145608317B506CA4, 0x62145E143B86636E, 0x62621B7760831F6D, 0x17B26CE145E142F3, 0x43B7B50621B77B04,
+ 0x43B7D8D17BB65E0C, 0x52D3BF3378B80F5E, 0x02B2D5727D8D172B, 0x17B2B5B43BF33A90, 0x3787BB652D572D9 , 0x27D78B802B5B4920,
+ 0x11C47C6436A05E01, 0x5301CAA652745306, 0x54D304A247C64855, 0x4364D6B11CAA669B, 0x65236A05304A2641, 0x247527454D6B1760,
+ 0x54B24A673E176D79, 0x64E4BDE7523241B0, 0x44C4E5F124A67957, 0x73E4C2154BDE76AF, 0x7523E1764E5F1493, 0x124523244C215DA5,
+ 0x53940AE633A052B , 0x569390D11A4D00C2, 0x05A69E8640AE6BCA, 0x6335AF35390D106B, 0x11A33A0569E86018, 0x6401A4D05AF356CF,
+ 0x10D14B6263561D4 , 0x14C0D2E244F31C6 , 0x1454CBF114B6299B, 0x26345AC10D2E25F0, 0x244635614CBF132A, 0x11444F3145AC18B6,
+ 0x222263442227567D, 0x52422C5106B54E2F, 0x46C2442326344534, 0x4226C37222C515EC, 0x106222752442370D, 0x32606B546C3721C6,
+ 0x6606AF3634EF687D, 0x66A603961C06323A, 0x3496AE706AF36A60, 0x63449D0660396F52, 0x61C34EF66AE70AA1, 0x06A1C06349D06CBC,
+ 0x1663A9A26F9576C8, 0x71D66DF0584C4258, 0x4571D4803A9A27BB, 0x26F57DD166DF0D47, 0x0586F9571D4804EA, 0x03A584C457DD1E67,
+ 0x66225C12789C7895, 0x74F6274275336111, 0x63F4FBF625C122C8, 0x2783F9F662742114, 0x275789C74FBF6D26, 0x625753363F9F6482,
+ 0x77E499E266F02CD9, 0x2447EBC111083202, 0x34944011499E2618, 0x26649DF77EBC1351, 0x11166F02440112F1, 0x1491108349DF7BC1,
+ 0x16B61AF13BF45C25, 0x52D6B1F731BA7FA0, 0x7632D86561AF1AED, 0x13B63E016B1F7D29, 0x7313BF452D865294, 0x56131BA763E01129,
+ 0x2081FE3A7E9E77A5, 0x77208597100435D7, 0x331722841FE3A71 , 0xA7E31C5208597C81, 0x7107E9E7722849FA, 0x41F1004331C520AF,
+ 0x1155CA077BA178DC, 0x702150E67F102D31, 0x25D02C345CA07864, 0x77B5D041150E6F98, 0x67F7BA1702C34882, 0x45C7F1025D041F11,
+ 0x355426F30C613C57, 0x37A5599253984FD1, 0x42B7AFA0426F38AD, 0x30C2B25355992B1D, 0x2530C6137AFA078D, 0x042539842B253413,
+ 0x51A28933594B32CF, 0x3291A0B432887E38, 0x765291B428933B46, 0x359653A51A0B4168, 0x432594B3291B4A94, 0x42832887653A5E8D,
+ 0x65030DA421746BBE, 0x63450C565EFE6415, 0x6523471130DA429C, 0x421529C650C5640C, 0x65E2174634711AA4, 0x1305EFE6529C67A6,
+ 0x42803CA0105957CD, 0x525283854D287499, 0x74225A0403CA0AA7, 0x010420D428385832, 0x54D1059525A04A02, 0x4034D287420D47A4,
+ 0x72759E2135627556, 0x74527E834BC11E4C, 0x1224586159E215C7, 0x1352282727E838B4, 0x34B35627458612F4, 0x1594BC1122827F6F,
+ 0x64F4E495449D4DBA, 0x4394FD27679B7362, 0x737395E74E495845, 0x544375A64FD270D1, 0x767449D4395E76A0, 0x74E679B7375A655E,
+ 0x05161EF712E2058F, 0x06751FF573F970CA, 0x77F6741061EF73B3, 0x7127FDA051FF5362, 0x57312E2067410345, 0x06173F977FDA0B3B,
+ 0x14B26557221962E8, 0x6264B30017AB6543, 0x67E268E126557412, 0x7227E0D14B30084D, 0x01722196268E191D, 0x12617AB67E0D13DF,
+ 0x65677FA773EF127D, 0x112560024DEC5DB1, 0x51512DD077FA745F, 0x773157F656002898, 0x24D73EF112DD0A40, 0x0774DEC5157F6DDF,
+ 0x3337B63042A55F8E, 0x532338B643597924, 0x74F329457B630C3F, 0x0424FA23338B6B58, 0x64342A5532945F75, 0x57B435974FA23A0E,
+ 0x02406114036E38C0, 0x3192466033B18FD , 0x81219BB006114337, 0x403124C024660ACB, 0x033036E319BB02F0, 0x00633B18124C0A47,
+ 0x5360C6123A951701, 0x1513607401155ABF, 0x563516600C612D71, 0x23A635F536074CA7, 0x4013A95151660C41, 0x00C01155635F58C7,
+ 0x50165B077FC2002D, 0x079015F60E6A7CF3, 0x76E791B765B07D07, 0x77F6E475015F6A6B, 0x60E7FC20791B70DD, 0x7650E6A76E475719,
+ 0x74671942424314C7, 0x167464A268426EB , 0x66B6775771942FEE, 0x2426BA77464A2F52, 0x26842431677579FD, 0x771684266BA775AE,
+ 0x31D78D951F66EFF , 0xE3B1D0B31A795237, 0x52F3BD3478D9545F, 0x51F2F8531D0B344D, 0x31A1F66E3BD34AB7, 0x4781A7952F85312A,
+ 0x20208DF316C542AD, 0x46D028113990185D, 0x1406D35108DF3351, 0x3164066202811AA5, 0x13916C546D351F41, 0x108399014066269D,
+ 0x1355DD7006B660BF, 0x66835D746EDB4768, 0x411689E25DD70CF0, 0x0061143135D74F6E, 0x46E06B66689E220C, 0x25D6EDB411431687,
+ 0x01D302F0147C49C9, 0x4481DAB6385762BD, 0x63748325302F0AE4, 0x01437D501DAB67F8, 0x638147C4483256C9, 0x5303857637D50FCB,
+ 0x15819DB74EA82711, 0x26A58DE04D7B2C98, 0x2376AFF719DB78BC, 0x74E3762158DE0DC2, 0x04D4EA826AFF7E7B, 0x7194D7B237621C93,
+ 0x32E7F884792C6E19, 0x66C2E19677001192, 0x16A6C7137F88439D, 0x4796AF432E196A66, 0x677792C66C71378C, 0x37F770016AF43B3A,
+ 0x06D4BEE17C16225E, 0x2346D5B56687337 , 0x368345D44BEE1608, 0x17C681206D5B5552, 0x5667C162345D4590, 0x44B66873681209CC,
+ 0x11F198807B242819, 0x2241FC72508A1416, 0x16A24BD019880FE3, 0x07B6A1D11FC7288A, 0x2507B24224BD0502, 0x019508A16A1D1678,
+ 0x45E5ADE120E6CA0 , 0xC7A5EA8659BE2057, 0x2117A2005ADE11EB, 0x120114945EA8649D, 0x65920E6C7A200E6F, 0x05A59BE21149481D,
+ 0x5636731272281E93, 0x15263B840A5B0451, 0x07C5221767312D58, 0x2727CDF563B849F1, 0x40A7228152217960, 0x7670A5B07CDF59F3,
+ 0x5347DF1533C775C0, 0x73834E961EBA0799, 0x05E38FC77DF1506 , 0x5335EA0534E96110, 0x61E33C7738FC73E3, 0x77D1EBA05EA059B2,
+ 0x16C43911022936EA, 0x31C6C0D1316406F6, 0x0381C6F343911185, 0x10238DB16C0D10F3, 0x131022931C6F3DF8, 0x3433164038DB12A9,
+ 0x5775F4A35CD41244, 0x14C77CE12C9F0A7B, 0x0314C8005F4A315F, 0x35C318D577CE1C66, 0x12C5CD414C800860, 0x05F2C9F0318D53E0,
+ 0x421750817105420D, 0x420217E4575361F2, 0x64D20101750810BA, 0x1714D884217E4CA5, 0x457710542010140 , 0x175575364D884763,
+ 0x008141C642BB0DA7, 0x046087F532D53A74, 0x32D464B5141C6CD4, 0x6422D2A0087F5FC3, 0x53242BB0464B53 , 0x51432D532D2A05F6,
+ 0x5223EB9215532B45, 0x21F221465D5C3CE1, 0x3111FC523EB9216A, 0x21511AE52214611B, 0x65D155321FC52C5F, 0x23E5D5C311AE5DD7,
+ 0x46D7400020B925A9, 0x2386D0E07C640AF4, 0x00938E6A740009AC, 0x020091046D0E0321, 0x07C20B9238E6A61 , 0xA747C64009104544,
+ 0x666341A6474F26C8, 0x2596619015254CF3, 0x424598B2341A6B59, 0x64724126661904CE, 0x015474F2598B2197, 0x234152542412659D,
+ 0x13008FD161976DD4, 0x63430400329B3E16, 0x3553456308FD1FB0, 0x16155CC1304006F3, 0x032619763456309 , 0x308329B355CC15F1,
+ 0x0350036D59DA7630, 0x729353775C801335, 0x175299470036D52 , 0xD5975280353775A5, 0x75C59DA7299476EB, 0x7005C80175280568,
+ 0x37F64761766F5264, 0x51B7FB302EA233A6, 0x3361BC03647619F3, 0x17636BC37FB30C7A, 0x02E766F51BC03B9 , 0x3642EA2336BC3061,
+ 0x7640AC043F30596E, 0x51E641973E2A527B, 0x5211ECC30AC04220, 0x43F21447641979A3, 0x73E3F3051ECC3B89, 0x30A3E2A521447BC1,
+ 0x157299E54E8F2E26, 0x21D57C940C5A1D90, 0x1761D486299E5467, 0x54E76F3157C947E3, 0x40C4E8F21D4865ED, 0x6290C5A176F31C3D,
+ 0x05C6FFB34EE81CDF, 0x1305C8233479195E, 0x147300F76FFB3AE1, 0x34E479405C82398 , 0x3344EE81300F7364, 0x76F3479147940AFA,
+ 0xF3A224A33B853E3E, 0x3223A674598C440D, 0x42E22880224A3D89, 0x33B2E77F3A674204, 0x4593B85322880A38, 0x022598C42E77F2D ,
+ 0x6091FE9022841C9C, 0x12D093354F0609C3, 0x07E2D6B61FE90922, 0x0227EDB609335017, 0x54F228412D6B69A7, 0x61F4F0607EDB63F9,
+ 0xE2524BE1099A74EF, 0x716251D21F9F1B40, 0x12816AC524BE17E8, 0x10928D7E251D2F7A, 0x21F099A716AC50D3, 0x5241F9F128D7ED6 ,
+ 0x36430DF66D193443, 0x36364FF676156F1B, 0x67463DB230DF6A4E, 0x66D7435364FF6794, 0x6766D19363DB2C9A, 0x2307615674353022,
+ 0x16742501556E025C, 0x070675A123802AF9, 0x27F70B22425018A4, 0x1557FB01675A18BB, 0x123556E070B227B9, 0x242238027FB01BF ,
+ 0x14F6574563E7910 , 0x9524F6E36C661591, 0x11E52B3265745D2B, 0x5631E6A14F6E379D, 0x36C63E7952B32FAC, 0x2656C6611E6A1101,
+ 0x34B469701DE22385, 0x2544BAB42338191F, 0x17854EB4469704B6, 0x01D783934BAB4599, 0x4231DE2254EB4809, 0x4462338178393E6D,
+ 0x02D288D5550017DD, 0x1202D52639B120E1, 0x24E20D22288D52D3, 0x5554E1202D52668C, 0x6395500120D22A68, 0x22839B124E1207D1,
+ 0x734251773FCC0EFE, 0x05A34BF547F37E64, 0x76F5A8D325177A90, 0x73F6F72734BF5D4D, 0x5473FCC05A8D3DCE, 0x32547F376F7275A8,
+ 0x70A64DB56BEA2655, 0x22C0A4D42A1810FC, 0x1712C40264DB593A, 0x56B71C070A4D4BC0, 0x42A6BEA22C402E93, 0x2642A18171C077F9,
+ 0x458752F16F0C4577, 0x42C582E370412414, 0x24D2C455752F1DC1, 0x16F4DCD4582E38EA, 0x3706F0C42C455F7B, 0x575704124DCD4EDB,
+ 0x53D4FCA112BC2696, 0x2503D5E77B037135, 0x736502F44FCA1F8C, 0x112361653D5E75F6, 0x77B12BC2502F41B0, 0x44F7B037361653F1,
+ 0x64657E702E5B0E31, 0x047467B320266B19, 0x61F4703257E703D7, 0x02E1F776467B3E00, 0x3202E5B047032BA3, 0x257202661F776B9C,
+ 0x07D1BD5062570A84, 0x07F7D0A27EC75B48, 0x5297FCC21BD5012 , 0x062291307D0A2D5D, 0x27E625707FCC29F2, 0x21B7EC75291304B6,
+ 0xE3A7D12719D558ED, 0x55F3ADE047551C8 , 0x1255F7417D12738F, 0x71925D2E3ADE0892, 0x04719D555F741997, 0x17D4755125D2E2F ,
+ 0x65415E922B9F2269, 0x227544375C134FED, 0x456272D315E92399, 0x22B5618654437F4E, 0x75C2B9F2272D32AB, 0x3155C13456186AA1,
+ 0x8462A8717E4D355C, 0x32C4637A234D7836, 0x75F2C1832A871760, 0x17E5FC784637A94 , 0xA237E4D32C183207, 0x32A234D75FC78B3 ,
+ 0x34E6C9F47F10621E, 0x6624E3F1276966B2, 0x62562BA26C9F4A11, 0x47F25F234E3F182C, 0x1277F10662BA2EF5, 0x26C2769625F239CD,
+ 0x63F0AC1573D63FED, 0x3733F3D3636E1F5E, 0x135738320AC15A0E, 0x57335C363F3D33EB, 0x36373D63738326EA, 0x20A636E135C366B1,
+ 0x642711A14D476E86, 0x67E426A402F63208, 0x3757E4D1711A1FC1, 0x14D75E46426A4396, 0x4024D4767E4D1B93, 0x17102F6375E46DB7,
+ 0x60A7AD242F3C44A7, 0x4490A56351A56F5C, 0x64C499527AD2463D, 0x42F4C4B60A5639CA, 0x3512F3C449952C78, 0x27A51A564C4B64F6,
+ 0x14B438673AFE7F8D, 0x7554BC1466993D04, 0x36855A8743867F37, 0x73A681A14BC146C2, 0x4663AFE755A875EC, 0x74366993681A1A75,
+ 0x61820F7730A67E1B, 0x773189184A4A7D0C, 0x7547389720F77993, 0x730542661891805 , 0x84A30A67738976AD, 0x7204A4A7542667D6,
+ 0x6442BF173C5C6EBF, 0x668447C34499187F, 0x17A68D842BF17C97, 0x73C7AAB6447C317F, 0x3443C5C668D8419C, 0x42B449917AAB6456,
+ 0x43D09163421B4F29, 0x41A3D72A76740F9C, 0x0751AD5409163B8D, 0x342754943D72AAB , 0xA76421B41AD54DD7, 0x40976740754946EE,
+ 0x654105637317342B, 0x30C54BB4218546D4, 0x45D0CE6310563DA7, 0x3735D14654BB4CCE, 0x421731730CE63E46, 0x310218545D146234,
+ 0x40709D7233BE6C63, 0x63607C36325044E5, 0x42D3655309D72335, 0x2332DFA407C36BA , 0x63233BE6365530CC, 0x309325042DFA448C,
+ 0x312150271663516F, 0x53C1253259B00AA , 0x0493CEF0150274EA, 0x716492F312532D4A, 0x259166353CEF002D, 0x01559B00492F3DA5,
+ 0x72F14A10263A2574, 0x2682F6276F8005C2, 0x0266829314A10651, 0x026269872F627ABA, 0x76F263A268293238, 0x3146F80026987646,
+ 0x12B59B1552590516, 0x0532B2A410144D36, 0x4275395359B151B9, 0x552278512B2A4F05, 0x4105259053953699, 0x3591014427851C75,
+ 0xF4F32843180646F3, 0x54718F4F2E970306, 0x6623953632843145, 0x318D315E18F4FE8F
+};
+
+/* The source data is random across the q63_t range. Accessing it by word should
+ remain random. */
+const q31_t * intrinsics_q31_inputs = (q31_t *) intrinsics_q63_inputs;
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/main.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/main.c new file mode 100644 index 0000000..3bb7ff9 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/main.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "all_tests.h"
+#include "arm_math.h"
+
+
+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && !defined (__MICROLIB)
+__asm(" .global __ARM_use_no_argv\n");
+#endif
+
+
+void debug_init(void)
+{
+ uint32_t * SHCSR_ptr = (uint32_t *) 0xE000ED24; /* System Handler Control and State Register */
+ *SHCSR_ptr |= 0x70000; /* Enable UsageFault, BusFault, and MemManage fault*/
+}
+
+int main(void)
+{
+#if !defined(FILEIO)
+ debug_init();
+#endif
+
+ JTEST_INIT(); /* Initialize test framework. */
+
+ JTEST_GROUP_CALL(all_tests); /* Run all tests. */
+
+ JTEST_ACT_EXIT_FW(); /* Exit test framework. */
+#if !defined(FILEIO)
+ while (1); /* Never return. */
+#endif
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/math_helper.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/math_helper.c new file mode 100644 index 0000000..4b73d49 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/math_helper.c @@ -0,0 +1,509 @@ +/* ----------------------------------------------------------------------
+* Copyright (C) 2010 ARM Limited. All rights reserved.
+*
+* $Date: 29. November 2010
+* $Revision: V1.0.3
+*
+* Project: CMSIS DSP Library
+*
+* Title: math_helper.c
+*
+* Description: Definition of all helper functions required.
+*
+* Target Processor: Cortex-M4/Cortex-M3
+*
+* Version 1.0.3 2010/11/29
+* Re-organized the CMSIS folders and updated documentation.
+*
+* Version 1.0.2 2010/11/11
+* Documentation updated.
+*
+* Version 1.0.1 2010/10/05
+* Production release and review comments incorporated.
+*
+* Version 1.0.0 2010/09/20
+* Production release and review comments incorporated.
+*
+* Version 0.0.7 2010/06/10
+* Misra-C changes done
+* -------------------------------------------------------------------- */
+
+/* ----------------------------------------------------------------------
+* Include standard header files
+* -------------------------------------------------------------------- */
+#include<math.h>
+
+/* ----------------------------------------------------------------------
+* Include project header files
+* -------------------------------------------------------------------- */
+#include "math_helper.h"
+
+/**
+ * @brief Caluclation of SNR
+ * @param float* Pointer to the reference buffer
+ * @param float* Pointer to the test buffer
+ * @param uint32_t total number of samples
+ * @return float SNR
+ * The function Caluclates signal to noise ratio for the reference output
+ * and test output
+ */
+
+float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
+{
+ float EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ float SNR;
+ int temp;
+ int *test;
+
+ for (i = 0; i < buffSize; i++)
+ {
+ /* Checking for a NAN value in pRef array */
+ test = (int *)(&pRef[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ /* Checking for a NAN value in pTest array */
+ test = (int *)(&pTest[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+ /* Checking for a NAN value in EnergyError */
+ test = (int *)(&EnergyError);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+
+ SNR = 10 * log10f (EnergySignal / EnergyError);
+
+ /* Checking for a NAN value in SNR */
+ test = (int *)(&SNR);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ return (SNR);
+
+}
+
+
+
+double arm_snr_f64(double *pRef, double *pTest, uint32_t buffSize)
+{
+ double EnergySignal = 0.0, EnergyError = 0.0;
+ uint32_t i;
+ double SNR;
+ int temp;
+ int *test;
+
+ for (i = 0; i < buffSize; i++)
+ {
+ /* Checking for a NAN value in pRef array */
+ test = (int *)(&pRef[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+ /* Checking for a NAN value in pTest array */
+ test = (int *)(&pTest[i]);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+ EnergySignal += pRef[i] * pRef[i];
+ EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
+ }
+
+ /* Checking for a NAN value in EnergyError */
+ test = (int *)(&EnergyError);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(100000.0);
+ }
+
+
+ SNR = 10 * log10 (EnergySignal / EnergyError);
+
+ /* Checking for a NAN value in SNR */
+ test = (int *)(&SNR);
+ temp = *test;
+
+ if (temp == 0x7FC00000)
+ {
+ return(10000.0);
+ }
+
+ return (SNR);
+
+}
+
+/**
+ * @brief Provide guard bits for Input buffer
+ * @param q15_t* Pointer to input buffer
+ * @param uint32_t blockSize
+ * @param uint32_t guard_bits
+ * @return none
+ * The function Provides the guard bits for the buffer
+ * to avoid overflow
+ */
+
+void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize,
+ uint32_t guard_bits)
+{
+ uint32_t i;
+
+ for (i = 0; i < blockSize; i++)
+ {
+ input_buf[i] = input_buf[i] >> guard_bits;
+ }
+}
+
+/**
+ * @brief Converts float to fixed in q12.20 format
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point(q12.20) values
+ */
+
+void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ /* 1048576.0f corresponds to pow(2, 20) */
+ pOut[i] = (q31_t) (pIn[i] * 1048576.0f);
+
+ pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
+
+ if (pIn[i] == (float) 1.0)
+ {
+ pOut[i] = 0x000FFFFF;
+ }
+ }
+}
+
+/**
+ * @brief Compare MATLAB Reference Output and ARM Test output
+ * @param q15_t* Pointer to Ref buffer
+ * @param q15_t* Pointer to Test buffer
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ */
+
+uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples)
+{
+ uint32_t i;
+ int32_t diff, diffCrnt = 0;
+ uint32_t maxDiff = 0;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ diff = pIn[i] - pOut[i];
+ diffCrnt = (diff > 0) ? diff : -diff;
+
+ if (diffCrnt > maxDiff)
+ {
+ maxDiff = diffCrnt;
+ }
+ }
+
+ return(maxDiff);
+}
+
+/**
+ * @brief Compare MATLAB Reference Output and ARM Test output
+ * @param q31_t* Pointer to Ref buffer
+ * @param q31_t* Pointer to Test buffer
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ */
+
+uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples)
+{
+ uint32_t i;
+ int32_t diff, diffCrnt = 0;
+ uint32_t maxDiff = 0;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ diff = pIn[i] - pOut[i];
+ diffCrnt = (diff > 0) ? diff : -diff;
+
+ if (diffCrnt > maxDiff)
+ {
+ maxDiff = diffCrnt;
+ }
+ }
+
+ return(maxDiff);
+}
+
+/**
+ * @brief Provide guard bits for Input buffer
+ * @param q31_t* Pointer to input buffer
+ * @param uint32_t blockSize
+ * @param uint32_t guard_bits
+ * @return none
+ * The function Provides the guard bits for the buffer
+ * to avoid overflow
+ */
+
+void arm_provide_guard_bits_q31 (q31_t * input_buf,
+ uint32_t blockSize,
+ uint32_t guard_bits)
+{
+ uint32_t i;
+
+ for (i = 0; i < blockSize; i++)
+ {
+ input_buf[i] = input_buf[i] >> guard_bits;
+ }
+}
+
+/**
+ * @brief Provide guard bits for Input buffer
+ * @param q31_t* Pointer to input buffer
+ * @param uint32_t blockSize
+ * @param uint32_t guard_bits
+ * @return none
+ * The function Provides the guard bits for the buffer
+ * to avoid overflow
+ */
+
+void arm_provide_guard_bits_q7 (q7_t * input_buf,
+ uint32_t blockSize,
+ uint32_t guard_bits)
+{
+ uint32_t i;
+
+ for (i = 0; i < blockSize; i++)
+ {
+ input_buf[i] = input_buf[i] >> guard_bits;
+ }
+}
+
+
+
+/**
+ * @brief Caluclates number of guard bits
+ * @param uint32_t number of additions
+ * @return none
+ * The function Caluclates the number of guard bits
+ * depending on the numtaps
+ */
+
+uint32_t arm_calc_guard_bits (uint32_t num_adds)
+{
+ uint32_t i = 1, j = 0;
+
+ if (num_adds == 1)
+ {
+ return (0);
+ }
+
+ while (i < num_adds)
+ {
+ i = i * 2;
+ j++;
+ }
+
+ return (j);
+}
+
+/**
+ * @brief Converts Q15 to floating-point
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ */
+
+void arm_apply_guard_bits (float32_t * pIn,
+ uint32_t numSamples,
+ uint32_t guard_bits)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ pIn[i] = pIn[i] * arm_calc_2pow(guard_bits);
+ }
+}
+
+/**
+ * @brief Calculates pow(2, numShifts)
+ * @param uint32_t number of shifts
+ * @return pow(2, numShifts)
+ */
+uint32_t arm_calc_2pow(uint32_t numShifts)
+{
+
+ uint32_t i, val = 1;
+
+ for (i = 0; i < numShifts; i++)
+ {
+ val = val * 2;
+ }
+
+ return(val);
+}
+
+
+
+/**
+ * @brief Converts float to fixed q14
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point values
+ */
+
+void arm_float_to_q14 (float *pIn, q15_t * pOut,
+ uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ /* 16384.0f corresponds to pow(2, 14) */
+ pOut[i] = (q15_t) (pIn[i] * 16384.0f);
+
+ pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
+
+ if (pIn[i] == (float) 2.0)
+ {
+ pOut[i] = 0x7FFF;
+ }
+
+ }
+
+}
+
+
+/**
+ * @brief Converts float to fixed q30 format
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point values
+ */
+
+void arm_float_to_q30 (float *pIn, q31_t * pOut,
+ uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ /* 1073741824.0f corresponds to pow(2, 30) */
+ pOut[i] = (q31_t) (pIn[i] * 1073741824.0f);
+
+ pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
+
+ if (pIn[i] == (float) 2.0)
+ {
+ pOut[i] = 0x7FFFFFFF;
+ }
+ }
+}
+
+/**
+ * @brief Converts float to fixed q30 format
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point values
+ */
+
+void arm_float_to_q29 (float *pIn, q31_t * pOut,
+ uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ /* 1073741824.0f corresponds to pow(2, 30) */
+ pOut[i] = (q31_t) (pIn[i] * 536870912.0f);
+
+ pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
+
+ if (pIn[i] == (float) 4.0)
+ {
+ pOut[i] = 0x7FFFFFFF;
+ }
+ }
+}
+
+
+/**
+ * @brief Converts float to fixed q28 format
+ * @param uint32_t number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point values
+ */
+
+void arm_float_to_q28 (float *pIn, q31_t * pOut,
+ uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ /* 268435456.0f corresponds to pow(2, 28) */
+ pOut[i] = (q31_t) (pIn[i] * 268435456.0f);
+
+ pOut[i] += pIn[i] > 0 ? 0.5 : -0.5;
+
+ if (pIn[i] == (float) 8.0)
+ {
+ pOut[i] = 0x7FFFFFFF;
+ }
+ }
+}
+
+/**
+ * @brief Clip the float values to +/- 1
+ * @param pIn input buffer
+ * @param numSamples number of samples in the buffer
+ * @return none
+ * The function converts floating point values to fixed point values
+ */
+
+void arm_clip_f32 (float *pIn, uint32_t numSamples)
+{
+ uint32_t i;
+
+ for (i = 0; i < numSamples; i++)
+ {
+ if (pIn[i] > 1.0f)
+ {
+ pIn[i] = 1.0;
+ }
+ else if ( pIn[i] < -1.0f)
+ {
+ pIn[i] = -1.0;
+ }
+
+ }
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_add_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_add_tests.c new file mode 100644 index 0000000..c536899 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_add_tests.c @@ -0,0 +1,31 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_ADD_TEST(suffix) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT2( \
+ mat_add, \
+ suffix, \
+ MATRIX_TEST_CONFIG_ADDITIVE_OUTPUT, \
+ MATRIX_TEST_VALID_ADDITIVE_DIMENSIONS, \
+ MATRIX_COMPARE_INTERFACE)
+
+JTEST_ARM_MAT_ADD_TEST(f32);
+JTEST_ARM_MAT_ADD_TEST(q31);
+JTEST_ARM_MAT_ADD_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_add_tests)
+{
+ JTEST_TEST_CALL(arm_mat_add_f32_test);
+ JTEST_TEST_CALL(arm_mat_add_q31_test);
+ JTEST_TEST_CALL(arm_mat_add_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_cmplx_mult_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_cmplx_mult_tests.c new file mode 100644 index 0000000..50cd57e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_cmplx_mult_tests.c @@ -0,0 +1,59 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_CMPLX_MULT_TEST(suffix, comparison_interface) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT2( \
+ mat_cmplx_mult, \
+ suffix, \
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT, \
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS, \
+ comparison_interface)
+
+JTEST_ARM_MAT_CMPLX_MULT_TEST(f32, MATRIX_SNR_COMPARE_INTERFACE);
+JTEST_ARM_MAT_CMPLX_MULT_TEST(q31, MATRIX_COMPARE_INTERFACE);
+
+/*--------------------------------------------------------------------------------*/
+/* Q15 Uses a Different interface than the others. */
+/*--------------------------------------------------------------------------------*/
+
+#define ARM_mat_cmplx_mult_q15_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, \
+ (void *) &matrix_output_fut, \
+ (q15_t *) matrix_output_scratch)
+
+JTEST_DEFINE_TEST(arm_mat_cmplx_mult_q15_test, arm_mat_cmplx_mult_q15)
+{
+ MATRIX_TEST_TEMPLATE_ELT2(
+ matrix_q15_a_inputs,
+ matrix_q15_b_inputs,
+ arm_matrix_instance_q15 * ,
+ arm_matrix_instance_q15,
+ TYPE_FROM_ABBREV(q15),
+ arm_mat_cmplx_mult_q15,
+ ARM_mat_cmplx_mult_q15_INPUT_INTERFACE,
+ ref_mat_cmplx_mult_q15,
+ REF_mat_cmplx_mult_INPUT_INTERFACE,
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT,
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS,
+ MATRIX_COMPARE_INTERFACE);
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_cmplx_mult_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_cmplx_mult_f32_test);
+ JTEST_TEST_CALL(arm_mat_cmplx_mult_q31_test);
+ JTEST_TEST_CALL(arm_mat_cmplx_mult_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_init_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_init_tests.c new file mode 100644 index 0000000..7d879ee --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_init_tests.c @@ -0,0 +1,58 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_INIT_TEST(suffix) \
+ JTEST_DEFINE_TEST(arm_mat_init_##suffix##_test, \
+ arm_mat_init_##suffix) \
+ { \
+ const uint16_t rows = 4; \
+ const uint16_t cols = 2; \
+ arm_matrix_instance_##suffix matrix = {0}; \
+ /* TYPE_FROM_ABBREV(suffix) data[rows*cols] = {0}; */ \
+ TYPE_FROM_ABBREV(suffix) data[4*2] = {0}; \
+ \
+ arm_mat_init_##suffix(&matrix, \
+ rows, \
+ cols, \
+ data); \
+ \
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n", \
+ (int)matrix.numRows, \
+ (int)matrix.numCols); \
+ \
+ if ((matrix.numRows == rows) && \
+ (matrix.numCols == cols) && \
+ (matrix.pData == data)) \
+ { \
+ return JTEST_TEST_PASSED; \
+ } \
+ else \
+ { \
+ return JTEST_TEST_FAILED; \
+ } \
+ \
+ }
+
+JTEST_ARM_MAT_INIT_TEST(f32);
+JTEST_ARM_MAT_INIT_TEST(q31);
+JTEST_ARM_MAT_INIT_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_init_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_init_f32_test);
+ JTEST_TEST_CALL(arm_mat_init_q31_test);
+ JTEST_TEST_CALL(arm_mat_init_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_inverse_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_inverse_tests.c new file mode 100644 index 0000000..372ac1d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_inverse_tests.c @@ -0,0 +1,92 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+JTEST_DEFINE_TEST(arm_mat_inverse_f32_test, arm_mat_inverse_f32)
+{
+ TEMPLATE_DO_ARR_DESC(
+ mat_idx, arm_matrix_instance_f32 *, mat_ptr, matrix_f32_invertible_inputs
+ ,
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n",
+ (int)mat_ptr->numRows,
+ (int)mat_ptr->numCols);
+
+ if (MATRIX_TEST_VALID_SQUARE_DIMENSIONS(arm_matrix_instance_f32 *, mat_ptr))
+ {
+ MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(arm_matrix_instance_f32 *, mat_ptr);
+
+ /* arm_mat_inverse_f32() modifies its source input. Use the scratch
+ * buffer to store a copy of the intended input. */
+ {
+ float32_t * original_pdata_ptr = mat_ptr->pData;
+
+ memcpy(matrix_output_scratch,
+ mat_ptr->pData,
+ mat_ptr->numRows * mat_ptr->numCols * sizeof(float32_t));
+ mat_ptr->pData = (void*) &matrix_output_scratch;
+
+ JTEST_COUNT_CYCLES(arm_mat_inverse_f32(mat_ptr, &matrix_output_fut));
+ mat_ptr->pData = original_pdata_ptr;
+ }
+
+ ref_mat_inverse_f32(mat_ptr, &matrix_output_ref);
+
+ MATRIX_SNR_COMPARE_INTERFACE(arm_matrix_instance_f32,
+ float32_t);
+ });
+
+ return JTEST_TEST_PASSED;
+}
+
+JTEST_DEFINE_TEST(arm_mat_inverse_f64_test, arm_mat_inverse_f64)
+{
+ TEMPLATE_DO_ARR_DESC(
+ mat_idx, arm_matrix_instance_f64 *, mat_ptr, matrix_f64_invertible_inputs
+ ,
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n",
+ (int)mat_ptr->numRows,
+ (int)mat_ptr->numCols);
+
+ if (MATRIX_TEST_VALID_SQUARE_DIMENSIONS(arm_matrix_instance_f64 *, mat_ptr))
+ {
+ MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(arm_matrix_instance_f64 *, mat_ptr);
+
+ /* arm_mat_inverse_f64() modifies its source input. Use the scratch
+ * buffer to store a copy of the intended input. */
+ {
+ float64_t * original_pdata_ptr = mat_ptr->pData;
+
+ memcpy(matrix_output_scratch,
+ mat_ptr->pData,
+ mat_ptr->numRows * mat_ptr->numCols * sizeof(float64_t));
+ mat_ptr->pData = (void*) &matrix_output_scratch;
+
+ JTEST_COUNT_CYCLES(arm_mat_inverse_f64(mat_ptr, &matrix_output_fut64));
+ mat_ptr->pData = original_pdata_ptr;
+ }
+
+ ref_mat_inverse_f64(mat_ptr, &matrix_output_ref64);
+
+ MATRIX_DBL_SNR_COMPARE_INTERFACE(arm_matrix_instance_f64);
+ });
+
+ return JTEST_TEST_PASSED;
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_inverse_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_inverse_f32_test);
+ JTEST_TEST_CALL(arm_mat_inverse_f64_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_fast_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_fast_tests.c new file mode 100644 index 0000000..313aa04 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_fast_tests.c @@ -0,0 +1,57 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_MULT_FAST_TEST(suffix) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT2( \
+ mat_mult_fast, \
+ suffix, \
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT, \
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS, \
+ MATRIX_SNR_COMPARE_INTERFACE)
+
+JTEST_ARM_MAT_MULT_FAST_TEST(q31);
+
+/*--------------------------------------------------------------------------------*/
+/* Q15 Uses a Different interface than the others. */
+/*--------------------------------------------------------------------------------*/
+
+#define ARM_mat_mult_fast_q15_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, \
+ (void *) &matrix_output_fut, \
+ (q15_t *) matrix_output_scratch)
+
+JTEST_DEFINE_TEST(arm_mat_mult_fast_q15_test, arm_mat_mult_fast_q15)
+{
+ MATRIX_TEST_TEMPLATE_ELT2(
+ matrix_q15_a_inputs,
+ matrix_q15_b_inputs,
+ arm_matrix_instance_q15 * ,
+ arm_matrix_instance_q15,
+ TYPE_FROM_ABBREV(q15),
+ arm_mat_mult_fast_q15,
+ ARM_mat_mult_fast_q15_INPUT_INTERFACE,
+ ref_mat_mult_fast_q15,
+ REF_mat_mult_fast_INPUT_INTERFACE,
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT,
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS,
+ MATRIX_SNR_COMPARE_INTERFACE);
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_mult_fast_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_mult_fast_q31_test);
+ JTEST_TEST_CALL(arm_mat_mult_fast_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_tests.c new file mode 100644 index 0000000..c74bdc8 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_mult_tests.c @@ -0,0 +1,59 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_MULT_TEST(suffix) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT2( \
+ mat_mult, \
+ suffix, \
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT, \
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS, \
+ MATRIX_COMPARE_INTERFACE)
+
+JTEST_ARM_MAT_MULT_TEST(f32);
+JTEST_ARM_MAT_MULT_TEST(q31);
+
+/*--------------------------------------------------------------------------------*/
+/* Q15 Uses a Different interface than the others. */
+/*--------------------------------------------------------------------------------*/
+
+#define ARM_mat_mult_q15_INPUT_INTERFACE(input_a_ptr, input_b_ptr) \
+ PAREN(input_a_ptr, input_b_ptr, \
+ (void *) &matrix_output_fut, \
+ (q15_t *) matrix_output_scratch)
+
+JTEST_DEFINE_TEST(arm_mat_mult_q15_test, arm_mat_mult_q15)
+{
+ MATRIX_TEST_TEMPLATE_ELT2(
+ matrix_q15_a_inputs,
+ matrix_q15_b_inputs,
+ arm_matrix_instance_q15 * ,
+ arm_matrix_instance_q15,
+ TYPE_FROM_ABBREV(q15),
+ arm_mat_mult_q15,
+ ARM_mat_mult_q15_INPUT_INTERFACE,
+ ref_mat_mult_q15,
+ REF_mat_mult_INPUT_INTERFACE,
+ MATRIX_TEST_CONFIG_MULTIPLICATIVE_OUTPUT,
+ MATRIX_TEST_VALID_MULTIPLICATIVE_DIMENSIONS,
+ MATRIX_COMPARE_INTERFACE);
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_mult_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_mult_f32_test);
+ JTEST_TEST_CALL(arm_mat_mult_q31_test);
+ JTEST_TEST_CALL(arm_mat_mult_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_scale_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_scale_tests.c new file mode 100644 index 0000000..63fba94 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_scale_tests.c @@ -0,0 +1,90 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+/* This is for the two fixed point cases */
+#define JTEST_ARM_MAT_SCALE_TEST(suffix,type) \
+ JTEST_DEFINE_TEST(arm_mat_scale_##suffix##_test, arm_mat_scale_##suffix) \
+ { \
+ uint32_t i,j; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ mat_idx, arm_matrix_instance_##suffix *, \
+ mat_ptr, matrix_##suffix##_b_inputs \
+ , \
+ MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT( \
+ arm_matrix_instance_##suffix *, mat_ptr); \
+ \
+ for(i=0;i<MATRIX_MAX_COEFFS_LEN;i++) \
+ { \
+ for(j=0;j<MATRIX_MAX_SHIFTS_LEN;j++) \
+ { \
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n", \
+ (int)mat_ptr->numRows, \
+ (int)mat_ptr->numCols); \
+ \
+ JTEST_COUNT_CYCLES( \
+ arm_mat_scale_##suffix(mat_ptr, \
+ matrix_##suffix##_scale_values[i], \
+ matrix_shift_values[j], \
+ (arm_matrix_instance_##suffix*) &matrix_output_fut)); \
+ \
+ ref_mat_scale_##suffix(mat_ptr, \
+ matrix_##suffix##_scale_values[i], \
+ matrix_shift_values[j], \
+ (arm_matrix_instance_##suffix*) &matrix_output_ref); \
+ \
+ MATRIX_SNR_COMPARE_INTERFACE(arm_matrix_instance_##suffix, \
+ type); \
+ } \
+ }); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+JTEST_DEFINE_TEST(arm_mat_scale_f32_test, arm_mat_scale_f32)
+{
+ uint32_t i;
+
+ TEMPLATE_DO_ARR_DESC(
+ mat_idx, arm_matrix_instance_f32 *, mat_ptr, matrix_f32_b_inputs
+ ,
+ MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(arm_matrix_instance_f32 *, mat_ptr);
+
+ for(i=0;i<MATRIX_MAX_COEFFS_LEN;i++)
+ {
+ JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n",
+ (int)mat_ptr->numRows,
+ (int)mat_ptr->numCols);
+ JTEST_COUNT_CYCLES(arm_mat_scale_f32(mat_ptr, matrix_f32_scale_values[i], &matrix_output_fut));
+
+ ref_mat_scale_f32(mat_ptr, matrix_f32_scale_values[i], &matrix_output_ref);
+
+ MATRIX_SNR_COMPARE_INTERFACE(arm_matrix_instance_f32,
+ float32_t);
+ });
+
+ return JTEST_TEST_PASSED;
+}
+
+JTEST_ARM_MAT_SCALE_TEST(q31,q31_t);
+JTEST_ARM_MAT_SCALE_TEST(q15,q15_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_scale_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_scale_f32_test);
+ JTEST_TEST_CALL(arm_mat_scale_q31_test);
+ JTEST_TEST_CALL(arm_mat_scale_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_sub_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_sub_tests.c new file mode 100644 index 0000000..245c28e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_sub_tests.c @@ -0,0 +1,34 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_SUB_TEST(suffix) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT2( \
+ mat_sub, \
+ suffix, \
+ MATRIX_TEST_CONFIG_ADDITIVE_OUTPUT, \
+ MATRIX_TEST_VALID_ADDITIVE_DIMENSIONS, \
+ MATRIX_COMPARE_INTERFACE)
+
+JTEST_ARM_MAT_SUB_TEST(f32);
+JTEST_ARM_MAT_SUB_TEST(q31);
+JTEST_ARM_MAT_SUB_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_sub_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_sub_f32_test);
+ JTEST_TEST_CALL(arm_mat_sub_q31_test);
+ JTEST_TEST_CALL(arm_mat_sub_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_trans_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_trans_tests.c new file mode 100644 index 0000000..e49c80b --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/mat_trans_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "matrix_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "matrix_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAT_TRANS_TEST(suffix) \
+ MATRIX_DEFINE_TEST_TEMPLATE_ELT1( \
+ mat_trans, \
+ suffix, \
+ MATRIX_TEST_CONFIG_TRANSPOSE_OUTPUT, \
+ MATRIX_TEST_VALID_DIMENSIONS_ALWAYS)
+
+JTEST_ARM_MAT_TRANS_TEST(f32);
+JTEST_ARM_MAT_TRANS_TEST(q31);
+JTEST_ARM_MAT_TRANS_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mat_trans_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mat_trans_f32_test);
+ JTEST_TEST_CALL(arm_mat_trans_q31_test);
+ JTEST_TEST_CALL(arm_mat_trans_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_common_data.c new file mode 100644 index 0000000..123c0d7 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_common_data.c @@ -0,0 +1,259 @@ +#include "arm_math.h"
+#include "matrix_test_data.h"
+#include "type_abbrev.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_fut_data[2*MATRIX_TEST_MAX_ELTS] = {0};
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_ref_data[2*MATRIX_TEST_MAX_ELTS] = {0};
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_scratch[MATRIX_TEST_MAX_ELTS] = {0};
+
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_fut[MATRIX_TEST_MAX_ELTS];
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_output_f32_ref[MATRIX_TEST_MAX_ELTS];
+
+arm_matrix_instance_f32 matrix_output_fut = {
+ 0,
+ 0,
+ (float32_t *) &matrix_output_fut_data
+};
+
+arm_matrix_instance_f32 matrix_output_ref = {
+ 0,
+ 0,
+ (float32_t *) &matrix_output_ref_data
+};
+
+arm_matrix_instance_f64 matrix_output_fut64 = {
+ 0,
+ 0,
+ (float64_t *) &matrix_output_fut_data
+};
+
+arm_matrix_instance_f64 matrix_output_ref64 = {
+ 0,
+ 0,
+ (float64_t *) &matrix_output_ref_data
+};
+
+/*--------------------------------------------------------------------------------*/
+/* Data Buckets */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Pool of random data to base matrix inputs from.
+ */
+float32_t matrix_f32_100_rand[100] = {
+/* -45.0345569674258, first number negativ causes fault in 1x1 multiplay with 0.
+ AC6 DSP_Lib calculatas a -0.0 which is not a 0.0 in memcmp!
+ */
+ 45.0345569674258, -11.0261163038747, -14.6841428777929,
+ 0.0345569674258, -11.0261163038747, -14.6841428777929,
+ -20.3679194392227, 27.5712678608402, -12.1390617339732,
+ -19.8753669720509, 42.3379642103244, -23.7788252219155,
+ -23.7517765301667, 40.2716109915281, -25.8308714086167,
+ 32.1194040197959, 24.4692807074156, -1.32083675968276,
+ 31.1580458282477, -2.90766514824093, -6.97926086704160,
+ 10.2843089382083, 30.1014622769739, 44.4787189721646,
+ -9.60878544118853, -48.4596562348445, -31.1044984967456,
+ -6.41414114190809, 3.28255887994549, -26.9511839788442,
+ -31.5183679875864, 21.1215780433683, -47.0779722437854,
+ -0.913590753192006, -40.3545474831611, -45.6976198342192,
+ 18.6775433365315, -5.32162505701938, -14.9272896423117,
+ 34.4308792695389, 40.4880968679893, -27.8253265982760,
+ 42.8854139478045, -1.07473615999811, -36.8026707393665,
+ -33.1009970537296, -31.6488844262730, -19.3650527983443,
+ 43.9001561999887, -30.5235710432951, 47.9748378356085,
+ -38.2582349144194, 23.0330862855453, -16.2280590178623,
+ 44.2050590775485, 14.9115474956452, -13.1515403509664,
+ 0.850865538112700, 37.5942811492984, -27.4078219027601,
+ -6.11300268738968, -20.3324126781673, -1.13910261964209,
+ 40.0053846417662, 45.6134540229802, 23.1722385658670,
+ 12.5618560729690, 1.07715641721097, 5.01563428984222,
+ -32.9291952852141, -38.8880776559401, -18.1221698074118,
+ 7.85250610234389, -13.0753218879785, 7.52085950784656,
+ 14.7745963136307, 28.0227435151377, 31.7627708322262,
+ 12.2475086001227, -27.2335702183447, -24.1935304087933,
+ -7.58332402861928, -26.2716420228479, -38.8797244706213,
+ -44.0220457052844, -4.90762935690551, -41.8874231134215,
+ 29.4831416883453, 8.70447045314168, -6.43013158961009,
+ -9.12801538874479, 0.785828466111815, -4.11511718200689,
+ 28.0252068321138, -26.5220086627594, 4.70088922863450,
+ 42.9385970968730, 14.4318130193692, -29.2257707266972,
+ 46.3088539286913
+};
+
+float64_t matrix_f64_100_rand[100] = {
+// -45.0345569674258, -11.0261163038747, -14.6841428777929,
+ 45.0345569674258, -11.0261163038747, -14.6841428777929,
+ 0.0345569674258, -11.0261163038747, -14.6841428777929,
+ -20.3679194392227, 27.5712678608402, -12.1390617339732,
+ -19.8753669720509, 42.3379642103244, -23.7788252219155,
+ -23.7517765301667, 40.2716109915281, -25.8308714086167,
+ 32.1194040197959, 24.4692807074156, -1.32083675968276,
+ 31.1580458282477, -2.90766514824093, -6.97926086704160,
+ 10.2843089382083, 30.1014622769739, 44.4787189721646,
+ -9.60878544118853, -48.4596562348445, -31.1044984967456,
+ -6.41414114190809, 3.28255887994549, -26.9511839788442,
+ -31.5183679875864, 21.1215780433683, -47.0779722437854,
+ -0.913590753192006, -40.3545474831611, -45.6976198342192,
+ 18.6775433365315, -5.32162505701938, -14.9272896423117,
+ 34.4308792695389, 40.4880968679893, -27.8253265982760,
+ 42.8854139478045, -1.07473615999811, -36.8026707393665,
+ -33.1009970537296, -31.6488844262730, -19.3650527983443,
+ 43.9001561999887, -30.5235710432951, 47.9748378356085,
+ -38.2582349144194, 23.0330862855453, -16.2280590178623,
+ 44.2050590775485, 14.9115474956452, -13.1515403509664,
+ 0.850865538112700, 37.5942811492984, -27.4078219027601,
+ -6.11300268738968, -20.3324126781673, -1.13910261964209,
+ 40.0053846417662, 45.6134540229802, 23.1722385658670,
+ 12.5618560729690, 1.07715641721097, 5.01563428984222,
+ -32.9291952852141, -38.8880776559401, -18.1221698074118,
+ 7.85250610234389, -13.0753218879785, 7.52085950784656,
+ 14.7745963136307, 28.0227435151377, 31.7627708322262,
+ 12.2475086001227, -27.2335702183447, -24.1935304087933,
+ -7.58332402861928, -26.2716420228479, -38.8797244706213,
+ -44.0220457052844, -4.90762935690551, -41.8874231134215,
+ 29.4831416883453, 8.70447045314168, -6.43013158961009,
+ -9.12801538874479, 0.785828466111815, -4.11511718200689,
+ 28.0252068321138, -26.5220086627594, 4.70088922863450,
+ 42.9385970968730, 14.4318130193692, -29.2257707266972,
+ 46.3088539286913
+};
+
+MATRIX_TEST_BIGGEST_INPUT_TYPE matrix_zeros[MATRIX_TEST_MAX_ELTS] = {0};
+
+const float32_t matrix_f32_scale_values[MATRIX_MAX_COEFFS_LEN] =
+{
+ 43.0264275639 , -17.0525215570 , -94.8488973910 , -8.1924989580 ,
+ 7.2830326091 , 66.8368719314 , 33.9778190671 , 117.8652289772 ,
+ -129.6077797465, -14.6420815368 , 18.0239223278 , 1.0000000000 ,
+ 55.0375037651 , 1.8674609862 , 0.00000000000 , -33.5750364909
+};
+
+const q31_t matrix_q31_scale_values[MATRIX_MAX_COEFFS_LEN] =
+{
+ 0x0201DC90, 0x211F0D7C, 0x80000000, 0xF573B824,
+ 0xE85ED05B, 0x311DFB52, 0x3529E750, 0x00000000,
+ 0x7FFFFFFF, 0x21FA525A, 0x0971FD45, 0x05547B68,
+ 0x270C6366, 0x06FDD5A6, 0xF7025315, 0xB1155A1E
+};
+
+const q15_t matrix_q15_scale_values[MATRIX_MAX_COEFFS_LEN] =
+{
+ 0x0201, 0x211F, 0x8000, 0xF573,
+ 0xE85E, 0x311D, 0x3529, 0x0000,
+ 0x7FFF, 0x21FA, 0x0971, 0x0554,
+ 0x270C, 0x06FD, 0xF702, 0xB115
+};
+
+const int32_t matrix_shift_values[MATRIX_MAX_SHIFTS_LEN] =
+{
+ -16, -7, 0, 7, 16
+};
+
+/*--------------------------------------------------------------------------------*/
+/* Matrix Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Define matrices by suffix (f32, q31, q15) for use in test cases.
+ *
+ * The rand1 and rand2 suffixes get their data from the same pool of random
+ * data, but their starting points differ by 1 element.
+ *
+ * Makes available:
+ * - matrix_`suffix`_1x1_rand1/2
+ * - matrix_`suffix`_1x4_rand1/2
+ * - matrix_`suffix`_2x4_rand1/2
+ * - matrix_`suffix`_4x4_rand1/2
+ */
+#define MATRIX_DEFINE_MATRICES(suffix) \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x1_rand1 = \
+ {1, 1, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand }; \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x1_rand2 = \
+ {1, 1, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x1_zeros = \
+ {1, 1, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros}; \
+ \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x4_rand1 = \
+ {1, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand }; \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x4_rand2 = \
+ {1, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
+ arm_matrix_instance_##suffix matrix_##suffix##_1x4_zeros = \
+ {1, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros}; \
+ \
+ arm_matrix_instance_##suffix matrix_##suffix##_2x4_rand1 = \
+ {2, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand }; \
+ arm_matrix_instance_##suffix matrix_##suffix##_2x4_rand2 = \
+ {2, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
+ arm_matrix_instance_##suffix matrix_##suffix##_2x4_zeros = \
+ {2, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros}; \
+ \
+ arm_matrix_instance_##suffix matrix_##suffix##_4x4_rand1 = \
+ {4, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_f32_100_rand }; \
+ arm_matrix_instance_##suffix matrix_##suffix##_4x4_rand2 = \
+ {4, 4, (TYPE_FROM_ABBREV(suffix) *) (matrix_f32_100_rand+1)}; \
+ arm_matrix_instance_##suffix matrix_##suffix##_4x4_zeros = \
+ {4, 4, (TYPE_FROM_ABBREV(suffix) *) matrix_zeros}
+
+MATRIX_DEFINE_MATRICES(f64);
+MATRIX_DEFINE_MATRICES(f32);
+MATRIX_DEFINE_MATRICES(q31);
+MATRIX_DEFINE_MATRICES(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Matrix-Input Arrays */
+/*--------------------------------------------------------------------------------*/
+
+/* Define Input #ARR_DESC_t by suffix.
+ *
+ * Taking inputs in parallel from the 'a' and 'b' arrays yields the following
+ * test cases:
+ * - 1x1 multiplication by zero
+ * - 1x1 multiplication between random numbers
+ * - 1x1 * 1x4 valid dimension interaction
+ * - 1x1 * 2x4 invalid dimension interaction
+ * - 2x4 * 4x4 larger valid dimension interaction
+ * - 4x4 * 4x4 larger valid dimension interaction
+ */
+#define MATRIX_DEFINE_INPUTS(suffix) \
+ ARR_DESC_DEFINE(arm_matrix_instance_##suffix *, \
+ matrix_##suffix##_a_inputs, \
+ 6, \
+ CURLY( \
+ &matrix_##suffix##_1x1_rand1, \
+ &matrix_##suffix##_1x1_rand1, \
+ &matrix_##suffix##_1x1_rand1, \
+ &matrix_##suffix##_1x1_rand1, \
+ &matrix_##suffix##_2x4_rand1, \
+ &matrix_##suffix##_4x4_rand1 \
+ )); \
+ \
+ ARR_DESC_DEFINE(arm_matrix_instance_##suffix *, \
+ matrix_##suffix##_b_inputs, \
+ 6, \
+ CURLY( \
+ &matrix_##suffix##_1x1_zeros, \
+ &matrix_##suffix##_1x1_rand2, \
+ &matrix_##suffix##_1x4_rand2, \
+ &matrix_##suffix##_2x4_rand2, \
+ &matrix_##suffix##_4x4_rand2, \
+ &matrix_##suffix##_4x4_rand2 \
+ )); \
+ \
+ ARR_DESC_DEFINE(arm_matrix_instance_##suffix *, \
+ matrix_##suffix##_invertible_inputs, \
+ 4, \
+ CURLY( \
+ &matrix_##suffix##_1x1_rand1, \
+ &matrix_##suffix##_1x1_rand2, \
+ &matrix_##suffix##_4x4_rand1, \
+ &matrix_##suffix##_4x4_rand2 \
+ )) \
+
+MATRIX_DEFINE_INPUTS(f64);
+MATRIX_DEFINE_INPUTS(f32);
+MATRIX_DEFINE_INPUTS(q31);
+MATRIX_DEFINE_INPUTS(q15);
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_group.c new file mode 100644 index 0000000..c87439d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/matrix_tests/matrix_test_group.c @@ -0,0 +1,19 @@ +#include "jtest.h"
+#include "matrix_tests.h"
+
+JTEST_DEFINE_GROUP(matrix_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_GROUP_CALL(mat_add_tests);
+ JTEST_GROUP_CALL(mat_cmplx_mult_tests);
+ JTEST_GROUP_CALL(mat_init_tests);
+ JTEST_GROUP_CALL(mat_inverse_tests);
+ JTEST_GROUP_CALL(mat_mult_tests);
+ JTEST_GROUP_CALL(mat_mult_fast_tests);
+ JTEST_GROUP_CALL(mat_sub_tests);
+ JTEST_GROUP_CALL(mat_trans_tests);
+ JTEST_GROUP_CALL(mat_scale_tests);
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/max_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/max_tests.c new file mode 100644 index 0000000..d60973b --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/max_tests.c @@ -0,0 +1,36 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MAX_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ max, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_COMPARE_INTERFACE)
+
+JTEST_ARM_MAX_TEST(f32);
+JTEST_ARM_MAX_TEST(q31);
+JTEST_ARM_MAX_TEST(q15);
+JTEST_ARM_MAX_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(max_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_max_f32_test);
+ JTEST_TEST_CALL(arm_max_q31_test);
+ JTEST_TEST_CALL(arm_max_q15_test);
+ JTEST_TEST_CALL(arm_max_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/mean_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/mean_tests.c new file mode 100644 index 0000000..291c10a --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/mean_tests.c @@ -0,0 +1,36 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MEAN_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ mean, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_COMPARE_INTERFACE)
+
+JTEST_ARM_MEAN_TEST(f32);
+JTEST_ARM_MEAN_TEST(q31);
+JTEST_ARM_MEAN_TEST(q15);
+JTEST_ARM_MEAN_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(mean_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_mean_f32_test);
+ JTEST_TEST_CALL(arm_mean_q31_test);
+ JTEST_TEST_CALL(arm_mean_q15_test);
+ JTEST_TEST_CALL(arm_mean_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/min_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/min_tests.c new file mode 100644 index 0000000..9d831d0 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/min_tests.c @@ -0,0 +1,36 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_MIN_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ min, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_COMPARE_INTERFACE)
+
+JTEST_ARM_MIN_TEST(f32);
+JTEST_ARM_MIN_TEST(q31);
+JTEST_ARM_MIN_TEST(q15);
+JTEST_ARM_MIN_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(min_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_min_f32_test);
+ JTEST_TEST_CALL(arm_min_q31_test);
+ JTEST_TEST_CALL(arm_min_q15_test);
+ JTEST_TEST_CALL(arm_min_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/power_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/power_tests.c new file mode 100644 index 0000000..12c30ea --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/power_tests.c @@ -0,0 +1,36 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_POWER_TEST(suffix, output_type) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ power, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_SNR_COMPARE_INTERFACE)
+
+JTEST_ARM_POWER_TEST(f32, float32_t);
+JTEST_ARM_POWER_TEST(q31, q63_t);
+JTEST_ARM_POWER_TEST(q15, q63_t);
+JTEST_ARM_POWER_TEST(q7, q31_t);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(power_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_power_f32_test);
+ JTEST_TEST_CALL(arm_power_q31_test);
+ JTEST_TEST_CALL(arm_power_q15_test);
+ JTEST_TEST_CALL(arm_power_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/rms_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/rms_tests.c new file mode 100644 index 0000000..d9b1a24 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/rms_tests.c @@ -0,0 +1,34 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_RMS_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ rms, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_SNR_COMPARE_INTERFACE)
+
+JTEST_ARM_RMS_TEST(f32);
+JTEST_ARM_RMS_TEST(q31);
+JTEST_ARM_RMS_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(rms_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_rms_f32_test);
+ JTEST_TEST_CALL(arm_rms_q31_test);
+ JTEST_TEST_CALL(arm_rms_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_common_data.c new file mode 100644 index 0000000..ebf4580 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_common_data.c @@ -0,0 +1,94 @@ +#include "statistics_test_data.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+
+ARR_DESC_DEFINE(STATISTICS_BIGGEST_INPUT_TYPE,
+ statistics_output_fut,
+ STATISTICS_MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+ARR_DESC_DEFINE(STATISTICS_BIGGEST_INPUT_TYPE,
+ statistics_output_ref,
+ STATISTICS_MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+uint32_t statistics_idx_fut = 0;
+uint32_t statistics_idx_ref = 0;
+
+STATISTICS_BIGGEST_INPUT_TYPE
+statistics_output_f32_ref[STATISTICS_MAX_INPUT_ELEMENTS];
+
+STATISTICS_BIGGEST_INPUT_TYPE
+statistics_output_f32_fut[STATISTICS_MAX_INPUT_ELEMENTS];
+
+/*--------------------------------------------------------------------------------*/
+/* Block Sizes */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ To change test parameter values add/remove values inside CURLY and update
+ the preceeding parameter to reflect the number of values inside CURLY.
+*/
+
+ARR_DESC_DEFINE(uint32_t,
+ statistics_block_sizes,
+ 4,
+ CURLY(1, 2, 15, 32));
+
+/*--------------------------------------------------------------------------------*/
+/* Test Data */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(float32_t,
+ statistics_f_32,
+ 32,
+ CURLY(
+ -0.0865129623056441 , -0.3331168756476194,
+ 0.0250664612949661 , 0.0575352840717098,
+ -0.2292942701362928 , 0.2381830931285998,
+ 0.2378328403304206 , -0.0075266553186635,
+ 0.0654584722817308 , 0.0349278285641849,
+ -0.0373417155362879 , 0.1451581096586606,
+ -0.1176633086028378 , 0.4366371636394202,
+ -0.0272791766173191 , 0.0227862627041619,
+ 0.2133536422718378 , 0.0118562921047211,
+ -0.0191296810967338 , -0.1664698927300045,
+ 0.0588821632785281 , -0.2672363715875608,
+ 0.1428649103637904 , 0.3247124128892542,
+ -0.1383551403404573 , 0.1715993345656525,
+ 0.2508002843205065 , -0.3187459152894954,
+ -0.2881928863802040 , 0.1142295247316356,
+ -0.0799771155430726 , 0.1379994750928690
+ ));
+
+
+ARR_DESC_DEFINE_SUBSET(statistics_f_31,
+ statistics_f_32,
+ 31);
+
+ARR_DESC_DEFINE_SUBSET(statistics_f_15,
+ statistics_f_32,
+ 15);
+
+ARR_DESC_DEFINE_SUBSET(statistics_f_2,
+ statistics_f_32,
+ 2);
+
+ARR_DESC_DEFINE(float32_t,
+ statistics_zeros,
+ 32,
+ CURLY(0));
+
+/* Aggregate all float datasets */
+ARR_DESC_DEFINE(ARR_DESC_t *,
+ statistics_f_all,
+ 4,
+ CURLY(
+ &statistics_zeros,
+ &statistics_f_2,
+ &statistics_f_15,
+ &statistics_f_32
+ ));
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_group.c new file mode 100644 index 0000000..6a610a6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/statistics_test_group.c @@ -0,0 +1,14 @@ +#include "jtest.h"
+#include "statistics_tests.h"
+
+JTEST_DEFINE_GROUP(statistics_tests)
+{
+ JTEST_GROUP_CALL(max_tests);
+ JTEST_GROUP_CALL(mean_tests);
+ JTEST_GROUP_CALL(min_tests);
+ JTEST_GROUP_CALL(power_tests);
+ JTEST_GROUP_CALL(rms_tests);
+ JTEST_GROUP_CALL(std_tests);
+ JTEST_GROUP_CALL(var_tests);
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/std_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/std_tests.c new file mode 100644 index 0000000..b80ed71 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/std_tests.c @@ -0,0 +1,34 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_STD_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ std, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_SNR_COMPARE_INTERFACE)
+
+JTEST_ARM_STD_TEST(f32);
+JTEST_ARM_STD_TEST(q31);
+JTEST_ARM_STD_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(std_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_std_f32_test);
+ JTEST_TEST_CALL(arm_std_q31_test);
+ JTEST_TEST_CALL(arm_std_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/var_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/var_tests.c new file mode 100644 index 0000000..3aa7c27 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/statistics_tests/var_tests.c @@ -0,0 +1,34 @@ +#include "jtest.h"
+#include "statistics_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "statistics_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_VAR_TEST(suffix) \
+ STATISTICS_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ var, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ STATISTICS_SNR_COMPARE_INTERFACE)
+
+JTEST_ARM_VAR_TEST(f32);
+JTEST_ARM_VAR_TEST(q31);
+JTEST_ARM_VAR_TEST(q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(var_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_var_f32_test);
+ JTEST_TEST_CALL(arm_var_q31_test);
+ JTEST_TEST_CALL(arm_var_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/copy_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/copy_tests.c new file mode 100644 index 0000000..3804f63 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/copy_tests.c @@ -0,0 +1,33 @@ +#include "jtest.h"
+#include "support_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "support_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_COPY_TEST(suffix) \
+ SUPPORT_DEFINE_TEST_TEMPLATE_BUF1_BLK( \
+ copy, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ SUPPORT_COMPARE_INTERFACE)
+
+JTEST_ARM_COPY_TEST(f32);
+JTEST_ARM_COPY_TEST(q31);
+JTEST_ARM_COPY_TEST(q15);
+JTEST_ARM_COPY_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(copy_tests)
+{
+ JTEST_TEST_CALL(arm_copy_f32_test);
+ JTEST_TEST_CALL(arm_copy_q31_test);
+ JTEST_TEST_CALL(arm_copy_q15_test);
+ JTEST_TEST_CALL(arm_copy_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/fill_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/fill_tests.c new file mode 100644 index 0000000..fc5892d --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/fill_tests.c @@ -0,0 +1,36 @@ +#include "jtest.h"
+#include "support_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "support_templates.h"
+#include "type_abbrev.h"
+
+#define JTEST_ARM_FILL_TEST(suffix) \
+ SUPPORT_DEFINE_TEST_TEMPLATE_ELT1_BLK( \
+ fill, \
+ suffix, \
+ TYPE_FROM_ABBREV(suffix), \
+ TYPE_FROM_ABBREV(suffix), \
+ SUPPORT_COMPARE_INTERFACE)
+
+JTEST_ARM_FILL_TEST(f32);
+JTEST_ARM_FILL_TEST(q31);
+JTEST_ARM_FILL_TEST(q15);
+JTEST_ARM_FILL_TEST(q7);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(fill_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_fill_f32_test);
+ JTEST_TEST_CALL(arm_fill_q31_test);
+ JTEST_TEST_CALL(arm_fill_q15_test);
+ JTEST_TEST_CALL(arm_fill_q7_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_common_data.c new file mode 100644 index 0000000..f4b5911 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_common_data.c @@ -0,0 +1,85 @@ +#include "arm_math.h"
+#include "support_test_data.h"
+
+#define MAX_INPUT_ELEMENTS 32
+#define BIGGEST_INPUT_TYPE float32_t
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(BIGGEST_INPUT_TYPE,
+ support_output_fut,
+ MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+ARR_DESC_DEFINE(BIGGEST_INPUT_TYPE,
+ support_output_ref,
+ MAX_INPUT_ELEMENTS,
+ CURLY(0));
+
+/*--------------------------------------------------------------------------------*/
+/* Block Sizes */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ To change test parameter values add/remove values inside CURLY and update
+ the preceeding parameter to reflect the number of values inside CURLY.
+*/
+
+ARR_DESC_DEFINE(uint32_t,
+ support_block_sizes,
+ 4,
+ CURLY( 2, 7, 15, 32));
+
+/*--------------------------------------------------------------------------------*/
+/* Numbers */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(uint32_t,
+ support_elts,
+ 4,
+ CURLY( 0, 1, 0x80000000, 0x7fffffff));
+
+/*--------------------------------------------------------------------------------*/
+/* Test Data */
+/*--------------------------------------------------------------------------------*/
+
+ARR_DESC_DEFINE(float32_t,
+ support_f_32,
+ 32,
+ CURLY(
+ 0.24865986 , -0.13364227, -0.27233250 , -7.33488200,
+ 0.42190653 , 1.17435880 , -0.49824914 , 0.87883663,
+ 0.63066370 , 1.80275680 , -84.83916000, -2.06773800,
+ 7.63452500 , 1.01487610 , -0.65785825 , 1.78019030,
+ -0.34160388, 0.68546050 , -1.81721590 , -0.10340453,
+ -4.48600340, -1.69763480, -1.26022340 , -1.58457480,
+ 0.51993870 , 2.83526470 , -0.21502694 , -0.57690346,
+ -0.22945681, 0.79509383 , 0.07275216 , -2.16279080
+ ));
+
+/* Alias the 32 element array with wrappers that end sooner. */
+ARR_DESC_DEFINE_SUBSET(support_f_15,
+ support_f_32,
+ 15);
+
+ARR_DESC_DEFINE_SUBSET(support_f_2,
+ support_f_32,
+ 2);
+
+ARR_DESC_DEFINE(float32_t,
+ support_zeros,
+ 32,
+ CURLY(0));
+
+/* Aggregate all float datasets. */
+ARR_DESC_DEFINE(ARR_DESC_t *,
+ support_f_all,
+ 4,
+ CURLY(
+ &support_zeros,
+ &support_f_2,
+ &support_f_15,
+ &support_f_32
+ ));
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_group.c new file mode 100644 index 0000000..7cc2732 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/support_test_group.c @@ -0,0 +1,10 @@ +#include "jtest.h"
+#include "support_tests.h"
+
+JTEST_DEFINE_GROUP(support_tests)
+{
+ JTEST_GROUP_CALL(copy_tests);
+ JTEST_GROUP_CALL(fill_tests);
+ JTEST_GROUP_CALL(x_to_y_tests);
+ return;
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/x_to_y_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/x_to_y_tests.c new file mode 100644 index 0000000..4667031 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/support_tests/x_to_y_tests.c @@ -0,0 +1,80 @@ +#include "jtest.h"
+#include "support_test_data.h"
+#include "arr_desc.h"
+#include "arm_math.h" /* FUTs */
+#include "ref.h" /* Reference Functions */
+#include "test_templates.h"
+#include "support_templates.h"
+#include "type_abbrev.h"
+
+/* Aliases to play nicely with templates. */
+#define arm_f32_to_q31 arm_float_to_q31
+#define arm_f32_to_q15 arm_float_to_q15
+#define arm_f32_to_q7 arm_float_to_q7
+#define arm_q31_to_f32 arm_q31_to_float
+#define arm_q15_to_f32 arm_q15_to_float
+#define arm_q7_to_f32 arm_q7_to_float
+#define ref_f32_to_q31 ref_float_to_q31
+#define ref_f32_to_q15 ref_float_to_q15
+#define ref_f32_to_q7 ref_float_to_q7
+#define ref_q31_to_f32 ref_q31_to_float
+#define ref_q15_to_f32 ref_q15_to_float
+#define ref_q7_to_f32 ref_q7_to_float
+
+#define JTEST_ARM_X_TO_Y_TEST(prefix, suffix) \
+ JTEST_DEFINE_TEST(arm_##prefix##_to_##suffix##_test, \
+ arm_##prefix##_to_##suffix) \
+ { \
+ TEST_TEMPLATE_BUF1_BLK( \
+ support_f_all, \
+ support_block_sizes, \
+ TYPE_FROM_ABBREV(prefix), \
+ TYPE_FROM_ABBREV(suffix), \
+ arm_##prefix##_to_##suffix, \
+ ARM_x_to_y_INPUT_INTERFACE, \
+ ref_##prefix##_to_##suffix, \
+ REF_x_to_y_INPUT_INTERFACE, \
+ SUPPORT_COMPARE_INTERFACE); \
+ }
+
+JTEST_ARM_X_TO_Y_TEST(f32, q31);
+JTEST_ARM_X_TO_Y_TEST(f32, q15);
+JTEST_ARM_X_TO_Y_TEST(f32, q7);
+
+JTEST_ARM_X_TO_Y_TEST(q31, f32);
+JTEST_ARM_X_TO_Y_TEST(q31, q15);
+JTEST_ARM_X_TO_Y_TEST(q31, q7);
+
+JTEST_ARM_X_TO_Y_TEST(q15, f32);
+JTEST_ARM_X_TO_Y_TEST(q15, q31);
+JTEST_ARM_X_TO_Y_TEST(q15, q7);
+
+JTEST_ARM_X_TO_Y_TEST(q7, f32);
+JTEST_ARM_X_TO_Y_TEST(q7, q31);
+JTEST_ARM_X_TO_Y_TEST(q7, q15);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group. */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(x_to_y_tests)
+{
+ /*
+ To skip a test, comment it out.
+ */
+ JTEST_TEST_CALL(arm_f32_to_q31_test);
+ JTEST_TEST_CALL(arm_f32_to_q15_test);
+ JTEST_TEST_CALL(arm_f32_to_q7_test);
+
+ JTEST_TEST_CALL(arm_q31_to_f32_test);
+ JTEST_TEST_CALL(arm_q31_to_q15_test);
+ JTEST_TEST_CALL(arm_q31_to_q7_test);
+
+ JTEST_TEST_CALL(arm_q15_to_f32_test);
+ JTEST_TEST_CALL(arm_q15_to_q31_test);
+ JTEST_TEST_CALL(arm_q15_to_q7_test);
+
+ JTEST_TEST_CALL(arm_q7_to_f32_test);
+ JTEST_TEST_CALL(arm_q7_to_q31_test);
+ JTEST_TEST_CALL(arm_q7_to_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_family_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_family_tests.c new file mode 100644 index 0000000..d3e775e --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_family_tests.c @@ -0,0 +1,183 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+#include "type_abbrev.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Macros and Defines */
+/*--------------------------------------------------------------------------------*/
+
+#define CFFT_FN_NAME(fn_specifier, type_suffix) \
+ arm_cfft_##fn_specifier##_##type_suffix \
+
+#define CFFT_TEST_NAME(fn_specifier, type_suffix, config_suffix) \
+ arm_cfft_##fn_specifier##_##type_suffix##_##config_suffix##_test \
+
+/*--------------------------------------------------------------------------------*/
+/* Function Aliases */
+/*--------------------------------------------------------------------------------*/
+
+/* These aliases allow expansions in the CFFT_FAMILY_DEFINE_TEST() template to
+ make sense */
+#define arm_cfft_mag_init_f32 arm_cfft_radix4_init_f32
+#define arm_cfft_mag_init_q31 arm_cfft_radix4_init_q31
+#define arm_cfft_mag_init_q15 arm_cfft_radix4_init_q15
+#define arm_cfft_mag_instance_f32 arm_cfft_radix4_instance_f32
+#define arm_cfft_mag_instance_q31 arm_cfft_radix4_instance_q31
+#define arm_cfft_mag_instance_q15 arm_cfft_radix4_instance_q15
+#define transform_mag_fftlens transform_radix4_fftlens
+
+/*--------------------------------------------------------------------------------*/
+/* Test Definition */
+/*--------------------------------------------------------------------------------*/
+
+/**
+ * Defines a test for the family of CFFT transforms.
+ *
+ * The family of CFFT transforms includes:
+ *
+ * - arm_cfft_radix4_xxx
+ * - arm_cfft_radix2_xxx
+ * - arm_cfft_mag_xxx
+ *
+ * Where xxx can be f32, q31, or q15.
+ *
+ * @param fn_specifier Allowed values: radix4, radix2, mag.
+ * @param type_suffix Allowed values: f32, q31, q15.
+ *
+ * @param config_suffix Used to differentiate test names based configuration
+ * (in this case whether the ifft_flag is set or not.)
+
+ * @param comparison_interface Macro name used to compare reference and fut
+ * outputs.
+ *
+ * @param output_tpe The type of variable contained in the output
+ * (e.g. float32_t, uint32_t, etc).
+ *
+ * @param ifft_flag Determines whether the arm_cfft_instance_xxx is configured
+ * for an inverse FFT.
+ */
+#define CFFT_FAMILY_DEFINE_TEST(fn_specifier, \
+ type_suffix, \
+ config_suffix, /* Delineate between test configs*/ \
+ comparison_interface, \
+ output_type, \
+ ifft_flag) \
+ JTEST_DEFINE_TEST(CFFT_TEST_NAME(fn_specifier, type_suffix, \
+ config_suffix), \
+ CFFT_FN_NAME(fn_specifier, type_suffix)) \
+ { \
+ arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_fut; \
+ arm_cfft_##fn_specifier##_instance_##type_suffix cfft_inst_ref; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ fftlen_idx, uint16_t, fftlen, transform_##fn_specifier##_fftlens \
+ , \
+ \
+ /* Initialize the cfft instance */ \
+ arm_cfft_##fn_specifier##_init_##type_suffix( \
+ &cfft_inst_fut, fftlen, ifft_flag, (uint8_t)1); \
+ arm_cfft_##fn_specifier##_init_##type_suffix( \
+ &cfft_inst_ref, fftlen, ifft_flag, (uint8_t)1); \
+ \
+ TRANSFORM_PREPARE_INPLACE_INPUTS( \
+ transform_fft_##type_suffix##_inputs, \
+ fftlen * \
+ sizeof(TYPE_FROM_ABBREV(type_suffix)) * \
+ 2 /*complex_inputs*/); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Inverse-transform flag: %d\n", \
+ (int)fftlen, \
+ (int)ifft_flag); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ arm_cfft_##fn_specifier##_##type_suffix( \
+ &cfft_inst_fut, \
+ (void*) transform_fft_inplace_input_fut)); \
+ \
+ ref_cfft_##fn_specifier##_##type_suffix( \
+ &cfft_inst_ref, \
+ (void *) transform_fft_inplace_input_ref); \
+ \
+ /* Test correctness */ \
+ comparison_interface( \
+ fftlen, \
+ output_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+/**
+ * Bulk wrapper for all tests instantiated using #CFFT_FAMILY_DEFINE_TEST().
+ *
+ * This macro allows several test definitions to share the same config_suffix
+ * and ifft_flag settings.
+ */
+#define CFFT_FAMILY_DEFINE_ALL_TESTS(config_suffix, ifft_flag) \
+ /* Radix2 tests*/ \
+ CFFT_FAMILY_DEFINE_TEST(radix2, q31, config_suffix, \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE, \
+ TYPE_FROM_ABBREV(q31), \
+ ifft_flag); \
+ CFFT_FAMILY_DEFINE_TEST(radix2, q15, config_suffix, \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE, \
+ TYPE_FROM_ABBREV(q15), \
+ ifft_flag); \
+ /* Radix4 tests*/ \
+ CFFT_FAMILY_DEFINE_TEST(radix4, q31, config_suffix, \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE, \
+ TYPE_FROM_ABBREV(q31), \
+ ifft_flag); \
+ CFFT_FAMILY_DEFINE_TEST(radix4, q15, config_suffix, \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE, \
+ TYPE_FROM_ABBREV(q15), \
+ ifft_flag)
+ /* /\* Mag tests*\/ \ */
+ /* CFFT_FAMILY_DEFINE_TEST(mag, f32, config_suffix, \ */
+ /* TRANSFORM_SNR_COMPARE_INTERFACE, \ */
+ /* TYPE_FROM_ABBREV(f32), \ */
+ /* ifft_flag); \ */
+ /* CFFT_FAMILY_DEFINE_TEST(mag, q31, config_suffix, \ */
+ /* TRANSFORM_SNR_COMPARE_INTERFACE, \ */
+ /* TYPE_FROM_ABBREV(q31), \ */
+ /* ifft_flag); \ */
+ /* CFFT_FAMILY_DEFINE_TEST(mag, q15, config_suffix, \ */
+ /* TRANSFORM_SNR_COMPARE_INTERFACE, \ */
+ /* TYPE_FROM_ABBREV(q15), \ */
+ /* ifft_flag) */
+
+CFFT_FAMILY_DEFINE_ALL_TESTS(forward, 0U);
+CFFT_FAMILY_DEFINE_ALL_TESTS(inverse, 1U);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cfft_family_tests)
+{
+ /* Forward FFT tests */
+ JTEST_TEST_CALL(arm_cfft_radix2_q31_forward_test);
+ JTEST_TEST_CALL(arm_cfft_radix2_q15_forward_test);
+ JTEST_TEST_CALL(arm_cfft_radix4_q31_forward_test);
+ JTEST_TEST_CALL(arm_cfft_radix4_q15_forward_test);
+
+ /* Inverse FFT Tests */
+ JTEST_TEST_CALL(arm_cfft_radix2_q31_inverse_test);
+ JTEST_TEST_CALL(arm_cfft_radix2_q15_inverse_test);
+ JTEST_TEST_CALL(arm_cfft_radix4_q31_inverse_test);
+ JTEST_TEST_CALL(arm_cfft_radix4_q15_inverse_test);
+
+ /* Magnitude tests removed from the DSP Library. Keeping them here in case
+ minds are changed. */
+ /* JTEST_TEST_CALL(arm_cfft_mag_f32_forward_test); */
+ /* JTEST_TEST_CALL(arm_cfft_mag_q31_forward_test); */
+ /* JTEST_TEST_CALL(arm_cfft_mag_q15_forward_test); */
+ /* JTEST_TEST_CALL(arm_cfft_mag_f32_inverse_test); */
+ /* JTEST_TEST_CALL(arm_cfft_mag_q31_inverse_test); */
+ /* JTEST_TEST_CALL(arm_cfft_mag_q15_inverse_test); */
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_tests.c new file mode 100644 index 0000000..f26c6f6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/cfft_tests.c @@ -0,0 +1,144 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+
+#define CFFT_SNR_THRESHOLD 120
+
+/*
+ CFFT function test template. Arguments are: inverse-transform flag, function
+ suffix (q7/q15/q31/f32) and the output type (q7_t, q15_t, q31_t, float32_t)
+*/
+#define CFFT_TEST_BODY(ifft_flag, suffix, output_type) \
+ do \
+ { \
+ /* Go through all arm_cfft_instances */ \
+ TEMPLATE_DO_ARR_DESC( \
+ cfft_inst_idx, const arm_cfft_instance_##suffix *, cfft_inst_ptr, \
+ transform_cfft_##suffix##_structs \
+ , \
+ \
+ TRANSFORM_PREPARE_INPLACE_INPUTS( \
+ transform_fft_##suffix##_inputs, \
+ cfft_inst_ptr->fftLen * \
+ sizeof(output_type) * \
+ 2 /*complex_inputs*/); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Inverse-transform flag: %d\n", \
+ (int)cfft_inst_ptr->fftLen, \
+ (int)ifft_flag); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ arm_cfft_##suffix(cfft_inst_ptr, \
+ (void *) transform_fft_inplace_input_fut, \
+ ifft_flag, /* IFFT Flag */ \
+ 1)); /* Bitreverse flag */ \
+ ref_cfft_##suffix(cfft_inst_ptr, \
+ (void *) transform_fft_inplace_input_ref, \
+ ifft_flag, /* IFFT Flag */ \
+ 1); /* Bitreverse flag */ \
+ \
+ /* Test correctness */ \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE( \
+ cfft_inst_ptr->fftLen, \
+ output_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+
+/*
+ CFFT function with downshift test template. Arguments are: inverse-transform flag,
+ function suffix (q7/q15/q31/f32) and the output type (q7_t, q15_t, q31_t, float32_t)
+*/
+#define CFFT_DOWNSHIFT_INPUT_TEST_BODY(ifft_flag, suffix, output_type) \
+ do \
+ { \
+ /* Go through all arm_cfft_instances */ \
+ TEMPLATE_DO_ARR_DESC( \
+ cfft_inst_idx, const arm_cfft_instance_##suffix *, cfft_inst_ptr, \
+ transform_cfft_##suffix##_structs \
+ , \
+ \
+ TRANSFORM_PREPARE_INPLACE_INPUTS_DOWNSHIFT( \
+ transform_fft_##suffix##_inputs, \
+ cfft_inst_ptr->fftLen * \
+ sizeof(output_type) * \
+ 2 /*complex_inputs*/, output_type); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Inverse-transform flag: %d\n", \
+ (int)cfft_inst_ptr->fftLen, \
+ (int)ifft_flag); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ arm_cfft_##suffix(cfft_inst_ptr, \
+ (void *) transform_fft_inplace_input_fut, \
+ ifft_flag, /* IFFT Flag */ \
+ 1)); /* Bitreverse flag */ \
+ ref_cfft_##suffix(cfft_inst_ptr, \
+ (void *) transform_fft_inplace_input_ref, \
+ ifft_flag, /* IFFT Flag */ \
+ 1); /* Bitreverse flag */ \
+ \
+ /* Test correctness */ \
+ TRANSFORM_SNR_COMPARE_CMPLX_INTERFACE( \
+ cfft_inst_ptr->fftLen, \
+ output_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ } while (0)
+
+
+/* Test declarations */
+JTEST_DEFINE_TEST(cfft_f32_test, cfft_f32)
+{
+ CFFT_TEST_BODY((uint8_t) 0, f32, float32_t);
+}
+
+JTEST_DEFINE_TEST(cfft_f32_ifft_test, cfft_f32)
+{
+ CFFT_TEST_BODY((uint8_t) 1, f32, float32_t);
+}
+
+JTEST_DEFINE_TEST(cfft_q31_test, cfft_q31)
+{
+ CFFT_TEST_BODY((uint8_t) 0, q31, q31_t);
+}
+
+JTEST_DEFINE_TEST(cfft_q31_ifft_test, cfft_q31)
+{
+ CFFT_TEST_BODY((uint8_t) 1, q31, q31_t);
+}
+
+JTEST_DEFINE_TEST(cfft_q15_test, cfft_q15)
+{
+ CFFT_TEST_BODY((uint8_t) 0, q15, q15_t);
+}
+
+JTEST_DEFINE_TEST(cfft_q15_ifft_test, cfft_q15)
+{
+ CFFT_TEST_BODY((uint8_t) 1, q15, q15_t);
+}
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(cfft_tests)
+{
+ JTEST_TEST_CALL(cfft_f32_test);
+ JTEST_TEST_CALL(cfft_f32_ifft_test);
+
+ JTEST_TEST_CALL(cfft_q31_test);
+ JTEST_TEST_CALL(cfft_q31_ifft_test);
+
+ JTEST_TEST_CALL(cfft_q15_test);
+ JTEST_TEST_CALL(cfft_q15_ifft_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c new file mode 100644 index 0000000..aae5a42 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/dct4_tests.c @@ -0,0 +1,197 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arm_math.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+#include "type_abbrev.h"
+#include <math.h> /* sqrtf() */
+
+/*--------------------------------------------------------------------------------*/
+/* Aliases to aid macro expansion */
+/*--------------------------------------------------------------------------------*/
+#define ref_sqrt_f32(x) sqrtf(x)
+
+/*--------------------------------------------------------------------------------*/
+/* Test Definitions */
+/*--------------------------------------------------------------------------------*/
+
+/*
+DCT function test template. Arguments are: function configuration suffix
+(q7/q15/q31/f32) and input type (q7_t/q15_t/q31_t/float32_t)
+*/
+#define DCT4_DEFINE_TEST(suffix, input_type) \
+ JTEST_DEFINE_TEST(arm_dct4_##suffix##_test, arm_dct4_##suffix) \
+ { \
+ CONCAT(arm_dct4_instance_,suffix) dct4_inst_fut = {0}; \
+ CONCAT(arm_rfft_instance_,suffix) rfft_inst_fut = {0}; \
+ CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_fut = {0}; \
+ \
+ CONCAT(arm_dct4_instance_,suffix) dct4_inst_ref = {0}; \
+ CONCAT(arm_rfft_instance_,suffix) rfft_inst_ref = {0}; \
+ CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_ref = {0}; \
+ \
+ /* Go through all dct lengths */ \
+ TEMPLATE_DO_ARR_DESC( \
+ fftlen_idx, uint16_t, fftlen, transform_dct_fftlens \
+ , \
+ \
+ float32_t normalize_f32 = \
+ ref_sqrt_f32((2.0f/(float32_t)fftlen)); \
+ input_type normalize; \
+ \
+ /* Calculate normalized DCT4 value for input_type. */ \
+ TEST_CONVERT_FLOAT_TO(&normalize_f32, &normalize, \
+ 1, input_type); \
+ \
+ /* Initialize the DCT4, RFFT, and CFFT instances */ \
+ arm_dct4_init_##suffix( \
+ &dct4_inst_fut, &rfft_inst_fut, &cfft_inst_fut, \
+ fftlen, \
+ fftlen/2, \
+ normalize); \
+ \
+ arm_dct4_init_##suffix( \
+ &dct4_inst_ref, &rfft_inst_ref, &cfft_inst_ref, \
+ fftlen, \
+ fftlen/2, \
+ normalize); \
+ \
+ memset( transform_fft_input_fut,0, \
+ fftlen*sizeof(input_type)); \
+ \
+ TRANSFORM_PREPARE_INPLACE_INPUTS( \
+ transform_fft_##suffix##_inputs, \
+ fftlen * sizeof(input_type)); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n", \
+ (int)fftlen); \
+ \
+ /* Input provided as a scratch buffer. Inplace input is \
+ * actual input. Display cycle count and run test*/ \
+ JTEST_COUNT_CYCLES( \
+ arm_dct4_##suffix( \
+ &dct4_inst_fut, \
+ (void *) transform_fft_input_fut, \
+ (void *) transform_fft_inplace_input_fut)); \
+ \
+ memset( transform_fft_input_ref,0, \
+ fftlen*sizeof(input_type)); \
+ \
+ /* Input provided as a scratch buffer. Inplace input is */ \
+ /* actual input. */ \
+ ref_dct4_##suffix( \
+ &dct4_inst_ref, \
+ (void *) transform_fft_input_ref, \
+ (void *) transform_fft_inplace_input_ref); \
+ \
+ /* Test correctness */ \
+ DCT_TRANSFORM_SNR_COMPARE_INTERFACE( \
+ fftlen, \
+ input_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+/*
+ DCT function test template for fixed point data. Arguments are: function
+ suffix (q7/q15/q31/f32), input type (q7_t/q15_t/q31_t/float32_t) and prefix
+ (dct_4)
+*/
+#define DCT4_FIXED_POINT_DEFINE_TEST(suffix, input_type, prefix) \
+ JTEST_DEFINE_TEST(arm_dct4_##suffix##_test, arm_dct4_##suffix) \
+ { \
+ CONCAT(arm_dct4_instance_,suffix) dct4_inst_fut = {0}; \
+ CONCAT(arm_rfft_instance_,suffix) rfft_inst_fut = {0}; \
+ CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_fut = {0}; \
+ \
+ CONCAT(arm_dct4_instance_,suffix) dct4_inst_ref = {0}; \
+ CONCAT(arm_rfft_instance_,suffix) rfft_inst_ref = {0}; \
+ CONCAT(arm_cfft_radix4_instance_,suffix) cfft_inst_ref = {0}; \
+ \
+ TEMPLATE_DO_ARR_DESC( \
+ fftlen_idx, uint16_t, fftlen, transform_dct_fftlens \
+ , \
+ uint32_t i; \
+ float32_t normalize_f32 = \
+ ref_sqrt_f32((2.0f/(float32_t)fftlen)); \
+ input_type normalize; \
+ \
+ /* Calculate normalized DCT4 value for input_type. */ \
+ TEST_CONVERT_FLOAT_TO(&normalize_f32, &normalize, \
+ 1, input_type); \
+ \
+ /* Initialize the DCT4, RFFT, and CFFT instances */ \
+ arm_dct4_init_##suffix( \
+ &dct4_inst_fut, &rfft_inst_fut, &cfft_inst_fut, \
+ fftlen, \
+ fftlen/2, \
+ normalize); \
+ \
+ arm_dct4_init_##suffix( \
+ &dct4_inst_ref, &rfft_inst_ref, &cfft_inst_ref, \
+ fftlen, \
+ fftlen/2, \
+ normalize); \
+ \
+ /* Input samples need to be downscaled by 1 bit to \
+ * avoid saturations in the Q31 DCT process, \
+ * as the conversion from DCT2 to DCT4 involves \
+ * one subtraction. \
+ */ \
+ for(i=0; i < fftlen; i++) \
+ { \
+ ((input_type*)transform_fft_inplace_input_fut)[i] = \
+ prefix##transform_fft_##suffix##_inputs[i] >> 1; \
+ ((input_type*)transform_fft_inplace_input_ref)[i] = \
+ prefix##transform_fft_##suffix##_inputs[i] >> 1; \
+ } \
+ \
+ memset( transform_fft_input_fut,0, \
+ fftlen*sizeof(input_type)); \
+ \
+ /* Display test parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n", \
+ (int)fftlen); \
+ \
+ /* Input provided as a scratch buffer. Inplace input is \
+ * actual input. */ \
+ JTEST_COUNT_CYCLES( \
+ arm_dct4_##suffix( \
+ &dct4_inst_fut, \
+ (void *) transform_fft_input_fut, \
+ (void *) transform_fft_inplace_input_fut)); \
+ \
+ memset( transform_fft_input_ref,0, \
+ fftlen*sizeof(input_type)); \
+ \
+ /* Input provided as a scratch buffer. Inplace input is */ \
+ /* actual input. */ \
+ ref_dct4_##suffix( \
+ &dct4_inst_ref, \
+ (void *) transform_fft_input_ref, \
+ (void *) transform_fft_inplace_input_ref); \
+ \
+ /* Test correctness */ \
+ DCT_TRANSFORM_SNR_COMPARE_INTERFACE( \
+ fftlen, \
+ input_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+DCT4_DEFINE_TEST(f32, float32_t);
+DCT4_FIXED_POINT_DEFINE_TEST(q31, q31_t,);
+DCT4_FIXED_POINT_DEFINE_TEST(q15, q15_t, dct4_);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(dct4_tests)
+{
+ JTEST_TEST_CALL(arm_dct4_f32_test);
+ JTEST_TEST_CALL(arm_dct4_q31_test);
+ JTEST_TEST_CALL(arm_dct4_q15_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_fast_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_fast_tests.c new file mode 100644 index 0000000..d8a8e17 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_fast_tests.c @@ -0,0 +1,75 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+#include "type_abbrev.h"
+
+/*
+FFT fast function test template. Arguments are: function configuration suffix
+(q7/q15/q31/f32) and inverse-transform flag
+*/
+#define RFFT_FAST_DEFINE_TEST(config_suffix, ifft_flag) \
+ JTEST_DEFINE_TEST(arm_rfft_fast_f32_##config_suffix##_test, \
+ arm_fft_f32) \
+ { \
+ arm_rfft_fast_instance_f32 rfft_inst_fut = {{0}, 0, 0}; \
+ arm_rfft_fast_instance_f32 rfft_inst_ref = {{0}, 0, 0}; \
+ \
+ /* Go through all FFT lengths */ \
+ TEMPLATE_DO_ARR_DESC( \
+ fftlen_idx, uint16_t, fftlen, transform_rfft_fast_fftlens \
+ , \
+ \
+ /* Initialize the RFFT and CFFT Instances */ \
+ arm_rfft_fast_init_f32( \
+ &rfft_inst_fut, fftlen); \
+ \
+ arm_rfft_fast_init_f32( \
+ &rfft_inst_ref, fftlen); \
+ \
+ TRANSFORM_COPY_INPUTS( \
+ transform_fft_f32_inputs, \
+ fftlen * \
+ sizeof(float32_t)); \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Inverse-transform flag: %d\n", \
+ (int)fftlen, \
+ (int)ifft_flag); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ arm_rfft_fast_f32( \
+ &rfft_inst_fut, \
+ (void *) transform_fft_input_fut, \
+ (void *) transform_fft_output_fut, \
+ ifft_flag)); \
+ \
+ ref_rfft_fast_f32( \
+ &rfft_inst_ref, \
+ (void *) transform_fft_input_ref, \
+ (void *) transform_fft_output_ref, \
+ ifft_flag); \
+ \
+ /* Test correctness */ \
+ TRANSFORM_SNR_COMPARE_INTERFACE( \
+ fftlen, \
+ float32_t)); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+RFFT_FAST_DEFINE_TEST(forward, 0U);
+RFFT_FAST_DEFINE_TEST(inverse, 1U);
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(rfft_fast_tests)
+{
+ JTEST_TEST_CALL(arm_rfft_fast_f32_forward_test);
+ JTEST_TEST_CALL(arm_rfft_fast_f32_inverse_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_tests.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_tests.c new file mode 100644 index 0000000..6fbc8e6 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/rfft_tests.c @@ -0,0 +1,94 @@ +#include "jtest.h"
+#include "ref.h"
+#include "arr_desc.h"
+#include "transform_templates.h"
+#include "transform_test_data.h"
+#include "type_abbrev.h"
+
+/*
+ FFT function test template. Arguments are: function suffix (q7/q15/q31/f32)
+ function configuration suffix (same as function suffix), inverse-transform flag,
+ input and output type (both q7_t/q15_t/q31_t/float32_t)
+*/
+#define RFFT_DEFINE_TEST(suffix, config_suffix, \
+ ifft_flag, input_type, output_type) \
+ JTEST_DEFINE_TEST(arm_rfft_##suffix##_##config_suffix##_test, \
+ arm_rfft_##suffix) \
+ { \
+ CONCAT(arm_rfft_instance_, suffix) rfft_inst_fut = {0}; \
+ CONCAT(arm_rfft_instance_, suffix) rfft_inst_ref = {0}; \
+ \
+ /* Go through all arm_rfft lengths */ \
+ TEMPLATE_DO_ARR_DESC( \
+ fftlen_idx, uint16_t, fftlen, transform_rfft_fftlens \
+ , \
+ \
+ /* Initialize the RFFT and CFFT Instances */ \
+ arm_rfft_init_##suffix( \
+ &rfft_inst_fut, \
+ (uint32_t) fftlen, ifft_flag, 1U); \
+ \
+ arm_rfft_init_##suffix( \
+ &rfft_inst_ref, \
+ (uint32_t) fftlen, ifft_flag, 1U); \
+ \
+ if (ifft_flag) \
+ { \
+ TRANSFORM_PREPARE_INVERSE_INPUTS( \
+ transform_fft_##suffix##_inputs, \
+ fftlen, input_type, \
+ fftlen * \
+ sizeof(input_type)); \
+ } \
+ else \
+ { \
+ TRANSFORM_COPY_INPUTS( \
+ transform_fft_##suffix##_inputs, \
+ fftlen * \
+ sizeof(input_type)); \
+ } \
+ \
+ /* Display parameter values */ \
+ JTEST_DUMP_STRF("Block Size: %d\n" \
+ "Inverse-transform flag: %d\n", \
+ (int)fftlen, \
+ (int)ifft_flag); \
+ \
+ /* Display cycle count and run test */ \
+ JTEST_COUNT_CYCLES( \
+ arm_rfft_##suffix( \
+ &rfft_inst_fut, \
+ (void *) transform_fft_input_fut, \
+ (void *) transform_fft_output_fut)); \
+ \
+ ref_rfft_##suffix( \
+ &rfft_inst_ref, \
+ (void *) transform_fft_input_ref, \
+ (void *) transform_fft_output_ref); \
+ \
+ /* Test correctness */ \
+ TRANSFORM_SNR_COMPARE_INTERFACE( \
+ fftlen, \
+ output_type)); \
+ \
+ return JTEST_TEST_PASSED; \
+ }
+
+RFFT_DEFINE_TEST(q31, forward, 0U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
+RFFT_DEFINE_TEST(q15, forward, 0U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
+//RFFT_DEFINE_TEST(f32, inverse, 1U, TYPE_FROM_ABBREV(f32), TYPE_FROM_ABBREV(f32));
+RFFT_DEFINE_TEST(q31, inverse, 1U, TYPE_FROM_ABBREV(q31), TYPE_FROM_ABBREV(q31));
+RFFT_DEFINE_TEST(q15, inverse, 1U, TYPE_FROM_ABBREV(q15), TYPE_FROM_ABBREV(q15));
+
+/*--------------------------------------------------------------------------------*/
+/* Collect all tests in a group */
+/*--------------------------------------------------------------------------------*/
+
+JTEST_DEFINE_GROUP(rfft_tests)
+{
+ JTEST_TEST_CALL(arm_rfft_q31_forward_test);
+ JTEST_TEST_CALL(arm_rfft_q15_forward_test);
+ //JTEST_TEST_CALL(arm_rfft_f32_inverse_test);
+ JTEST_TEST_CALL(arm_rfft_q31_inverse_test);
+ JTEST_TEST_CALL(arm_rfft_q15_inverse_test);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_test_group.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_test_group.c new file mode 100644 index 0000000..f071068 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_test_group.c @@ -0,0 +1,11 @@ +#include "jtest.h"
+#include "transform_tests.h"
+
+JTEST_DEFINE_GROUP(transform_tests)
+{
+ JTEST_GROUP_CALL(cfft_tests);
+ JTEST_GROUP_CALL(cfft_family_tests);
+ JTEST_GROUP_CALL(rfft_tests);
+ JTEST_GROUP_CALL(rfft_fast_tests);
+ JTEST_GROUP_CALL(dct4_tests);
+}
diff --git a/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_tests_common_data.c b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_tests_common_data.c new file mode 100644 index 0000000..98987b3 --- /dev/null +++ b/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/src/transform_tests/transform_tests_common_data.c @@ -0,0 +1,3311 @@ +#include "transform_test_data.h"
+#include "arm_const_structs.h"
+
+/*--------------------------------------------------------------------------------*/
+/* Input/Output Buffers */
+/*--------------------------------------------------------------------------------*/
+
+float32_t transform_fft_output_fut[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+float32_t transform_fft_output_ref[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+float32_t transform_fft_input_fut[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+float32_t transform_fft_input_ref[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+float32_t transform_fft_output_f32_fut[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+float32_t transform_fft_output_f32_ref[TRANSFORM_MAX_FFT_LEN * 2] = {0};
+
+/* Some of the transform function modify their inputs in-place, so that they
+ * become the outputs. */
+float32_t * transform_fft_inplace_input_fut = transform_fft_output_fut;
+float32_t * transform_fft_inplace_input_ref = transform_fft_output_ref;
+
+q31_t transform_fft_q31_inputs[TRANSFORM_MAX_FFT_LEN * 2] =
+{
+ 0xC14A5524, 0xCCABDA17, 0xAD6F5B56, 0xFDAFCE3B, 0xA9B226EB,
+ 0x41F6F6A, 0xA5CE38BF, 0x3A978AFA, 0xBA44B82A, 0x855C0F8,
+ 0x3D060524, 0x93D5E570, 0x97D7791D, 0xFFE0C38C, 0x26749841,
+ 0xC0A6EE54, 0x218EC386, 0x39FF3726, 0x8DC1F7CA, 0x702F2CF5,
+ 0xC1142FF1, 0xEC1476AB, 0x15F640DD, 0xE62CCE49, 0x3805DE7E,
+ 0xF70871FE, 0xCF8BD360, 0x8D19A8A0, 0xD764F821, 0xA58558CF,
+ 0x8C0CE04D, 0x50A46C19, 0x66D2370D, 0x50FA359A, 0xB646AE24,
+ 0x6CE00F5C, 0xE6D48948, 0xB55BD831, 0x3B72950A, 0x9EB69530,
+ 0x73394127, 0x773FA6F4, 0x9805A980, 0x838DE587, 0x9CF597F4,
+ 0xA2AD1691, 0xFA81A473, 0x7CDC7D7F, 0x4A5190D0, 0xED895BB9,
+ 0x8FD60F35, 0x1A21D530, 0xA0EB6DDA, 0xBDE6A516, 0x2501A3E1,
+ 0x5ED893C8, 0xE1E175B1, 0xACBBB2F3, 0xED350907, 0xDB140D7E,
+ 0xEEAE272D, 0xBE229841, 0xC18BFB88, 0xA6BB9B80, 0xBCF090E4,
+ 0x24DB166C, 0xF9AB7E42, 0x62DF28D1, 0xC7004665, 0xE3F56FC6,
+ 0x419E0C75, 0x46BE9F38, 0x2432B9B2, 0x758D83E0, 0xDCE12926,
+ 0x3F57CB74, 0x1F4458E2, 0xF1DD639, 0x83A1FB49, 0x173AFC76,
+ 0x86EF7531, 0x48D32F34, 0x7D3E3063, 0x8F2FB549, 0x5C314C9,
+ 0x18CBEB6D, 0xA6F8B697, 0x447B9E9C, 0x2E32BA33, 0xD074D715,
+ 0x81ACD746, 0xE55A4E04, 0x4891860F, 0x1DA3EB4F, 0xE0E6A27F,
+ 0x20BFDEB4, 0xD0B3A25B, 0x40C10544, 0xC15656C, 0x15405EAE,
+ 0x9858E3E1, 0xA36A9C4E, 0x88BD21F9, 0xAACF7A68, 0x773665E5,
+ 0xCEDFDF66, 0x617A9610, 0x524FC968, 0xC2D086CD, 0x5F008079,
+ 0x24DCA447, 0x6A4F5599, 0xB706CD4A, 0x1DE70608, 0xA33A2EE5,
+ 0x137E488E, 0x98061B7B, 0x4079D69D, 0xA4A897D5, 0xC4CEC8F5,
+ 0xD75F7883, 0x22406802, 0xF1AD70BB, 0x9D4ADD79, 0xBCBC7CE4,
+ 0xB358C0D8, 0x85792E47, 0xA7ADAC05, 0x3D19EEAB, 0x331AC0AF,
+ 0x33035831, 0x13D93987, 0xFC542094, 0x845F317E, 0xDDC4BF8B,
+ 0x1379E50C, 0x5C20193F, 0xFDD58298, 0x9D482B82, 0x4A6BE062,
+ 0xDC8A757B, 0x272917C1, 0x90E1EFBC, 0x355AD882, 0xE6F8EA35,
+ 0x604555A1, 0x7DFFFBB, 0xF58AE216, 0x9A11B463, 0xD3541BAD,
+ 0xA1576756, 0x483BED8D, 0x1F05AFCC, 0xCEA63DFB, 0x55B84677,
+ 0xFB2E04F2, 0x787AF96C, 0x84A12CD3, 0x460A9BD, 0x9DB22DD8,
+ 0x1A8C7F28, 0x861E452E, 0x932D3F78, 0x7652D852, 0x73357BBA,
+ 0xEBBB0A58, 0x62536AFA, 0x3F6B65EF, 0x6DC57B58, 0x9EB798CE,
+ 0xE6B0A740, 0xDFF68B47, 0x3247FB8F, 0xFFF3D302, 0xA9FD3E40,
+ 0x475A43D1, 0x6FF9528A, 0x2018A09D, 0x47E0F9C9, 0x4CF5F6D3,
+ 0x2807CE34, 0xDD6FD8ED, 0x234045D1, 0x51CEB5F9, 0x25297896,
+ 0x6443A0FE, 0x8F4449A9, 0xD4C3E1C6, 0xF01D52F1, 0x4E09C820,
+ 0xF18F0810, 0xE1548689, 0xF9DE5A1F, 0x5286DC23, 0x48AC3A4B,
+ 0xEA0C1BE0, 0xA1B785DB, 0x7086465D, 0x1CC10929, 0x1E1D716E,
+ 0xED231D4C, 0x2049D108, 0xB8FF9971, 0x949CF8D4, 0x441F1E8B,
+ 0xC3D95372, 0x69C324B4, 0xA10BFDC9, 0xC781DE78, 0x82476137,
+ 0xE163DDF, 0x390DEEC2, 0xAF68CE5B, 0x8E680ABD, 0x8223A615,
+ 0x92593380, 0x7B1465FE, 0x865AE957, 0x930F53EB, 0xED772EF7,
+ 0x10E916B6, 0xE3BCFA68, 0x2ACB80BB, 0xE51C5590, 0x994714B5,
+ 0xF30984EE, 0x59BBE1B4, 0xB4867DBC, 0xB91C706C, 0xBC16C218,
+ 0xA8931CD0, 0x129A66AB, 0x13171F4D, 0x62882872, 0x4B167FD4,
+ 0xE6902F4C, 0xFA794932, 0xD4B152C, 0xB0856EA9, 0x39466D55,
+ 0x3669E451, 0x8F5B9E8C, 0x877A3C6A, 0x51B956B4, 0x367EAD2A,
+ 0x9D2C662A, 0x78FB6880, 0x4E6D40B6, 0x4070EFDC, 0x4DF9679C,
+ 0x20306EDB, 0xE381AAE7, 0xA55DA748, 0x9B8B617B, 0x3E036FAD,
+ 0x84E4C4A7, 0xD5A3F517, 0x669BA988, 0x98FDDE8C, 0x67BD85CE,
+ 0x34BBB46C, 0x76994800, 0x85B9D8B6, 0x6DFA2FEF, 0x205DB5C,
+ 0x9F843C4C, 0x72721B52, 0x73EF6B86, 0x5FB98B61, 0xC323DDAC,
+ 0x31D424B4, 0xF68C0D7E, 0x162FAF9D, 0x7B2A7A99, 0xF9392693,
+ 0xC42D12C0, 0x8692A73E, 0xD9A1EE80, 0xDD956856, 0x44E7BDAC,
+ 0x8D874532, 0x5F5C9DD0, 0x5D167858, 0x8559FEA2, 0x9D821476,
+ 0xD9654ED2, 0x594C0DC7, 0x1A87B506, 0x3F693200, 0x7A651AB5,
+ 0xA0CCBC8A, 0x9F9E662C, 0x78EF631, 0x2A09DA0, 0xB088C72F,
+ 0x92EE0D42, 0x360DCD5F, 0xF333FE48, 0x8D63CC06, 0x233A8ACB,
+ 0x706651ED, 0x7AA5C079, 0x262239D1, 0x3EBBEBB6, 0xA25A4F3D,
+ 0x32581A06, 0x6E6FD780, 0x5773F7C7, 0x75ED1DDC, 0x90DF2D15,
+ 0xBC79A9BC, 0xB7175917, 0x354E381C, 0x762AADD7, 0xF643DAC1,
+ 0xF3BBF49E, 0xD2FECE7E, 0x6C8140F4, 0xD7694875, 0x92D30822,
+ 0xC742A7CF, 0xB792ED98, 0x121CFE24, 0xA04E1EE7, 0x58CE268,
+ 0x215A080, 0x316CB323, 0xFAB14A31, 0xE1C13C03, 0xFD8EF4F1,
+ 0xF3F446D0, 0x6C6CEA0A, 0xBBFDF9FB, 0x67242969, 0xBE55A4EB,
+ 0x8FF5534, 0x52F0DF1C, 0x9710ADE3, 0xD40F4A21, 0x7984E8E7,
+ 0x419545EB, 0x993F7880, 0xAB246B20, 0x408AABC4, 0xCBF6EA49,
+ 0xC0894C55, 0x4CAA6398, 0xA47856E9, 0xAF2AE47D, 0x22F55D33,
+ 0xF0D37915, 0xD0634C72, 0xD983671, 0x2BCC5AF8, 0x9A77D48,
+ 0xC11B5CFA, 0xF107CD7E, 0x3A6B3593, 0xE1425F05, 0x6271812A,
+ 0x5B838310, 0xBD8418CA, 0x10A58792, 0x239F7137, 0xA13D5071,
+ 0x7F9930D4, 0xA462664F, 0x54180F8E, 0x291585BA, 0xE586B87A,
+ 0x144B2C12, 0x98E425C7, 0xBAA4B373, 0x18F0D03C, 0x99462AC0,
+ 0xD8B4D2EF, 0x72473895, 0xA6BF5435, 0xEDAD53B, 0xE0912FA6,
+ 0x5C33F331, 0x3D93CD7, 0x4D03D752, 0x20699929, 0xB89962F9,
+ 0x36E781E9, 0xF58B642C, 0x5FCA69E3, 0x5960A7F4, 0xAD5AAFD0,
+ 0xDF18324A, 0x3DB1E5AA, 0x76BA3876, 0x1BC29AF6, 0xBCC18841,
+ 0x73A60174, 0x625BFF58, 0x67C57724, 0x4458E53C, 0xE157B095,
+ 0x2B370837, 0x83DF6CE3, 0xDD08EEFA, 0x3F52A7C2, 0x191B4785,
+ 0x60843D82, 0xB0DE11F1, 0x105EA26C, 0x6E1C7AA2, 0x47AADD14,
+ 0xB6676D03, 0x3B8D4DF6, 0x737A694, 0x409521DC, 0x744206A,
+ 0xC722023F, 0x2BE4EAD5, 0x63E11D76, 0xCA4A09AB, 0x5CF2D2B9,
+ 0x31586916, 0xCDFD7D84, 0xB203F634, 0xAD7329D4, 0xC524582F,
+ 0x2E53E6C1, 0xBB0E019B, 0xB8538C6A, 0x6A2542D, 0x8A6A00E5,
+ 0x119725CC, 0x5406D347, 0x1B6FFAF1, 0xECCF71F1, 0x981117F2,
+ 0x7167CA76, 0x74F4B880, 0x77A55F47, 0x59EADB62, 0x4A331D95,
+ 0xBCBBA76F, 0xA45C4D50, 0xC718D5, 0x87CE05D1, 0x60D47AD5,
+ 0xA5CA9C40, 0xB0061766, 0xE69B39DF, 0xBD5F1320, 0x9930EAD3,
+ 0xA8B38325, 0x8DD090F, 0x6A6EEF37, 0x2DF16F66, 0xAB514C7E,
+ 0x31109C58, 0xFD48C7FC, 0x515341CA, 0x77AB8EA6, 0x41328DAF,
+ 0xBAF8D31E, 0xA4B31611, 0xED37F331, 0x7A832A22, 0xA22591C7,
+ 0x722D1F89, 0x3B19CF18, 0x261B8A4D, 0xC3F6F6DB, 0xCF8CED61,
+ 0x990FA250, 0xA02E72A9, 0x560DCEA2, 0xB08E67B4, 0x3674E663,
+ 0x97CC3852, 0xA7EB2EAC, 0xFFDE0AA8, 0xA64719A, 0x23269EDD,
+ 0x3C0B339E, 0x86284D40, 0x48D82ECB, 0xA4D4CCF8, 0x43631B91,
+ 0x4BF0C248, 0xB6497B9B, 0x6827BC58, 0xE30B7AF9, 0xA0CCBF26,
+ 0x6C3B7B71, 0xD744B3ED, 0xFA25D2F6, 0x4CDE642D, 0xD65B8142,
+ 0xA6F9207F, 0xE7A207BE, 0xDB506684, 0x44DA4780, 0x9175EA0C,
+ 0x156104AF, 0x4155E1B0, 0x6E3A6886, 0x9DBA1EA2, 0x5423D9C8,
+ 0xCC024E22, 0x758F852A, 0x1DD6395, 0x2D19CBAD, 0xE164F5A1,
+ 0xC2084602, 0x89C274AD, 0x13CB5562, 0xD7FE2D5B, 0xE07A4EE5,
+ 0x1672BA91, 0x4F624CCF, 0x2E5EA4A3, 0x28FEEFAF, 0xBDDA6EF4,
+ 0x32AFD40C, 0x99A5FB3B, 0xDD1D73A3, 0xA342CB3E, 0xA78445F5,
+ 0x53979C3B, 0x427D7943, 0x5221B58C, 0xA6CE9A5E, 0xFB50ECA4,
+ 0xBB86E36E, 0x60839F6D, 0xC5E1C2F3, 0xA1B7FB04, 0xFBB65E0C,
+ 0x78B80F5E, 0xFD8D972B, 0x3BF3BA90, 0x2D572D9, 0x2B5BC920,
+ 0xB6A0DE01, 0xD274D306, 0xC7C6C855, 0x9CAA669B, 0xB04AA641,
+ 0x4D6B1760, 0x3E17ED79, 0xD23241B0, 0xA4A6F957, 0xCBDE76AF,
+ 0x4E5F9493, 0x4C215DA5, 0x33A052B, 0x1A4D80C2, 0x40AEEBCA,
+ 0x390D106B, 0xE9E8E018, 0x5AF3D6CF, 0xE35E1D4, 0xC4FB1C6,
+ 0x14B6299B, 0x8D2E25F0, 0xCCBF932A, 0xC5AC18B6, 0x2227567D,
+ 0x86B5CE2F, 0x26344534, 0x22C515EC, 0x2442B70D, 0xEC3721C6,
+ 0x34EF687D, 0x9C06323A, 0xEAF3EA60, 0x60396F52, 0xEAE78AA1,
+ 0xC9D06CBC, 0x6F95F6C8, 0x584CC258, 0xBA9A27BB, 0x66DF8D47,
+ 0x9D4804EA, 0x57DD9E67, 0xF89C7895, 0xF5336111, 0x25C122C8,
+ 0x62742114, 0xCFBF6D26, 0xBF9F6482, 0xE6F02CD9, 0x11083202,
+ 0xC99E2618, 0x7EBC9351, 0x440112F1, 0xC9DFFBC1, 0x3BF4DC25,
+ 0xB1BA7FA0, 0x61AF9AED, 0x6B1F7D29, 0xAD865294, 0xE3E01129,
+ 0x7E9E77A5, 0x100435D7, 0x9FE3A71, 0x88597C81, 0x722849FA,
+ 0x31C5A0AF, 0xFBA178DC, 0x7F102D31, 0x5CA07864, 0x950E6F98,
+ 0x82C34882, 0x5D041F11, 0x8C613C57, 0xD398CFD1, 0x426F38AD,
+ 0x5599AB1D, 0xFAFA078D, 0xAB25B413, 0xD94B32CF, 0xB288FE38,
+ 0x2893BB46, 0x9A0B4168, 0xA91BCA94, 0x653A5E8D, 0x2174EBBE,
+ 0xDEFE6415, 0x30DA429C, 0xD0C5E40C, 0xB4719AA4, 0xD29CE7A6,
+ 0x905957CD, 0xCD287499, 0x83CA0AA7, 0xA8385832, 0x25A0CA02,
+ 0xC20D47A4, 0xB562F556, 0x4BC19E4C, 0xD9E215C7, 0x27E838B4,
+ 0xC58612F4, 0xA2827F6F, 0xC49DCDBA, 0x679B7362, 0x4E495845,
+ 0xCFD2F0D1, 0x395E76A0, 0x375A655E, 0x92E2058F, 0x73F9F0CA,
+ 0x61EFF3B3, 0x51FFD362, 0xE7410345, 0x7FDA8B3B, 0xA219E2E8,
+ 0x17ABE543, 0x26557412, 0x4B30084D, 0xA68E191D, 0xFE0D93DF,
+ 0x73EF127D, 0x4DECDDB1, 0x77FAF45F, 0xD6002898, 0x92DD0A40,
+ 0x157F6DDF, 0xC2A55F8E, 0x4359F924, 0xFB630C3F, 0x338B6B58,
+ 0xB2945F75, 0x4FA23A0E, 0x836EB8C0, 0xB3B18FD, 0x86114337,
+ 0x24668ACB, 0x99BB82F0, 0x924C8A47, 0xBA959701, 0x81155ABF,
+ 0x8C612D71, 0x36074CA7, 0xD1668C41, 0xE35F58C7, 0x7FC2802D,
+ 0x8E6A7CF3, 0x65B07D07, 0x815F6A6B, 0x791BF0DD, 0x6E47D719,
+ 0xC24394C7, 0xE84A6EB, 0xF194AFEE, 0x464A2F52, 0x677579FD,
+ 0xEBA775AE, 0x1F6EEFF, 0x9A795237, 0x78D9D45F, 0x9D0B344D,
+ 0xBBD34AB7, 0x2F85B12A, 0x16C5C2AD, 0x3990985D, 0x88DF3351,
+ 0x82811AA5, 0x6D351F41, 0x4066A69D, 0x86B660BF, 0x6EDB4768,
+ 0xDDD78CF0, 0xB5D74F6E, 0xE89E220C, 0x91439687, 0x947CC9C9,
+ 0x3857E2BD, 0x302F8AE4, 0x1DABE7F8, 0x4832D6C9, 0x37D58FCB,
+ 0x4EA8A711, 0xCD7BAC98, 0x19DBF8BC, 0xD8DE8DC2, 0xEAFF7E7B,
+ 0xB7629C93, 0x792C6E19, 0xF7009192, 0xFF88439D, 0x2E196A66,
+ 0xEC71B78C, 0xEAF4BB3A, 0x7C16225E, 0x668F337, 0xCBEE1608,
+ 0x6D5B5552, 0x345DC590, 0x681209CC, 0x7B24A819, 0xD08A1416,
+ 0x99888FE3, 0x9FC7288A, 0x24BD8502, 0xEA1D9678, 0x20EECA0,
+ 0x59BEA057, 0x5ADE91EB, 0xDEA8E49D, 0xFA200E6F, 0x9149C81D,
+ 0xF2281E93, 0x8A5B0451, 0x67312D58, 0xE3B849F1, 0xD2217960,
+ 0x7CDF59F3, 0x33C775C0, 0x9EBA8799, 0x7DF9506, 0xB4E96110,
+ 0xB8FCF3E3, 0xDEA059B2, 0x8229B6EA, 0x316486F6, 0x43919185,
+ 0x6C0D90F3, 0x1C6F3DF8, 0x38DB92A9, 0x5CD41244, 0x2C9F0A7B,
+ 0xDF4A315F, 0xF7CE9C66, 0x4C800860, 0x318D53E0, 0xF105C20D,
+ 0xD753E1F2, 0x750810BA, 0xA17ECCA5, 0x2010140, 0x4D884763,
+ 0xC2BB0DA7, 0xB2D5BA74, 0x141CECD4, 0x887FDFC3, 0xC64B53,
+ 0x2D2A85F6, 0x15532B45, 0x5D5CBCE1, 0xBEB9A16A, 0xA214611B,
+ 0x9FC5AC5F, 0x11AE5DD7, 0xA0B9A5A9, 0xFC648AF4, 0x740009AC,
+ 0xED0E0321, 0xB8E6A61, 0x8910C544, 0xC74F26C8, 0x9525CCF3,
+ 0xB41AEB59, 0xE61984CE, 0x598B2197, 0xA412E59D, 0xE1976DD4,
+ 0xB29BBE16, 0x88FD9FB0, 0xB04006F3, 0xB45E309, 0xD5CC15F1,
+ 0xD9DAF630, 0xDC809335, 0x803ED52, 0xB537F5A5, 0xA994F6EB,
+ 0xF5288568, 0xF66FD264, 0x2EA2B3A6, 0x647619F3, 0xFFB38C7A,
+ 0x1BC03B9, 0xB6BC3061, 0xBF30596E, 0xBE2AD27B, 0x8AC04220,
+ 0x641979A3, 0x9ECCBB89, 0xA144FBC1, 0x4E8FAE26, 0x8C5A9D90,
+ 0x299ED467, 0xD7C9C7E3, 0x1D4865ED, 0x76F31C3D, 0xCEE81CDF,
+ 0xB479195E, 0x6FFB3AE1, 0xDC8A398, 0x300F7364, 0xC7940AFA,
+ 0x3B85BE3E, 0xD98CC40D, 0xA24A3D89, 0x3A674204, 0x22888A38,
+ 0x2E77F2D, 0xA2841C9C, 0xCF0689C3, 0x9FE98922, 0x89335017,
+ 0x2D6B69A7, 0xFEDB63F9, 0x899AF4EF, 0x9F9F9B40, 0xA4BE97E8,
+ 0xA51DAF7A, 0x16AC50D3, 0xA8D7ED6, 0xED193443, 0x7615EF1B,
+ 0xB0DF6A4E, 0x64FFE794, 0xE3DB2C9A, 0x7435B022, 0x556E825C,
+ 0x23802AF9, 0xC25098A4, 0xE75A18BB, 0x70B2A7B9, 0x7FB81BF,
+ 0x63EF910, 0x6C669591, 0x6574DD2B, 0xCF6E379D, 0xD2B3AFAC,
+ 0x1E6A1101, 0x1DE22385, 0x2338191F, 0xC69704B6, 0xCBABC599,
+ 0x54EB4809, 0x7839BE6D, 0xD50017DD, 0x39B1A0E1, 0x288D52D3,
+ 0x2D52668C, 0x20D22A68, 0x4E1207D1, 0x3FCC0EFE, 0x47F3FE64,
+ 0x25177A90, 0xB4BFDD4D, 0xDA8DBDCE, 0x6F7275A8, 0x6BEAA655,
+ 0xAA1810FC, 0xE4DB593A, 0x8A4D4BC0, 0x2C402E93, 0xF1C0F7F9,
+ 0x6F0CC577, 0x70412414, 0x752F9DC1, 0xD82E38EA, 0xAC455F7B,
+ 0x4DCD4EDB, 0x92BC2696, 0xFB03F135, 0x4FCA1F8C, 0xBD5E75F6,
+ 0x502F41B0, 0x3616D3F1, 0x2E5B8E31, 0x2026EB19, 0x57E783D7,
+ 0x467BBE00, 0x4703ABA3, 0x1F776B9C, 0xE2570A84, 0xFEC7DB48,
+ 0x1BD5012, 0xFD0A2D5D, 0x7FCC29F2, 0x291304B6, 0x99D5D8ED,
+ 0xC7551C8, 0xFD12F38F, 0xBADE8892, 0xDF749997, 0xA5DAE2F,
+ 0x2B9FA269, 0x5C13CFED, 0x15E9A399, 0x54437F4E, 0xA72DB2AB,
+ 0x56186AA1, 0xFE4DB55C, 0xA34D7836, 0x2A879760, 0xC63FA94,
+ 0xAC18B207, 0x5FC78B3, 0x7F10621E, 0xA769E6B2, 0xEC9F4A11,
+ 0xCE3F982C, 0x62BA2EF5, 0xA5F239CD, 0x73D63FED, 0xE36E9F5E,
+ 0x8AC1DA0E, 0x3F3DB3EB, 0x738326EA, 0x35C366B1, 0xCD476E86,
+ 0x82F6B208, 0xF11A9FC1, 0x426AC396, 0x7E4D1B93, 0x75E4EDB7,
+ 0xAF3C44A7, 0x51A5EF5C, 0xFAD2463D, 0x8A5639CA, 0xC995AC78,
+ 0xCC4BE4F6, 0x3AFE7F8D, 0x66993D04, 0x4386FF37, 0xCBC1C6C2,
+ 0x55A8F5EC, 0xE81A9A75, 0x30A67E1B, 0x4A4A7D0C, 0x20F7F993,
+ 0x1891805, 0x738976AD, 0xD426E7D6, 0x3C5CEEBF, 0x4499187F,
+ 0xABF17C97, 0x447C317F, 0x68D8419C, 0x7AAB6456, 0x421BCF29,
+ 0xF6740F9C, 0x8916BB8D, 0x3D72AAB, 0x9AD54DD7, 0x7549C6EE,
+ 0x7317342B, 0xA18546D4, 0x1056BDA7, 0x54BBCCCE, 0x8CE63E46,
+ 0x5D146234, 0x33BE6C63, 0xB250C4E5, 0x89D72335, 0x87C36BA,
+ 0xB65530CC, 0x2DFAC48C, 0x1663D16F, 0x59B80AA, 0x950274EA,
+ 0x92532D4A, 0x3CEF802D, 0x492FBDA5, 0xA63A2574, 0xEF8005C2,
+ 0x94A18651, 0xAF627ABA, 0x6829B238, 0xA698F646, 0xD2598516,
+ 0x10144D36, 0xD9B1D1B9, 0xAB2ACF05, 0x5395B699, 0xA7851C75,
+ 0x1806C6F3, 0xAE970306, 0x3284B145, 0x98F4FE8F, 0xECDD35CC,
+ 0xDDC1EE0E, 0xC4848865, 0x925826BD, 0x4078BE39, 0x68A8561A,
+ 0x323045DC, 0xA933B37F, 0xBA2AEE2E, 0x4F24F65D, 0x349EE246,
+ 0xF97B9D0E, 0x46DC5759, 0x4529F425, 0x80D17B42, 0x8E16F709,
+ 0x1B42206A, 0x4934A526, 0x391BB6DE, 0xB52EF45C, 0x26C30290,
+ 0xCBA23CAA, 0xA501A8C3, 0xD922C4F8, 0xE8824E53, 0x6F4255DC,
+ 0x5960B544, 0x58BC69D6, 0xCA936323, 0xFDDF053C, 0xC2E002D6,
+ 0x7D750755, 0x8A3F9CD1, 0x35F8F6F8, 0xFB7BD154, 0x65CFF94F,
+ 0x390A58DD, 0xD97C4093, 0x501CA2A3, 0x8EA5DEBC, 0xCA93461F,
+ 0xE02D984C, 0x126F8517, 0x39FDD887, 0x46241AE9, 0x777E854D,
+ 0xE2B36349, 0x58E3FA9F, 0x971DEF1E, 0x8E156228, 0xC0E14E9,
+ 0xA9A01BE6, 0xB318C990, 0x971680D6, 0xA1F359CE, 0x487E23F4,
+ 0x7DE465B0, 0x4E4C905E, 0x2A652959, 0x116FF167, 0x5C74AAB9,
+ 0x4FEFC920, 0x28DF4EB8, 0x29EBF45A, 0x1E350CF6, 0x7134F224,
+ 0x22CCF1B6, 0x3890ACCD, 0x9BC304F0, 0x7A37B14E, 0xF3724F9C,
+ 0xDAC493BE, 0x504692EB, 0x82A56D75, 0x42BC73F0, 0xADA92177,
+ 0x2D9D9FD2, 0x41D874F, 0xEFCFD8FE, 0x8E83A5A2, 0xB84AF0DA,
+ 0x65F9B035, 0x6DF4EEE0, 0x7D403714, 0x1CCB8B3A, 0x25B30F14,
+ 0x5384B044, 0xD21FB429, 0x2C407A2, 0x88622917, 0x92D49C25,
+ 0x845AA406, 0x532D7675, 0xC0B7713D, 0x30E6933B, 0xD270DE3B,
+ 0x78771A87, 0x1949A28, 0xAEC00040, 0x10A092F4, 0xBD9D5066,
+ 0xDE166CB7, 0xE8ECE4D3, 0x867417C9, 0xCF0657E4, 0xD7D550F7,
+ 0xCD472B6D, 0x8CD0F002, 0xD7D47B7C, 0xA2E5475F, 0x2B66B40,
+ 0x397A7C9F, 0x6C4BC024, 0x9FDA402, 0xD981917E, 0xA3A6C8E,
+ 0xC9A42042, 0xCF0D1D5B, 0x1A96C11B, 0x9271030B, 0x4BD5D13C,
+ 0xCDA08C03, 0x1E4B3256, 0xDBB263E, 0x94B1E758, 0x5CF0232F,
+ 0xC76F252E, 0x27FF7F55, 0xA55DC287, 0x72886B75, 0x38AA73C2,
+ 0xA5759CFB, 0xF0A75C8C, 0x7059CBE3, 0x6519FBE2, 0x8C3B4162,
+ 0x5A19A4DE, 0x9D93E753, 0xA9EDF8B5, 0xD68126CD, 0xEA6A7399,
+ 0xA73005B4, 0x45BC5168, 0xABD166BA, 0x4D0CC0DF, 0xE1376FF9,
+ 0x393FB309, 0xE995744E, 0xD5EF71BE, 0x66C2BF35, 0x88D62A85,
+ 0x14121E08, 0x7006CE98, 0x7F0A7076, 0x7DB9C751, 0xDC7056CD,
+ 0xC1517CD, 0x65BCE88, 0x1B0F1E71, 0x54C2DA11, 0x101BFDD8,
+ 0x28096AAD, 0xC365859F, 0xACE13396, 0x7CB432BC, 0xB19EA011,
+ 0xAD9BC7D2, 0x3AF387B1, 0xCCE30470, 0x5335FC46, 0x40D13C16,
+ 0xD548B4CC, 0xC476A7BD, 0x66BC0663, 0xB7C6960F, 0x12D1E821,
+ 0x9A536C48, 0x42641630, 0x740C9A48, 0xF61664E8, 0x3B11E69A,
+ 0xBD79E1F1, 0x3F930B7D, 0xD98B085D, 0x2151962F, 0xD4D7F80E,
+ 0x88975123, 0x5302989, 0x12F5CA2B, 0x37C29573, 0xD1D2A3A6,
+ 0x46DA55DA, 0x2EC8C098, 0x802A42DF, 0xD07A11E5, 0xD5BF4B16,
+ 0x171BCB96, 0xB5843001, 0x57BDCAA7, 0xDDD36F33, 0x633D0AA0,
+ 0x313B7064, 0x68BD30CE, 0xC986B6C3, 0x2271824F, 0x9951E552,
+ 0x15939472, 0xDC668F83, 0x1D98A441, 0xA4A1676, 0x631C444B,
+ 0x6EB61C7C, 0x8EEE0B5E, 0x23F82C1F, 0x6C4B53C1, 0x41116D6,
+ 0xEBC1627A, 0xC8839049, 0x7F07A8F6, 0xD1F74661, 0x7D9892DD,
+ 0xF010EC90, 0x37C8A4F4, 0x6ABA986E, 0x68B1E4F6, 0x8066EE05,
+ 0x5E964158, 0x88D477A6, 0x776CF1E1, 0xB7AB3B60, 0x183D58C0,
+ 0xA7E13F2F, 0xDD435AD0, 0xF37DF46E, 0xD3F3F774, 0xB6B24A9A,
+ 0xC097D9F2, 0x54EE718C, 0x4469BDB, 0x4F20DAC, 0xB4002AD5,
+ 0x2E7AB56, 0xCDB4B18C, 0xF2ACE62D, 0x54BD40DE, 0x46DCCA2,
+ 0x5B7F32F9, 0xA8CB257D, 0xB138C149, 0x71474D19, 0x6F71C293,
+ 0xD88FBC7D, 0x9E0A7F86, 0x14B92605, 0x1CBACDC, 0x29159263,
+ 0xBB719E18, 0xD41B37EE, 0xA236E27E, 0xE916BAE3, 0xED34D9DA,
+ 0xFDDE09B6, 0x4FE72C56, 0x16927460, 0x8CFFF9A, 0xA9465741,
+ 0x2B1CD6E0, 0x6BA277FD, 0xE06F70EC, 0x7CB2715, 0xFEDC13C8,
+ 0x7049632E, 0xC6448831, 0xF72CA3A, 0x9B2BE231, 0xC16A8438,
+ 0x948EB7E, 0x64041803, 0x82A43295, 0x226D95CE, 0x84AFC1EE,
+ 0xB2EF3B82, 0xAC18A45C, 0x74DE3ADE, 0xD0E6FAD4, 0xE10C242E,
+ 0x797DF7BA, 0x812CD7B8, 0xED45B681, 0x8F6CCDE8, 0xC2376DFF,
+ 0xCABE35D6, 0xD450395B, 0x13493CE3, 0x870E1BF5, 0x7B0BF341,
+ 0xEBD572F2, 0xAE22B3F1, 0x7ED22DF8, 0xEFE826ED, 0xF147F4BD,
+ 0xA12DA6F2, 0xF3871967, 0xE4423B70, 0x298472D9, 0x45E03E3D,
+ 0x2BE705AC, 0x41E3AE6C, 0xA29DF92C, 0x54B33739, 0x8EA8F7A9,
+ 0xDEFF7BC9, 0x77D06961, 0x71981BA1, 0xBA5A5647, 0x4A8E0E2E,
+ 0x9F519F5D, 0x31BBA940, 0x3D3A0532, 0x7090F0AD, 0x8B47D658,
+ 0x8D198BAF, 0x9ED929B6, 0x323BB81, 0x97210404, 0x7B8790DA,
+ 0xD8438C25, 0xDFBB1C93, 0x2C3F415B, 0x14738C42, 0xB46C2C7A,
+ 0xA3627CAB, 0xFC540D08, 0xE8227979, 0x672B87FE, 0xB257C949,
+ 0x9C2B31FF, 0x97AAACA8, 0xC662B448, 0x5BFEFC7C, 0xC2FDEDDE,
+ 0xAD306CED, 0x639A2576, 0x9ECC1378, 0xA72D71B3, 0x94E11CDB,
+ 0x8BF14832, 0x945C1728, 0x49AE595B, 0x526DD500, 0x40A7D344,
+ 0x8EB1DA34, 0x731E17C5, 0xA7CF41A4, 0xCB068104, 0xC842B8E,
+ 0x7F5733E1, 0xAC9CB3B, 0x2E3F58C0, 0xFD8BC4F, 0xFFBCBBAA,
+ 0x620248F9, 0x27AC344D, 0xF2E5958B, 0x773EBC3A, 0xEA6078F7,
+ 0x6B32D1D7, 0xC00DF984, 0xE73C86AA, 0x712026DB, 0x2CE271FF,
+ 0x38578573, 0x816605D0, 0x673509A9, 0x8D693AC8, 0x2533C371,
+ 0x6783E269, 0xC5731F9, 0xF2A8041E, 0xBB3C008F, 0x2B290D9A,
+ 0x122A4BA4, 0x645A69B, 0xB86CC256, 0x9369B8C3, 0x90CF4CEB,
+ 0x573005D0, 0x4F7DB793, 0xD6AC972E, 0x178BFB66, 0xC430DCEE,
+ 0xD1A8138B, 0xBF6EC4C8, 0x693E6FAF, 0x54119B44, 0x9C904669,
+ 0x4D95F608, 0xDB59E550, 0xD85DDBBC, 0xD15818AE, 0x680778D8,
+ 0x3B67A234, 0xEBE9DAF3, 0xEB8E049B, 0xDD9E0EB8, 0x5D4FB1FB,
+ 0xCEA62C1C, 0x948AF719, 0xA7E58E36, 0x800EAD97, 0xCD895A65,
+ 0x72E63F92, 0xA9A82DD3, 0x8CC07793, 0xE70EBE82, 0x1F69534,
+ 0xAB727A31, 0x1582EF9, 0x7247F677, 0x5FFD7E2C, 0x950EA9DF,
+ 0xFF38A172, 0xDD75DB84, 0x3A416207, 0xD6A23DA7, 0x3BBE70D0,
+ 0x538C25CA, 0x2958DF9, 0xD7B9C83E, 0x61F35964, 0x1E05B36,
+ 0xDD57CDCF, 0x997335B, 0x3A65762A, 0xC5836CD0, 0x9EF2B7F1,
+ 0x5094196, 0x6949A654, 0xB7FD3E5D, 0x6070C271, 0x30364C38,
+ 0xDCAFFFA5, 0xCD4ED281, 0x9865FE7C, 0x75F665AD, 0x6ABADB10,
+ 0xAB43129, 0x26B7A5B8, 0xA321DDBD, 0x467AD732, 0x153A1AE,
+ 0xAD6B1842, 0xBE19B6BE, 0xC1E22C82, 0x73372EA5, 0xF9EF4AD7,
+ 0x24C81977, 0xD8451807, 0xCD10ADC8, 0x8FBD95E2, 0xE0789969,
+ 0xC77A80F2, 0xF1165BCE, 0x3488C653, 0x16F3E378, 0x8D71B29A,
+ 0x628EC98A, 0x40963234, 0xF918E028, 0x9A584D33, 0xC174E2FE,
+ 0x417C5145, 0x1C751175, 0xB21E0C12, 0x30218ECC, 0x9D7731BD,
+ 0xA07DBA0F, 0xE7504D39, 0x3E37F16B, 0xD3BAB050, 0x6F3DE64,
+ 0x1998A7BA, 0xA61A6D07, 0x424FBED7, 0xCD6B3236, 0x68E71248,
+ 0x58CC3DFB, 0x584FA4F5, 0xFFE8E2BD, 0x9F0E3D75, 0x788DD779,
+ 0x978ED891, 0x7E1BFFC8, 0xB812A1C9, 0x5CCC1A32, 0xF1A47219,
+ 0xD6BA6E71, 0xAFA86EB5, 0x28D128E2, 0x9EDD53B, 0x9AAB7E9C,
+ 0x493B76F2, 0x31C5C89, 0xCE5FC3B6, 0x974CC3F5, 0xCBBD90FB,
+ 0x61DE988E, 0x99B927CB, 0x972EFCCD, 0x2719AD6, 0xE06E4B29,
+ 0x48215B1, 0x37EDE8E4, 0xABF9F87F, 0x8BC1C626, 0x5B19EC05,
+ 0x212A2AE1, 0x28446975, 0x20D04126, 0xFC453267, 0x967D9524,
+ 0xDF1CDF8, 0xFB17DCA3, 0x11E68AC6, 0x3AD7D667, 0xD133EF43,
+ 0x5EC41DA3, 0x587AA639, 0x17ADAE3, 0x816DF77A, 0x37D0726A,
+ 0x49DC33D9, 0x6C9737E, 0xA6A2F950, 0xEC5F352C, 0x50D1E06D,
+ 0xC10009A6, 0x2F70F8BE, 0x382269B1, 0x4C29E7CB, 0xBD474FF3,
+ 0xD19A4F6, 0xC3CCE458, 0xE09B348, 0xD15A0DC5, 0x1C10D20E,
+ 0x4AFDED15, 0x3C109DC1, 0xD8C117F5, 0xB501DDF5, 0x39C92B5F,
+ 0xE76FCA13, 0x76DBAA1B, 0xB0730EBF, 0x67DD1FBC, 0xD8B87AB6,
+ 0xA826225B, 0xAB2F7089, 0x499FA36D, 0xF26455B, 0xDC79F8EF,
+ 0x987E765E, 0xA13E60C7, 0x500C7803, 0x492C871D, 0x970DE4EE,
+ 0xD1423DC1, 0xB66048A3, 0x804895AB, 0xC079A15F, 0x5E6FD682,
+ 0xE936476E, 0x8DECE38F, 0x76A011D, 0x53575B91, 0xB263D36A,
+ 0x8F2624C1, 0x26B34937, 0x75A7EC2F, 0xE33ED24, 0xBF1BE7C7,
+ 0x8D6BA785, 0x1D9FE802, 0xB8F4EC20, 0xD5C714B2, 0xC1326D06,
+ 0xFCA78B3F, 0xC0065015, 0xA4B9F286, 0x53F92A8B, 0xF4B02DBB,
+ 0xEC47E64C, 0xA29FFB12, 0xBA94FFB2, 0xB6980EB2, 0x7415C83F,
+ 0x93F91A24, 0x4C6F7615, 0x34431174, 0xC7D63B4, 0xB1599158,
+ 0xA3A01FCE, 0xBD477764, 0x6B16EC41, 0x772D8BF5, 0x90F0A785,
+ 0x8F72672C, 0x7AD22CDC, 0x70824998, 0x1BED16D5, 0x596E84FF,
+ 0x48B5B4F4, 0xB20D0B81, 0xF00F7AFF, 0x80F618DA, 0xD10AFE11,
+ 0xA8EA3109, 0x91BA5E43, 0x31345A01, 0xEB0EF0F8, 0xCC6E7FB5,
+ 0x3348AE52, 0xEBB124D9, 0x447E58B1, 0xF2A3D592, 0x7F3EE5D8,
+ 0xD3D7B836, 0x9C98DCD4, 0x27F0B7A0, 0xA9655FD9, 0xAB48E5F8,
+ 0x7F996D8E, 0xAC13B08B, 0x2530AC6D, 0xAA542552, 0xD4E6B42A,
+ 0x6432AA64, 0xEAC84F76, 0x41D5F959, 0xCDE91DDF, 0xA0AA485A,
+ 0x6453698, 0x277C18A4, 0x161A497, 0x66FECAE2, 0x1B64683,
+ 0x948DD228, 0x1F3C5950, 0xFFC271FB, 0x15C4DF12, 0x7C78252B,
+ 0x9D4EBB89, 0xE6FA1D49, 0x6B032100, 0xB65DD3CC, 0x106BC9B5,
+ 0xE0223D45, 0xF7779B03, 0x4B0EA0C2, 0x3CB5AAF2, 0x9A458E5F,
+ 0x524090ED, 0x3BB1F18F, 0xB4DD065E, 0xA8F13E4F, 0xC4949ABB,
+ 0xD8142D31, 0x99069DE6, 0x989D2A16, 0xC72D929, 0xA2AC5754,
+ 0x7E29B714, 0x6E25C15F, 0xE8777078, 0x467DDCEA, 0xF94B2ACB,
+ 0xDF429476, 0x69AE316, 0x363C664D, 0x85D6AA1E, 0xD727E39E,
+ 0x5AF440A3, 0x2F0BB16D, 0x461D52D, 0x610559B6, 0xC28066D9,
+ 0x3C13AE61, 0xA965B865, 0x2BCE3D4A, 0x361C4848, 0x46B94657,
+ 0xF2AE634D, 0xD7FD4B8B, 0x70C175D8, 0x33128DF, 0xB9718A3B,
+ 0x8EF80C0F, 0xAB12E738, 0x124B8055, 0x43448325, 0x9F05E427,
+ 0xA0A9F843, 0x57A9A3FA, 0x492EEA32, 0xE73D2B18, 0xF3113C2C,
+ 0x2BA9B42D, 0xFF0B320, 0x3A18CD71, 0x59804367, 0xC37F9B87,
+ 0xB8A990, 0xAFE9F267, 0x1892892B, 0x25B9C66D, 0x52D4056E,
+ 0xCC1508CA, 0xAD213DB2, 0x8B43F743, 0xAA9705AD, 0x9BC756A2,
+ 0x43F42526, 0x596FEE87, 0x2B8AFF32, 0x46DEDB48, 0xBF06317C,
+ 0x876D4CF2, 0x16951456, 0x2B051AFD, 0xFD093E9D, 0x2F113180,
+ 0x77BFC4C0, 0x29200C52, 0x182D384E, 0x54AE29E0, 0xF90961E8,
+ 0x6072B8F8, 0x3D346F4E, 0x9AA5DBA4, 0xE5E22EC6, 0x392170DA,
+ 0x40939B9B, 0x65B89151, 0xC54AB94, 0xAD7280BC, 0xA3D4395E,
+ 0x3B5754D2, 0x9E77A6A2, 0x9A737F56, 0x9B2D432D, 0x8FDDA7E7,
+ 0x5958516E, 0x7F52CD74, 0xC1761A50, 0x2B80C01F, 0x5AA99F54,
+ 0x36FAA395, 0x5DB4B3AD, 0x82024C73, 0x988CEFE0, 0xB44498C0,
+ 0xF9561A4, 0x280470E6, 0x6966F3A0, 0x47E374F4, 0xF00F4CFF,
+ 0xBC5C4DB2, 0xE287924F, 0x1ED57369, 0x484FE06D, 0xE92E6564,
+ 0x7429DAD2, 0x1473AF49, 0x9619E0CD, 0xE6EC2B63, 0xF7A983B5,
+ 0xEC43C28F, 0x4C98EBE7, 0xA61FDF89, 0xA867E5ED, 0x1088A7C,
+ 0xCF1CEAE8, 0x223AA207, 0x686F4F7B, 0xEBB013E1, 0xDDC01886,
+ 0x77478D4E, 0x2FFCEAEB, 0xFCA58846, 0x1208668E, 0x32F8252,
+ 0x65C9F3ED, 0xC7584B2F, 0xF3EB26B2, 0x90890270, 0x5D97ED04,
+ 0xF5B5B18A, 0xCF415DF9, 0x4CF4683F, 0xE2E3F29F, 0x850E4BEF,
+ 0xDBABF6E2, 0xBD183286, 0x2F36215C, 0xD8CA1DD3, 0x4309CC6F,
+ 0x9FA52446, 0xBD94348E, 0x8693D9B6, 0x61E880C2, 0xA1851D5E,
+ 0xAAB94F80, 0xF8919C00, 0x74D82ECA, 0x4466A1B6, 0xA0A98E8C,
+ 0x95B6D1D, 0xE5393A4C, 0x5A40CFFB, 0x67013370, 0x571B0FDA,
+ 0x9E7E805C, 0x15E32653, 0x2CFE7902, 0xA02E0906, 0xA8883783,
+ 0x7A68B719, 0x3402833A, 0x68BFD324, 0xE0B43DA3, 0xF9DB0F,
+ 0xC9510610, 0x690D30B, 0xE79AB417, 0xC917E4C0, 0x7B05CE55,
+ 0xE116EFDB, 0x69E3B158, 0xF91ED58D, 0x1832D16A, 0x91F4EA17,
+ 0x3D24C408, 0x76A2C6D0, 0x99B19825, 0x2BF52475, 0xAD49289D,
+ 0x66238CD7, 0xAC1571F5, 0xA2EABC02, 0x889337AE, 0x3219AFFB,
+ 0x104B8779, 0x810488A8, 0xAC35416A, 0x2C6DEF85, 0x2ED109F5,
+ 0xCC8C6732, 0x97CD8E90, 0x339F3E81, 0x91486206, 0x2708D41D,
+ 0x1F2B19A7, 0x51A60303, 0x5E90E440, 0xB63092C8, 0xF1031823,
+ 0x971A06, 0xB624F6A2, 0x58AC0181, 0xA983D599, 0xA776D877,
+ 0xB727FE1, 0x55AC01B1, 0x4298EA17, 0x4D6BB9AA, 0x31C55C65,
+ 0x6A266780, 0x4FD92256, 0x817DB37A, 0x46A14DF1, 0xEC7D9F14,
+ 0x98D1C1B7, 0x911DF80D, 0xBFBF24E1, 0x9B4DBC6A, 0xE1F71BA4,
+ 0x9EE5E44A, 0xD1868C4C, 0x6FB45D76, 0x11EC8672, 0x1CED7F0C,
+ 0x1524A040, 0xA49DE9D3, 0x99FF328A, 0xC392F619, 0x52A856CC,
+ 0xDB0B0AE6, 0x67F0162E, 0x2C20D410, 0x4E23C4D, 0x828032EA,
+ 0xC2E7DFFA, 0x908CF524, 0x919F61EE, 0xF001C6F, 0xA81DDF65,
+ 0x5EC56647, 0x28385ACF, 0xBDD764C0, 0x75C853AB, 0xDF0ADD73,
+ 0xEEA9C63D, 0x804949F5, 0x658ACD0A, 0xD12F3F50, 0x1FD4F7EE,
+ 0x7F023D80, 0xD2CB08B5, 0x477EA9A1, 0x872DB719, 0x7B8B6AE9,
+ 0x84F6AC4, 0x81634EB4, 0xD1A89CF, 0xB3F4F3B9, 0x3A6B024B,
+ 0xAA2CA2C5, 0x9C902C0C, 0xC40E4135, 0x3C6E612F, 0x11219414,
+ 0x1F184277, 0x11B6B30C, 0xDD8A6A5A, 0xA0D21C9D, 0x55377022,
+ 0xD0708FBD, 0x8D761020, 0x54FCFCFC, 0x477801BD, 0xD6919EB8,
+ 0x9AD29078, 0x36F8D9B8, 0xAE525B8C, 0xCA7ED140, 0x2D8F8B97,
+ 0xD1B79EAA, 0x2E26FB2A, 0xFB396E32, 0x399129A3, 0x28B55FA1,
+ 0x2ECB2CF0, 0xDF1CBF7C, 0xDE57A70D, 0x33410B33, 0x7C5759BF,
+ 0xF534264B, 0x16C8C221, 0x874A3A63, 0xD05808ED, 0x679674BC,
+ 0x24B060C9, 0x4B162B53, 0xC7D01208, 0xE753DE61, 0xFA9840E4,
+ 0xA4FEC439, 0x4143E13F, 0x327E9EE8, 0x319D901E, 0xC40FC209,
+ 0xB1E1FFFC, 0xE737D52B, 0xD074E058, 0xAD8892EE, 0x86B93396,
+ 0x49C13F4B, 0x60A5721C, 0xD4C4F599, 0x14B38EBB, 0x86BA655,
+ 0x95F4E0C, 0x4217E99A, 0xD0CA3861, 0xBDD3617B, 0xB0BDBF4D,
+ 0x99E3389A, 0x8200DCFA, 0xEC22C8AC, 0xBA8DDB32, 0x3F7DDFC8,
+ 0xC7DDC171, 0x211CF31, 0xCC31A0C7, 0x99A84F32, 0xC9FFD317,
+ 0x2267733A, 0xFBD05569, 0x306BC05F, 0x6E2685D5, 0x43FBF7D1,
+ 0x5A2DB2D3, 0xE6491D4B, 0xAD078066, 0x7CAF7AAD, 0x2B1FEBA5,
+ 0x3418A0EC, 0xC359E9B7, 0xB024E024, 0x58F22A6B, 0x18EEE710,
+ 0x4755B9C5, 0x528D3273, 0xC8F9255, 0x635E5F9D, 0xABDF5BAD,
+ 0x8410F054, 0xEA068528, 0x438345EB, 0x56EF340, 0xBD86A7DE,
+ 0x543A126A, 0x5F259D83, 0x67EDA87A, 0xFF24F98E, 0x684E6504,
+ 0xE4EB57B, 0xD2D3B758, 0x4474D10F, 0xA94594B7, 0x3E4BEB07,
+ 0x95C3F257, 0x478B6FA8, 0xBCC7EFD8, 0x1023D258, 0xB4ACD6C0,
+ 0x36129B10, 0x16D7D9A3, 0xEA63BE7E, 0x25EC12A1, 0x21B95589,
+ 0x3A673799, 0xB8E04594, 0xAE98693C, 0x9879B8F9, 0x601A3F62,
+ 0xCF9897C0, 0x87CD1798, 0x629788F1, 0xC1337B31, 0x59D84E67,
+ 0xF13FA484, 0x5E8C7B3F, 0x7DEDE9F6, 0x9779F496, 0x74C4EE89,
+ 0xB3D9AC8F, 0x44118EFC, 0xB4FE8E45, 0xC9934560, 0x93D739E8,
+ 0xCD013773, 0x102411F1, 0x9DB63EFB, 0x63165875, 0xB8B97E98,
+ 0x6B4223D0, 0x6F34352B, 0xDB038A46, 0xC187163E, 0x17FE20D8,
+ 0x82A1BC9F, 0xB6860AAF, 0x11D5F9E0, 0x5371E14E, 0x20BC8445,
+ 0x607589A0, 0x8DDCCF44, 0xCDCD53C2, 0xCBCB32D8, 0xC512E661,
+ 0x1EB4E6CE, 0x228E99A0, 0x28EE0177, 0x76ED3F3D, 0xA3DA3300,
+ 0x17C57F91, 0xA1855C6, 0x3531FA3, 0xA93A8241, 0xC45D540C,
+ 0x365D42EF, 0x2CA39696, 0xE460F7D1, 0xCA32CCB3, 0xA6D9D934,
+ 0xAD01079C, 0x9B07D89C, 0x226CE0A5, 0x60D67762, 0xD35A4B7B,
+ 0xFF0A698F, 0xDB73BF89, 0xF41FBA9A, 0xCACDF26D, 0xBF594213,
+ 0xCD4D3E90, 0xD12F3EB8, 0xE689D238, 0x8CD4C0CA, 0xEB3E841E,
+ 0xA513EF0F, 0x2DF4B65D, 0x90161625, 0x9C02AC36, 0x208F328D,
+ 0x12BF5D93, 0x7C8C355C, 0x3CDFCA22, 0x29381080, 0x3FF6CA14,
+ 0x9F269C74, 0x8A48070B, 0x3BDF51BD, 0x85932156, 0xA7B6F9FF,
+ 0x80554507, 0x43820D97, 0x59B7214A, 0xFC3ECC27, 0xED39DB19,
+ 0x2B9BDB43, 0xABD4E298, 0xC2C5953E, 0xD3DB0C09, 0x66EC81DA,
+ 0x7F41EDE1, 0x5146E8D7, 0x49171DF2, 0xB334BF9A, 0x3AADC9E6,
+ 0x56E12468, 0xA2D4B032, 0x662B1F49, 0x9C448B1F, 0xA219526C,
+ 0x56D66A27, 0x41609345, 0x8E685EFA, 0x392DA3A4, 0xDE58C26B,
+ 0x9C779FC9, 0xCA834F65, 0xA1E34DC4, 0xEC5BE6EA, 0x3737B7AB,
+ 0x2E9B7D0A, 0x929E96B9, 0xE38B0019, 0xC1E4115B, 0xD8141740,
+ 0x66977F67, 0x7D4CE4B3, 0x245AB554, 0x26F98B88, 0xEC78F24D,
+ 0xE1F34C1A, 0x5737AD34, 0xC1A19AC6, 0x3291E363, 0x4E824FF3,
+ 0xAC42BDF3, 0x7C2DACE8, 0x8D5C97F6, 0xD120875, 0xC4E5C39D,
+ 0xE22AE85D, 0x290FF39D, 0xD495E52A, 0x95414374, 0xD65757A6,
+ 0x1E7657F9, 0xF5073D56, 0xC2AA7589, 0xC166A0B3, 0xA0DF8CDE,
+ 0x4057EAE5, 0xBAC4DD2F, 0xB51F621F, 0xA96F90E3, 0x392B5D6F,
+ 0xC31E9CA1, 0xCCC02FD3, 0x5181074, 0x7BC15C18, 0xCA9232A4,
+ 0xD1D104E9, 0x5F0C5D3, 0x4947F6D2, 0x3C923E97, 0x6B486C35,
+ 0x9C8ADA96, 0x175C4D87, 0x39A1A0FE, 0x417F201B, 0xD080E114,
+ 0x4847B147, 0xFD634E49, 0xBC0BF4CA, 0xECABB1DF, 0x869B0263,
+ 0xCD797C28, 0xD2A4683, 0xD50F6A0B, 0x2CA40138, 0x8DA4EB55,
+ 0x5D198E5A, 0xA98DB40D, 0x96CA0E68, 0xA8D92294, 0xC4813E60,
+ 0x81CD6B09, 0xEBBEBF80, 0x6777688, 0xCDAF6EC5, 0xEB85653E,
+ 0x3BB780DD, 0x73718A21, 0x70E8A324, 0x654DE06A, 0x2CB2494A,
+ 0xFC1DA829, 0x64059A2F, 0x61CE9D0D, 0x5BC51CAB, 0xDF7DE6AE,
+ 0x1596B477, 0xB0F9EA86, 0x9D87D85B, 0x877620A7, 0x586F3AD6,
+ 0x96AE645E, 0x65E9D5D7, 0xDB69CEB, 0x2753EF35, 0xC226F633,
+ 0xBD373F9D, 0xF2A0E198, 0x4372EEC3, 0xA66F7010, 0xD30E1D18,
+ 0x152C0DFB, 0xEB86FC75, 0xC208FE7E, 0xB36625A4, 0xBBE2DE8,
+ 0xEC49F9C9, 0xCE724FFE, 0x2D509471, 0xCA6C24B6, 0x1BA93DDF,
+ 0xEABE9550, 0xB512D359, 0x83F76766, 0xC8267976, 0x7E50802B,
+ 0xE3EC2199, 0xD3269B8E, 0xC515B0CE, 0xB5752537, 0x70474BD,
+ 0x7F50EBE, 0xF9FC0B38, 0xD899D19C, 0x317AA41D, 0x6B706374,
+ 0x66479538, 0x560455A3, 0xD770DD85, 0x55BB61BD, 0x6DE6723A,
+ 0x3F89034B, 0x9C9650BC, 0xE569992C, 0x7B8F4D95, 0x3FB7C516,
+ 0x7C28C04B, 0xA12DE6B9, 0x8CFC5AFE, 0xA734A25A, 0xCF1483E8,
+ 0x1AB22339, 0xAA94F43F, 0x16319A1E, 0x2C9AA4D0, 0xE9D2618,
+ 0x790B699B, 0x3AD9C3A1, 0x55A778DA, 0x6517152F, 0x2139AB74,
+ 0x12F762CC, 0x4BE02E6F, 0xE69400F7, 0xDC48DCD0, 0x563DB028,
+ 0x32299125, 0x7C9145A9, 0xFB88067B, 0xF070F6FF, 0x3D9A42FF,
+ 0xC5D20DC, 0xF96F7EE1, 0xA9C209A3, 0x9A192F36, 0x3E158AD,
+ 0x1265DF79, 0x2E49E297, 0x99D3A002, 0xE6AFDDCB, 0x3B56751D,
+ 0xB248A31F, 0xE6BE0FFD, 0xBBAB635E, 0xB383C45C, 0xA9DC9F2D,
+ 0x735CE03F, 0x69992E32, 0xD1E6A77, 0xE38A7F46, 0xC1E59620,
+ 0xFAE7F99A, 0xBDFB440C, 0x9F53F99C, 0x224EA340, 0xAB5D1AF0,
+ 0x35F3126D, 0x99430549, 0x83E12C62, 0x6403957B, 0x7B119103,
+ 0xC8382BAB, 0x99A85991, 0x9BF370AF, 0xDFA83CAF, 0xDBEC2CC3,
+ 0x416D8EBA, 0x774E58FF, 0x29C222F, 0x3DE60561, 0xDF038931,
+ 0x8297C377, 0x9867C08, 0x58ADEAED, 0xD88F0856, 0x6E4C2A39,
+ 0x2599DF28, 0xD7A6D06A, 0x433B35BE, 0xDAD3175B, 0xC358D423,
+ 0x84BF4580, 0xE7D3BE65, 0x9EC8CDBA, 0xCE901946, 0xC4B4D088,
+ 0x98B1245D, 0xFBB0CC10, 0xE8CB9C76, 0xDE665AF2, 0x28E46D8B,
+ 0xF7012A56, 0xE29F8C07, 0x8BF87AFB, 0x2907C051, 0x820923CB,
+ 0xC3E95542, 0x6AB5559E, 0x314BD068, 0x1CEB5637, 0xD1D830D,
+ 0xC442D6C2, 0x5F6074F4, 0x37F08A2A, 0x21F782BE, 0xF378B1AE,
+ 0xB7FC74DA, 0x4ACB450F, 0x365F3092, 0xFB0C842C, 0x5DD80554,
+ 0x741C4F79, 0x290716E0, 0x76E56BA9, 0x10006310, 0x42A183C7,
+ 0x5F1FB962, 0x8DE2BA39, 0x6176B6D9, 0xFC059A44, 0x9907DE39,
+ 0x71A5EA7B, 0x42309616, 0x1DDE34DD, 0xF0DFA4BF, 0xF69B5E2F,
+ 0xD145268, 0x49A3E7B, 0x90508840, 0x861DE564, 0x904730CB,
+ 0xC844CD6F, 0xD5A2CEB6, 0xCE895F0D, 0x73EEE4D6, 0xEB4565CF,
+ 0x533ED4ED, 0xF4AAB655, 0x591BC278, 0xBD1D929D, 0x80AD7DA6,
+ 0x527B3C51, 0x40F627DD, 0xDA420FFD, 0xB9A6F685, 0x5F6D9BC2,
+ 0x4F67DE58, 0xFB5F87F0, 0x47540936, 0xB2083BC8, 0xAD48DD69,
+ 0x63F7CA5A, 0x28D5372D, 0x61DA54B0, 0x7DA88170, 0xA2DA7B83,
+ 0xE1D70E32, 0xA3ADEA46, 0x97026868, 0x60FA4303, 0xA4104416,
+ 0x3DB4A8CC, 0x72F0F53B, 0xFF270297, 0xD5600E97, 0xD7D25D62,
+ 0x46DBCAC5, 0xFD61775D, 0x93E100DB, 0xBFE0E0C0, 0x8CE51426,
+ 0x8216C272, 0xE7300A56, 0x5A61C30E, 0xA7667C78, 0xBD23D39B,
+ 0xDC425756, 0x7AE9A42B, 0x249E8C42, 0xABB91D5C, 0xBD1334D5,
+ 0x8BCE967D, 0x5CF89EEA, 0xDB125339, 0x225E3C4C, 0xC5DDA12,
+ 0xA92903F8, 0xF2F29634, 0xD2AB3419, 0x396DAE59, 0xA02C965E,
+ 0x450B8DEF, 0x1E4911B2, 0x4F94BA94, 0x6802E7C0, 0x779671B7,
+ 0xC0B06A93, 0x65BF0119, 0x3D672B7F, 0xE7E68CA, 0xF173FBF,
+ 0x503C50F4, 0x3D8CA779, 0xD9BC10B2, 0xE6B89F78, 0xFC04B6F2,
+ 0x74B0E1B4, 0x3BB8594A, 0x5866C0E6, 0x125FBE40, 0x21239465,
+ 0xC00E2791, 0xD7957B76, 0x331D18CA, 0x87D0C340, 0x8D7347DF,
+ 0x296D2AA1, 0x8EAA71DF, 0x1D477388, 0x4F666705, 0x211D2B0D,
+ 0xA41C0741, 0xD8F7CEEC, 0x4C6EDC5E, 0xFE5DC02A, 0xAA83AED3,
+ 0x9AE501A6, 0xFF82168C, 0xDC638114, 0x4C345BA0, 0xDD7E0F1D,
+ 0x4C072ABD, 0xFF606768, 0x3CE74279, 0x93DED13D, 0xAB7A9752,
+ 0xAF27666, 0x784EDE4F, 0x7F4BE8A7, 0x9A45141D, 0x69E507FF,
+ 0x78BAC3AC, 0xDB2A62AC, 0x52561515, 0xA9DFA9A8, 0xCC51778C,
+ 0x886CC6A, 0x5246AD23, 0x68A7480, 0xBC267A85, 0x1FF771F4,
+ 0x5199BC1E, 0xF8CCD05A, 0x7BD65764, 0xC61A33FA, 0xC9F24B8E,
+ 0xBC0B1D9F, 0xE43E103, 0xBE3D7AAF, 0x39154AD2, 0x941C2098,
+ 0x1C26174D, 0xC63D21F1, 0xFBC6D732, 0x8C43AE71, 0x1495C044,
+ 0x9483EE96, 0x909A94F0, 0xC1B02D9E, 0xDF9A2114, 0x2F4883E9,
+ 0x4806958A, 0x209A2722, 0xFE514205, 0xEB85D85F, 0xC25BED82,
+ 0xEB2CEABE, 0x8B2A2EDA, 0x68641725, 0x10570304, 0xE53EE68B,
+ 0xC43FB1C1, 0x8F763232, 0x41ECC1D0, 0xE3E44CBD, 0xA1A68EC0,
+ 0xDAFA770A, 0x6996A5A8, 0x38407C06, 0x4FAD77B4, 0xE30E2912,
+ 0x47EE2FD, 0x2CDA167F, 0x88F915F1, 0xF3DF6195, 0x530FBEDE,
+ 0x2CFC1C0C, 0x47B21171, 0xDEC1A586, 0x2031A43A, 0xDAAD77AD,
+ 0x8BE637E6, 0xA6AC1EBB, 0x6AB9F2A3, 0xBFB5ED6C, 0x15792C44,
+ 0xFD3AB89D, 0x27A7E24E, 0x3E76999F, 0x77EE2E6A, 0xE505F3B7,
+ 0x429839A6, 0x6BEE7B15, 0xF61F0084, 0xFC20752C, 0x4BF79989,
+ 0xC8B4F8E8, 0x46B33427, 0x9F4BA3E8, 0x41B9354D, 0xEED27E23,
+ 0xA7FC575F, 0x279180C5, 0x141C3A06, 0x2C2FCEF9, 0x4403AA1F,
+ 0xD4496B6C, 0x25C33091, 0x452C754, 0x80534A0, 0x80842F72,
+ 0x3DB756B1, 0xEFD010BD, 0x1DE7F9EA, 0x5F9B1769, 0x55D9839F,
+ 0xD5B11F46, 0x941D69AE, 0x8C4F3D35, 0xE710E268, 0x2DFBC983,
+ 0x5D417C19, 0x7C2561F9, 0x25415FCF, 0xF331B119, 0x235B632F,
+ 0x9B1463A9, 0x8249E513, 0xB6F14826, 0x1005E62C, 0x2B1B4F3E,
+ 0xEF793550, 0xA90F6AA2, 0x77BFECE6, 0xA6E1C13E, 0xBCB6E143,
+ 0x2496D0ED, 0xF4A8D5F0, 0x29C27A0C, 0x7D231D55, 0xB8526623,
+ 0xDDDCB82C, 0x2A18B465, 0xB5FD564D, 0xA9647CB5, 0x4300919B,
+ 0x9FB2B27A, 0xDB25B0D9, 0xBB5D5711, 0xAA747FC4, 0xAA831194,
+ 0x9603ED14, 0xAF921A0E, 0xFA1447D7, 0x8B766768, 0xE8F1C89E,
+ 0xB7985D4, 0x6C5C1AEE, 0x2EA66EF3, 0xD176E7D9, 0x228CD940,
+ 0xD90C84B4, 0x36253A66, 0xADD7AE4F, 0xF25D5CA5, 0xD34F702F,
+ 0xA535AA29, 0xFCF10FB, 0x3D075696, 0x63EF7EF3, 0x81554091,
+ 0xC7EEFC78, 0xE0DCDB21, 0x62EFF001, 0x9ACFD7CD, 0xAEBA43ED,
+ 0x371BA99B, 0x508B7A31, 0xFF447B05, 0xA239F5D2, 0xA5620A57,
+ 0xA16B995A, 0xC334401E, 0x535F51AB, 0xAEA26D82, 0x81D72269,
+ 0x3C0BA1D2, 0x80590850, 0x818A26AA, 0xC43E6B02, 0xF72DFB63,
+ 0xE7AE3F6A, 0xD31AB683, 0xB99D787A, 0x691FFB53, 0x37EA1E35,
+ 0xC2C9FFF8, 0x2A13F6D4, 0x4CC79564, 0x6DD5F2DE, 0xC53560B,
+ 0x5A562B6F, 0x3F2C49F1, 0x6953F4CC, 0x8BA12AF2, 0x98A08428,
+ 0xA1EF80B3, 0xA977E388, 0x1A3DD9D1, 0x687A3424, 0x2759B568,
+ 0xC626A765, 0x7887651E, 0xFC9005E1, 0xE84376A4, 0x387BCF66,
+ 0xF7AA4980, 0xBAEE372C, 0xE89CF460, 0xA275FC1A, 0xA5EF8668,
+ 0x899F85CE, 0x9CB086A3, 0xF16158AC, 0x4C49EBC0, 0xDCE10FAA,
+ 0x4B46ABDA, 0x56947FA1, 0xAD4E7245, 0x54C23373, 0x8B0B6C4D,
+ 0x82590F05, 0x5E292D4C, 0x277B63C5, 0x9D51D8CF, 0x86D379EF,
+ 0x52CBEF63, 0x7A62AF4C, 0xAC1FA33E, 0x25D454AE, 0x1CDA792D,
+ 0x17434813, 0x759F50A7, 0xEEB0D38A, 0xB30964A6, 0x941230A0,
+ 0xA464FA3C, 0x9F8685AF, 0xB9A018F4, 0x8080362, 0x2D565F63,
+ 0xAB60790A, 0x67252A3C, 0x1715B01D, 0x5384E7F3, 0x79299519,
+ 0xA9786ABE, 0x1107A1FC, 0xE0D9B037, 0x4DD34883, 0xA7D476E3,
+ 0x5B194AE9, 0x89E50FB1, 0xA9676565, 0xC77CF621, 0x93612BF2,
+ 0xE027B80, 0x359C7FBF, 0x39B166FB, 0x1F3B28DF, 0x2848DE70,
+ 0xFFE261DD, 0xB78D413C, 0xE011DD7B, 0x286F752B, 0x74A8D775,
+ 0x5E540B67, 0xFAF973F, 0xC0035501, 0xB0F16059, 0x1C981017,
+ 0xD4871112, 0x9745C0BC, 0x6D85B805, 0xA40253E8, 0x2B0D55CD,
+ 0x8FF7EDC4, 0x47EB4ECB, 0xC41A2F17, 0x41C9702F, 0x8549DEE0,
+ 0x865FD46C, 0x64A1F181, 0x24E64D11, 0x13337A33, 0xE8CB0924,
+ 0x8A2DC003, 0x113C04C7, 0x1CA62E13, 0xC360E708, 0x57DE03AB,
+ 0x4D8F2BB5, 0x2CE2E2A1, 0x2580C90D, 0xBF162A7C, 0xEB1490A8,
+ 0xBCABC2A7, 0xFBC4C25C, 0xBC83AB6A, 0x25C47DCB, 0x8FE447A9,
+ 0x2C0F77CF, 0x6D896845, 0x63CEF5AE, 0xB2FF0326, 0x14D71520,
+ 0xA1C15C8E, 0xE53550FB, 0x676B299D, 0xC20A5C14, 0xDB3EC54,
+ 0x359733CE, 0x8A619B1E, 0xCDB53E, 0xD285EED5, 0xA6E0181E,
+ 0xB81AA3EF, 0x41F8E1A2, 0xE3DEDC6D, 0x4F7CBE5B, 0x24006857,
+ 0xACB9B719, 0x4E725B2D, 0x8536AF54, 0x329509E7, 0x72E7C0A7,
+ 0xBA97CC78, 0xD822798F, 0x9DFC6780, 0x63E263CA, 0x7B2397A5,
+ 0xA42C0C0B, 0x1D5EC588, 0x292F1E7C, 0x2BF5A75, 0xFCD8786B,
+ 0x14EB1952, 0x84031982, 0xA0800A40, 0x629C9211, 0x3B17F481,
+ 0x50861D9D, 0x8371A304, 0xB3D21511, 0x720E2C6C, 0x5A07F87E,
+ 0x868F95BD, 0x8617E7B, 0xD7762105, 0x90707C5A, 0x777473F4,
+ 0x67737DC4, 0xC4154562, 0x1840CEB3, 0x373635EE, 0x4E6D4EBA,
+ 0x1736A5EC, 0x4D3E335B, 0x59FDB9A1, 0x9162B39A, 0x3F9E1502,
+ 0xF661B3DA, 0x77BE0255, 0x65EC8603, 0x21FCA0B, 0x55291C5C,
+ 0x69F57B1, 0x5DE1E0D6, 0xA6296E1D, 0x595A45F8, 0x90B166DF,
+ 0x61ABB34E, 0xC6D48B5B, 0xB05EF88F, 0x368B0C6E, 0x94C36250,
+ 0xB435D440, 0xEFB62847, 0x1473E647, 0x9A101218, 0xC7AA11BF,
+ 0x80C241E3, 0xAF648F26, 0xDF48753D, 0x7073509A, 0xAB52665F,
+ 0xD1ECCFC0, 0x7BE293F1, 0x396CA014, 0x84336AB9, 0xF9B7E448,
+ 0x9566C90E, 0x239F7C25, 0x91A452B3, 0x1E9A4F1C, 0xCCE286F6,
+ 0xF46520D6, 0x2943A671, 0xAAA30DCF, 0x28D190CE, 0x88E3D0C9,
+ 0x423944F0, 0x81E6712, 0x2714B6B2, 0xF927748, 0x59A5430F,
+ 0xCBA530A9, 0x91E12A0E, 0x92598CBE, 0xE61058F5, 0x2604B4B,
+ 0x4CB7C3A7, 0x43B5812F, 0xFD90660, 0xD73DF50D, 0xAD3AE409,
+ 0xF74D721B, 0xCC2A88D1, 0xCED79510, 0xE64714DD, 0x3BDF0A8A,
+ 0xC2C7B689, 0x25B387D8, 0x968DA1A2, 0x8EA5D185, 0xF05F03E1,
+ 0xFDDC5B50, 0x78AECEF, 0xE32FBBA2, 0xD512F0AD, 0x5410D1B5,
+ 0xDBFD9FFF, 0xC0F2DD4E, 0xF66F8DBA, 0xF5EBA3C8, 0x65F96FE3,
+ 0xF7C8962D, 0x8E48A78, 0x255BEDC7, 0xE8FD3698, 0xFD1C4903,
+ 0xFDE9830, 0xCDBCF434, 0x16540D39, 0x418EF731, 0xB2F80637,
+ 0xDFCC0C9D, 0xB53DC5BC, 0x5A68B10C, 0xC4DCB3DD, 0x8B3778F4,
+ 0x7788B194, 0xECBD4903, 0xFD390223, 0x79598BFB, 0xBDECB9D9,
+ 0x29576BE3, 0x220F82A5, 0xDBB262F6, 0x1876EF0, 0xE2D9C444,
+ 0x32D5ADEF, 0x5F8739ED, 0xAF427122, 0x171E7D7D, 0xA5468BB4,
+ 0x94451936, 0x51565032, 0x3CE3CD5, 0xF231F54, 0x98614C6E,
+ 0xCE18455D, 0x958D2BD2, 0xA5934FE0, 0x3543931E, 0x77D9C2FB,
+ 0x3D3ED736, 0x6762E077, 0xF1B052A, 0x88AF353B, 0xB2A38925,
+ 0x8C919686, 0x715EEAAC, 0x34BA46DD, 0xEB486F1C, 0xDF58D7CA,
+ 0x90B97BE6, 0x37335293, 0x499414CC, 0x7F725BAF, 0x5ABEBF8,
+ 0xE9344F69, 0x1C110FD, 0xA937AD4C, 0xA7CDD9C0, 0x750FD5FE,
+ 0x7A7B6D40, 0x41EA948A, 0xA10EE17C, 0x7689C967, 0x9F411C02,
+ 0x6C40C3FD, 0xA6FFC648, 0xC6D6F914, 0xA100AF92, 0x4CD97ED5,
+ 0x17D9CCBF, 0x915833F, 0x788D78C0, 0xC81903A3, 0x6DE5BAF0,
+ 0x3E4D6DCC, 0x98415810, 0xEC23B7AD, 0x822471B0, 0xD2CF5D5A,
+ 0xA1BACAD5, 0x40843135, 0x430135A, 0xA7655BAD, 0x7A2472BE,
+ 0xCC3D44CC, 0xD1BC9E10, 0x7C215C92, 0x717FA7DD, 0x7EF7D128,
+ 0x1BC85798, 0x7C6E19CA, 0xE3FAB7E4, 0xBC884D38, 0x3E220CA,
+ 0xE7AE4D8, 0xC8EDD021, 0xF3F05D3E, 0xDE302EB8, 0x40CEFF27,
+ 0x56C0550A, 0x96162C92, 0xC004EA48, 0xE0C29A65, 0x496AE22B,
+ 0xC7468E6F, 0x8E31BD1F, 0xA53763CF, 0x166CC258, 0x1A2B9CC4,
+ 0xDBBADE7B, 0xF8D21AC9, 0xB21CA593, 0xB92F0DEE, 0x9A4391F,
+ 0xCDB4D373, 0xB687B3F5, 0x877BF0A0, 0xFD7395DD, 0x1C56AA87,
+ 0xCA146BB9, 0x21A2314B, 0x8207A2AC, 0xAA874DC0, 0x4F404E64,
+ 0xB69FDE48, 0x324FD456, 0x45F19CF, 0xFC7E6D0E, 0xC8A01C04,
+ 0x76C63378, 0xC526F7B3, 0xFDCD2EEF, 0xFFB2F9B9, 0x2DDE75AF,
+ 0x5ADF2F86, 0xC9AC84D3, 0x70FF53A0, 0x3FB077C, 0xC2795B30,
+ 0xF5438170, 0x557D7080, 0xB784684E, 0xCD089E1D, 0x332B71B0,
+ 0x493C3C2A, 0x1D1DED89, 0x8240E170, 0xA7D17522, 0x48C542AD,
+ 0xCB357D8F, 0x21E37C1, 0x3B000B34, 0xAAAE4818, 0xCD1EB4B3,
+ 0x1736CA0E, 0xDDF8EA2B, 0x76E21C4C, 0x6EE99A3C, 0x27F71B20,
+ 0xF6AE929C, 0x3C9CAF6C, 0x5CA7DA97, 0x8EF033C5, 0x8C7EC36B,
+ 0x3CB1CFAD, 0x1C5ABBB7, 0xDEF7A78C, 0x9CBC4A73, 0xB3871393,
+ 0x8C61DF59, 0x54DF941C, 0xCDD23FE8, 0x758EAD7E, 0x49BE795B,
+ 0xC960C6B, 0xE9B76479, 0xC88843F7, 0x82DC3137, 0xEDEE1A1E,
+ 0xC6568A7D, 0x42F7F484, 0xA6115655, 0x494779B5, 0xD95FE16A,
+ 0xB2AB15F4, 0x64C185B3, 0x9A46066E, 0x8BAE077E, 0xBAAE323F,
+ 0x79A965C6, 0x764B71F0, 0x3654F6D3, 0x96B4B2AB, 0x15C2B523,
+ 0x720AF416, 0xE6D0F423, 0xFAE44868, 0x6E776BC2, 0x264D41A8,
+ 0x3FE4BEE, 0x1598B97B, 0x15A70419, 0xA13CD124, 0x751A09E2,
+ 0xF7F7C12B, 0x718AC211, 0x11D03CD1, 0x2F9247BE, 0x77C210E1,
+ 0xA2268AAB, 0x2E99F0DD, 0x949D5CC5, 0xA8A309F2, 0x749EC6BE,
+ 0x5BD5124A, 0x8BF599E9, 0x3919AD4F, 0xA40901C2, 0xA1D4CC03,
+ 0x6ADCA36F, 0x9D5CCB0F, 0x870E2A58, 0xCEBC6333, 0xB2FA28A4,
+ 0x579C76A, 0x444849D0, 0x33887308, 0xB3BE3C75, 0x93745501,
+ 0xC289F137, 0x89739C7, 0x97C73423, 0xD627FB64, 0x6EE36F05,
+ 0x1F4B4B98, 0xFBB7A8AC, 0x60941E62, 0xC3A8ABDC, 0x4AC5E7C9,
+ 0x88ACE940, 0x5AA2AE59, 0x9F10C0B7, 0x8F45920B, 0x5FDE21BE,
+ 0x1D47779A, 0x3ED27D8B, 0x69FF2BB1, 0xCB1409FB, 0xF27F4FFF,
+ 0xA19E3DDC, 0x206050FD, 0xAD98C2D5, 0x4DA4BC0C, 0x95D9B019,
+ 0x556ABBFA, 0xBC78B5A, 0xF0F224F8, 0xA9785F8F, 0xED1CE98C,
+ 0xD368072E, 0xE212ACE5, 0xBB7F76E0, 0xB02F237F, 0x6D85C5AF,
+ 0x31539988, 0x4312BA19, 0x1D5023A7, 0x7320504B, 0x70563ABD,
+ 0x2553791A, 0xE9768150, 0xC1B2AF4B, 0x3AF0FD24, 0x3818D0E8,
+ 0x7F356F58, 0x98A15B0D, 0xAFA943C4, 0xB2B38831, 0x2E411F37,
+ 0xE3D5AF87, 0x67BEEC5A, 0x825E60CC, 0x1C44D856, 0x1A59493A,
+ 0x13BAABCF, 0xAEAA4D44, 0x5CFF2A6E, 0xFB47865B, 0xE778E607,
+ 0x101500E8, 0x2C17E66A, 0xA0B30350, 0xFC649CDF, 0x8B9802D9,
+ 0xAB87D61A, 0x21F38439, 0xD3D11051, 0x1FDA9955, 0xCB9313B8,
+ 0x327D1A94, 0x35293099, 0xB803B298, 0x5B8E6883, 0xFA309C3,
+ 0xDFDA8B2, 0xDF89211F, 0x9918F18E, 0xF0C05CB1, 0x71D8A4B7,
+ 0xE681031D, 0x537012F6, 0x4DF822F2, 0x34B75C8C, 0x4429F85E,
+ 0x5D3C4C4D, 0xFB0FC6C7, 0x25F4ECDD, 0xB19D5EFD, 0xD70FD7CF,
+ 0xD95C45D5, 0xCDAC06B8, 0x9C3B963B, 0xAB2F2A9C, 0x4D3D4F7D,
+ 0x12692C03, 0xB1AEF97E, 0xF243EFA7, 0x78C4C8DF, 0x182D9C17,
+ 0x8D2AF450, 0x7596BD9B, 0xE8E7C9C2, 0x86F617F8, 0x1F37A708,
+ 0x3F648305, 0x27FF6DF6, 0x4D5FF17D, 0xA9541C2D, 0x9773013,
+ 0x78B2313C, 0x82C0B20F, 0xD36A4F02, 0x8DB2BC4F, 0x9296D8BF,
+ 0xA983CC7, 0x31AEE908, 0x48CD7E6F, 0x9CB1DD7F, 0xAB89D57,
+ 0x5156132E, 0x6345AA59, 0x8D2CB12D, 0x94D3AE56, 0xA4E91B27,
+ 0xEE58338, 0x8620EA15, 0x5454D04E, 0x1142ACF0, 0xCA059044,
+ 0x31811D8A, 0xD498290, 0xB65F1B67, 0x462745F3, 0xA899191C,
+ 0xB9C19F48, 0x824659FE, 0x9A257101, 0xC330F34B, 0x42109127,
+ 0x9DA8504B, 0x6C3A989F, 0x5F426E6C, 0x2B922D32, 0x373C66FD,
+ 0xAFE3418B, 0xE3788682, 0x83B46626, 0xD0106A4E, 0xFD10B903,
+ 0xB0F6531C, 0xC65419E0, 0x3963952B, 0xB8799DF9, 0x3EEB8C1D,
+ 0x5C4D3C08, 0x6DD028A6, 0xA55678A0, 0xB8247141, 0xC1267586,
+ 0xF6746B19, 0x46C38465, 0x483D24B, 0x99BF79DC, 0x78F778C3,
+ 0xAFF40193, 0x58872B07, 0x6DA7F4FA, 0x66B5CEA3, 0xDD2D8C79,
+ 0x2A8D289B, 0xB5789670, 0x66AEFCE3, 0x56FB52B3, 0x20FE3BE1,
+ 0xCCDFB492, 0xB0F263E8, 0xD0707433, 0x5E58F5DC, 0x4ABEBE63,
+ 0x8A45CD95, 0x97037830, 0xBDB1F1B5, 0xA1BE2990, 0x57B718FA,
+ 0xD50EC023, 0x810DD849, 0xE650D43F, 0x3895C77D, 0xE142C382,
+ 0x35551E5B, 0x3B94330, 0xE92D8A91, 0x50BC837D, 0x61499A8F,
+ 0x2639B468, 0xF8FF36E1, 0x74956FC6, 0xFF0F4192, 0x6BBA0C53,
+ 0x5B44FF85, 0xBBE4A1DF, 0x12D6CB14, 0x6C679A10, 0x3C0F554D,
+ 0xECBADA32, 0x8A99BA10, 0x738C03C4, 0xB8902AC3, 0x7008D470,
+ 0x49BC2ED9, 0xFBE19B5A, 0xA1E4879A, 0x36129694, 0x94987C3C,
+ 0xE54B84D8, 0x9CFAEF1E, 0x527127DC, 0xA8FCAE0, 0x8699252C,
+ 0xDAAD4629, 0xC41F3866, 0x2559C272, 0xB1C25848, 0x3F9B1702,
+ 0x7C448BF3, 0x8CCEDF5C, 0x3A37F712, 0xFB9E4F83, 0x5754E801,
+ 0xB38FD367, 0x780F4825, 0x959330C4, 0xF6276BE5, 0xAE3E2018,
+ 0x182DC907, 0x88E733F9, 0x6FF870A, 0x79EF2D01, 0x3EAC0D6D,
+ 0x20D4FF88, 0xAE6EB8C1, 0x80810451, 0xC228E035, 0xBD942803,
+ 0x3F3733F2, 0x9F8F16F6, 0xAAA65031, 0x55E839BC, 0x7EAD3461,
+ 0x5F5BEE8A, 0x8668BDBA, 0x399366DB, 0x2A54237E, 0x776789E,
+ 0x7B171AF5, 0x8C9FCB92, 0xD87465F2, 0xFA3CAAB5, 0xBA5B131E,
+ 0x1FD2D438, 0xDCAA9DA, 0xE1BF0AAA, 0x1EAEA8AE, 0xEB46A646,
+ 0x989D1EA2, 0x98E8B45F, 0x12A2415B, 0xD107D293, 0x5F54D087,
+ 0x95AF5C33, 0x2A12BA88, 0x6381D0FF, 0x688EA1E0, 0xACC60CA2,
+ 0xF19636C6, 0xD4D465E2, 0x2A50DC57, 0xFB595CCF, 0xF5C63674,
+ 0xB4965626, 0xB903D3D0, 0xD9581548, 0xBBD9E82E, 0xE22BCEF3,
+ 0x9FE759D, 0x6E8D8F4E, 0x655325D2, 0xE1986814, 0xEA2B93BF,
+ 0x88085C18, 0xF82BFCB0, 0x3FCF713F, 0xADE03EDC, 0x2D2DDCBC,
+ 0xEDE2694E, 0xF6DFB11D, 0x5CF35A5A, 0xD38C82D3, 0x52DE32CF,
+ 0xB88EA70E, 0xF7FB134F, 0xAEC78D1E, 0x58402C66, 0x54CD1763,
+ 0x78A7EB4, 0x88F49C30, 0xDC17F8C0, 0x9C49A368, 0x926E18EB,
+ 0x4DD461E1, 0xA6BD8F3C, 0x6D2E4C31, 0x657506D9, 0x445EF83F,
+ 0x77E28461, 0xF715400F, 0xBB76D1D, 0x9B670CD2, 0xCEB9EB90,
+ 0x7F297088, 0xD3929A52, 0x9B62909, 0x46474012, 0x3D74DFDF,
+ 0x46288EF0, 0xF0C51C07, 0xEC642B66, 0x3C76B83C, 0x1E72D08F,
+ 0x9F95DC1E, 0x106883C5, 0xB6A867BD, 0xA532C423, 0x95076036,
+ 0xA9DBEA73, 0xA3F8C65D, 0x799CF6BF, 0xA4508346, 0xB37CACB2,
+ 0xF6A07B5A, 0xA2C24137, 0x2E1D8DEF, 0xD28C26AD, 0xCE745089,
+ 0x3B7D9638, 0x7189CE82, 0xBC3F7850, 0x5660A9B8, 0x13895B5C,
+ 0xFA59A643, 0x9B0FF4AF, 0xFD2B4FD3, 0x4C0C4E52, 0x272631DE,
+ 0xA52FAE47, 0x65850A25, 0xD51ACF2B, 0xD206E6EB, 0x3CDC96EB,
+ 0xA6FF9E3A, 0xFC601E27, 0x658EF7F0, 0xB45FF508, 0x36A9A571,
+ 0xCE75E7E9, 0xC4BF9261, 0x3A261099, 0xF1B1CE3E, 0x3D28A165,
+ 0x3435D2FF, 0x70830AAE, 0x8DFE14F7, 0x3E27CDC1, 0x97BE4BA1,
+ 0x33F8D0E2, 0x9B2E7BCD, 0x1923B1C, 0xAA248E78, 0xFDA8AEB9,
+ 0x7825E511, 0xBF20B777, 0x218E4234, 0x7B5D1181, 0xA08988A0,
+ 0xD9009231, 0xEB15A567, 0x47E045A0, 0x3C515808, 0x35194ACB,
+ 0xA476304A, 0xEF738BD6, 0xD035FB8C, 0x3B2013F4, 0x4DE60F26,
+ 0x361431DC, 0x82ECB228, 0xAB22266, 0x4E056EEE, 0x6642D288,
+ 0x48D851E3, 0xE05D55D9, 0xDC2D6D4F, 0x158F7F48, 0x5D7F7D5A,
+ 0xC2835158, 0x793509C5, 0x479DF33C, 0xDEF0696A, 0x9FC2BECD,
+ 0xF4EFC675, 0xF8D1FF02, 0x493D3BD6, 0x7FA1C10F, 0x641B324D,
+ 0x996DBDDD, 0x24098529, 0x81CCFC35, 0x47F0BE17, 0x5E241815,
+ 0xF7F62788, 0x261CDAF5, 0x10CBC4B8, 0x5D6C6A7B, 0xD671AE81,
+ 0xB2C8DCD9, 0xD215CB7E, 0x3403AB1B, 0xA7C5999, 0x4675A50,
+ 0x369C560C, 0x32C619D9, 0x4FD2E12E, 0xB4A20359, 0x37E93502,
+ 0x5EC0CE10, 0xB374340, 0xB0DF0419, 0x5960ED4F, 0xF0A7770E,
+ 0x7F504F30, 0x54A92972, 0x3E9848B8, 0xCD980ABE, 0xDE69D570,
+ 0xA9FDFFBD, 0x9812C681, 0xDAFCCF4E, 0x2B636CB5, 0xB2B9FF2D,
+ 0xB9972800, 0x701231C6, 0x2E1108F8, 0x8C323A3E, 0x20A17A77,
+ 0xF2C6CC7, 0x44C5FD1C, 0x731622D4, 0x9BF0C91E, 0xB61CD1B1,
+ 0x61FA9CF2, 0x5E460518, 0xF75A1C06, 0x417CCEE2, 0xB45E0FB5,
+ 0x53DC30E8, 0x500CBD7F, 0xED61DAE3, 0xEFE91818, 0xB56814BA,
+ 0xD37D84C8, 0xD5DA9ED7, 0x5F40F92, 0xF1507FAD, 0x2CC74A65,
+ 0x32AA6279, 0x33731317, 0x30E09F03, 0xE1D9C403, 0xC21E638A,
+ 0xA7394D05, 0x3879F710, 0xDBB52C37, 0xB7780268, 0xE268E178,
+ 0x9F8072D3, 0x97CC035A, 0xEE65287D, 0xA197441A, 0x21C8AFA4,
+ 0xB81B50A9, 0xAF6ACC93, 0x7BB55B77, 0x564A0BD4, 0x17F7A6A9,
+ 0x36627846, 0xDCE746EA, 0xBB9762DE, 0x47B5B8F0, 0xEF5DA4AD,
+ 0x1922E420, 0x15F9299D, 0x243DAB0D, 0x953C67A3, 0xF3DA71D8,
+ 0x57122A3E, 0x423A78B, 0xC4A53000, 0xFBE92583, 0x968F3AE,
+ 0x61629123, 0x792FA07B, 0xBF45729D, 0x99DDD38E, 0xA14565FC,
+ 0x268E9E3F, 0x7EC9286, 0xCCA1D92A, 0xF06519DA, 0x22396664,
+ 0xD5DAC24D, 0x71BB4DD5, 0x7D329BB3, 0x401DAB69, 0x19D3E40A,
+ 0xB6F40F32, 0xE8D1CAF8, 0x5CD5F35D, 0x6F662316, 0xD38D1A6C,
+ 0xF86E720F, 0xE165D1B9, 0x1BC14E79, 0xC19FB43D, 0x891C013B,
+ 0x44AED4DC, 0xA7351AAC, 0x5F707A18, 0x3850148, 0x4A425E1,
+ 0xF7DD6EBD, 0xE0C3FD0E, 0x8266A425, 0x3BA17650, 0x48753ADB,
+ 0x679FA015, 0x88771712, 0x2174B185, 0x29F9A85A, 0x1560964A,
+ 0x198E4FCD, 0xD3410A86, 0x9186793D, 0xDAFC5C35, 0x971F4CC8,
+ 0x1F8F0E8B, 0x11A884F2, 0x66E6D2AC, 0xE85ECDB0, 0x86C76472,
+ 0xDF3B3320, 0xEEF446A6, 0x834CF19B, 0xECEA602A, 0x46C680AD,
+ 0x807BA92F, 0x4B3FC42B, 0xEC229845, 0x3FE389C1, 0x63E042D7,
+ 0x6C855119, 0x7B1ADF33, 0xE1B9CAE0, 0x62C20BAE, 0xEDF0E919,
+ 0xA50FC7EB, 0x2399262F, 0xD6F88130, 0xE2ADA5DB, 0x7D07BC3C,
+ 0x36A922F3, 0x7693B84E, 0x3015CD0C, 0x1D1047A7, 0x5D3A75A5,
+ 0xEE6F1CA9, 0x734BD19F, 0x3308DD73, 0xCEBBC9FA, 0xF79DD5A6,
+ 0xA41CF168, 0xED762FD8, 0x6642159, 0xA63C5CD6, 0xCB96A282,
+ 0xA29D9F5C, 0x45CC6CD4, 0x344611EF, 0xC345FE03, 0xC55ADDE0,
+ 0xB2B8374C, 0x14F730B1, 0x301D9266, 0xA2D98FD8, 0xBC107DF,
+ 0x59905EE3, 0xDB3560DF, 0x1D49F4F3, 0x785F8E0B, 0x8B116097,
+ 0x56154F60, 0xE312D829, 0xE0AFAE9B, 0xEAE3692E, 0x95915B8F,
+ 0x83BEEE75, 0x48C1C92, 0x8166D95E, 0x697FECA8, 0x135DEBF9,
+ 0xF83E6507, 0x11570809, 0x4862CBDE, 0x820E288D, 0x6CA59B2B,
+ 0x49DF6AD5, 0x86F41C43, 0xDD128A28, 0x601198A0, 0x3DDD49CB,
+ 0x95F3ACCE, 0x500CD9D6, 0xF54A50F2, 0x9936957B, 0x7C881875,
+ 0x743B055D, 0x44FD7934, 0xAF2253BB, 0xA2F4A27C, 0xBA8E1C2B,
+ 0xCCFA3259, 0x892FC73F, 0x283E74B4, 0x86119027, 0x87961F02,
+ 0x1D015187, 0xBA83B762, 0x61948B32, 0xAC741667, 0xFA9E0E39,
+ 0xD440D9CB, 0xED93F9F, 0x5FA97905, 0x2F5F82D8, 0x92EC7646,
+ 0xC60B3F9, 0xAA28822A, 0x7BA7CD3D, 0x3E41A20B, 0xDE4441A9,
+ 0xC75E539B, 0xD9D568C2, 0x2DCAE06, 0x7762550, 0x21C2D5EE,
+ 0x95CB6C94, 0xE31FC800, 0x3C03C172, 0xE166E564, 0x359C5102,
+ 0x7F717599, 0xBE301B47, 0xB207FA5C, 0x38B8B24B, 0xE6EFF05D,
+ 0x9F09D305, 0x31A27808, 0xC56D934F, 0xB440BD60, 0x52B1AAC4,
+ 0x78654045, 0x106A67B8, 0xF2A861E5, 0xC45D72B0, 0xA8FF8296,
+ 0x97F475A6, 0xDC222733, 0x7A835D7A, 0x45774E9A, 0x9E558C34,
+ 0x1124605D, 0x1689FED3, 0x70AB9928, 0xADBF8E55, 0x9C09EE27,
+ 0xF95A8C49, 0x75CD52D7, 0x4FC7275A, 0xA46C29F6, 0x747D788,
+ 0xA3347E5, 0x5B08AB02, 0x13CDC08C, 0xEDB65176, 0x6B36600A,
+ 0x26F5AD2A, 0x39949D1, 0xA1C8F6E5, 0xEBF0CEFF, 0xAB60A06B,
+ 0x10E522E8, 0x80E056D8, 0x1B301392, 0xDC3E0B07, 0xE10174EE,
+ 0x25DC4733, 0xB4E5A24A, 0x4B569CFE, 0xCCFE9F0D, 0x19BDC038,
+ 0xF8A0A718, 0x9944E8E0, 0x9591528, 0xBF27BDF1, 0x2C160255,
+ 0xF9E2F1B, 0xCE4FD96B, 0x703B2A77, 0xDB6EB2A7, 0xBFC2FA6A,
+ 0x11D00F81, 0x9540FD8D, 0x75849882, 0x183AC87C, 0x91DD1783,
+ 0xA3A0CC0D, 0x47F1CED1, 0x4DA4EE62, 0x819BA59E, 0xD5DA1DA5,
+ 0xDC218BF5, 0x899CC3A1, 0x1DECAD82, 0x77E193A5, 0x9F390C10,
+ 0xF5FCD674, 0x1E43657A, 0x6B61D25E, 0x99B9140E, 0xFEFB9CF9,
+ 0x6569445D, 0x14C9A2AF, 0x85A33FB1, 0xE4029ADE, 0x4FABD0FB,
+ 0xDE02379B, 0x65C8311F, 0x3CF60630, 0xC8B179FF, 0x9D83CE64,
+ 0xFF683C7E, 0x6D796948, 0x249B0AFA, 0xC5A65FDF, 0x252DA26D,
+ 0xFE92E52E, 0x90D081E5, 0xC5A8E180, 0xEBDB0943, 0xB0E7C78B,
+ 0xD5A89E4D, 0x684EE280, 0x8AAB613C, 0x6BD1547, 0xD12F7355,
+ 0x9C5D1363, 0x91E410A4, 0xDC841FBA, 0x703A9371, 0x79F8663,
+ 0x553650FC, 0x633CA726, 0x20107BD7, 0x2565F252, 0xCDD93830,
+ 0x3446CF7, 0x92B6B42A, 0xA070B2D1, 0x5E0384D1, 0x7CC5A19C,
+ 0x6890558F, 0x10D308AA, 0xDFF3016C, 0x1093AA3B, 0x8927683A,
+ 0x9259502B, 0x2B544B7C, 0x419B1B1A, 0x22D9E939, 0x568ECCEE,
+ 0x4F3CE09B, 0x8B990521, 0x8D6906A3, 0xC15DEDC4, 0x98384A4A,
+ 0x8F2F2652, 0xEDB9D614, 0x1D010AC3, 0xA2CDC134, 0xEEE9A9ED,
+ 0x241DB9A2, 0xE9DB9AE7, 0x7A788F9E, 0xBD0778B7, 0x27373539,
+ 0x7C6B4A4B, 0x3C7A6B37, 0xDE1C625, 0xC1256E67, 0xB8E69163,
+ 0xCC05D09B, 0x728A1427, 0xECAC2530, 0x1DD40BC8, 0xEFE42E56,
+ 0xB4266BE0, 0x9AD3F869, 0xDDFC2F60, 0xEF29B3F7, 0x7C15F90A,
+ 0x705C2992, 0x99AC7AEA, 0xCF1F09A0, 0xB41F14D9, 0xBF3C252C,
+ 0xF3483286, 0xD3AC398E, 0xB84BC93D, 0x6B780D11, 0xF682D379,
+ 0xB8A062C2, 0x9A003A9E, 0xF18F54FC, 0xDE81BB83, 0xE84C5234,
+ 0x37CB67FA, 0xDB685C6, 0xBF2BF28D, 0x8CDE583, 0x94CCD0BD,
+ 0x8BCAF516, 0x31BE93C2, 0x3ED4B623, 0xCD23346E, 0x8254E7A0,
+ 0x6091EF1F, 0x17A42562, 0xC9821677, 0x447B6623, 0x19D9356C,
+ 0x4A1C1953, 0xD1F3B7F9, 0x99F8388D, 0x62F22304, 0x5EDF1ECA,
+ 0xB6C9FC2F, 0x42968E22, 0x531BD76E, 0x25E6A95A, 0xA1669784,
+ 0x8B915BD2, 0xA5E21483, 0x5ABE3226, 0x605C0E15, 0xFDE713CC,
+ 0xFAC58D3B, 0x44FAF6E8, 0x41E2D699, 0x8EE11E34, 0xB03BE4F6,
+ 0x75054C0D, 0x1AF2D37, 0xF38E6829, 0xE7F2A519, 0xC9CF2CFF,
+ 0x996DDE8, 0x395AC493, 0x42AFF184, 0xB380B71C, 0x11AA0B90,
+ 0x66DC636, 0x56557CA8, 0xCB8CAA43, 0x9EBF806E, 0x63F66159,
+ 0xA011191D, 0x17B0AED3, 0xB9621251, 0x2B189E3, 0xD45A5D7,
+ 0x23009D12, 0x5DEB7918, 0xFDFB1FC8, 0x46808A73, 0x91D29330,
+ 0xF872C15D, 0x7BE90206, 0x257E9FCB, 0x2E52FF67, 0x1852DDF9,
+ 0x6A2C5C49, 0x6ACF891B, 0x29FFB0E2, 0x76E32CD2, 0x588799,
+ 0xD71D970E, 0x9B079EC8, 0xEBD25420, 0xDDB60276, 0x761B106F,
+ 0x871473C4, 0xBC697CE2, 0x5378E0E9, 0x8DAECE28, 0xE5B275FA,
+ 0x6E6E332, 0x853884E7, 0xD0FFF1A2, 0x722D372, 0xDD5A754D,
+ 0x87CDDA3C, 0xA9B629C0, 0xAB2E650D, 0x1709413D, 0xDAE63819,
+ 0xC60DE8CA, 0x9F344BD6, 0x8E651EF9, 0x3B6A8019, 0x95CC1296,
+ 0xB12DAEAB, 0x8D550156, 0xF14E85AA, 0xD2547469, 0x6336E320,
+ 0x223B05B9, 0xB88AD493, 0xEE14916F, 0xC78AF1FE, 0x65FC2787,
+ 0x778FA85F, 0xBA23A57E, 0x957EA954, 0xAE4F9577, 0x47C38D4F,
+ 0xDB7BCDC9, 0xBA13E42E, 0x46B01094, 0x1A15F5E4, 0x315AB789,
+ 0x9E44B54F, 0x8C690B2F, 0xDC4954CD, 0xF176F3FF, 0x9B154C06,
+ 0x112BD6D0, 0xCB120BBC, 0x11101771, 0x1F29A19D, 0xC3F8193A,
+ 0x805D6739, 0xE3B00ACB, 0x23DD9494, 0x4F88EBA5, 0xE6F32E0E,
+ 0x4B76F089, 0x43B66BEB, 0xF2420B12, 0x2CFC5E01, 0x1C68D3DC,
+ 0x30C1BD38, 0xF3A0FCCA, 0x2AF13CD5, 0x13E38185, 0x2DEE2A21,
+ 0xFC318E26, 0x1954D4B6, 0x3FB86424, 0x24D698F1, 0x4AB76D48,
+ 0xA9E87BD9, 0xCE1DD2F2, 0xF5904D9F, 0xF614DB18, 0xF83111D,
+ 0x1FB56EFD, 0x5CBD08D8, 0x2D8D4884, 0xE388C534, 0x413D5BB8,
+ 0xEB6D14D6, 0xAE54E361, 0xF73D926B, 0x43F27197, 0x7C50A2E5,
+ 0x10EDBD6C, 0xD151B569, 0x47C50C06, 0x8FD59E74, 0x551C6841,
+ 0x2EC2B6DC, 0x5CEAB3A9, 0x1E6A1609, 0x3FB07FED, 0xC0D5849A,
+ 0x6354A21B, 0xEBF18830, 0x2BB3EBBD, 0x9D4DF510, 0xBBBE1103,
+ 0x918D6DDF, 0x3FEE7A8B, 0x4FC47254, 0xE0E1EA65, 0xF3DDB31A,
+ 0xADF8DE67, 0xADA31FAF, 0x2BC0B8A2, 0x184B7432, 0xFDB2E733,
+ 0x236B014, 0x21062C, 0x8FAAD8D7, 0xA1DA7E44, 0x3EF7F42F,
+ 0xA67AAB82, 0x9238F0D8, 0x42F93C63, 0xEF0F4BA1, 0xE61DC644,
+ 0x994EF92C, 0x71A58613, 0x371665E5, 0x82E77BA1, 0x2FFA1DAE,
+ 0xFE19AAA0, 0x95C72A53, 0x6A21395F, 0xC03F853C, 0xBC7B73BC,
+ 0xED62A949, 0x4F7D3C52, 0xCACFB353, 0xA1629BE9, 0x16255784,
+ 0xAE465FC4, 0xE7FC2626, 0x5E9B0FC2, 0xD109084D, 0xE30E7B89,
+ 0x94CD7424, 0x6127AF6E, 0x7D08ED7, 0xFA0B9293, 0x450A112F,
+ 0xD0D79344, 0xA204F8B0, 0x5F825780, 0xD681148D, 0x71C6AE83,
+ 0x1DF62587, 0x99ABC8A6, 0xCFEE8131, 0xFCD11719, 0xD0D48B0E,
+ 0xCC4A710E, 0x7414791C, 0x22167734, 0xD17FE049, 0x5BF15C46,
+ 0x30B718E0, 0x6E85104E, 0x52F72575, 0xA17F09E1, 0xCDA7B24E,
+ 0xDAF7D03B, 0x3632D94B, 0xBAF4E9EE, 0x390CD998, 0x168C055E,
+ 0xBC2D8D0D, 0x35E9F642, 0x89757E1A, 0x2BB98011, 0xC19BCD15,
+ 0xEEB73587, 0x6A5194EB, 0xC2C1B4BA, 0x3C8F73FC, 0x8F075D29,
+ 0x42D39406, 0x6674167A, 0xC0904A73, 0x1158FE6B, 0x4CAD2FAD,
+ 0x9A7EC8A5, 0x651960A6, 0xD0329ECA, 0xF5130525, 0xCC7C40CD,
+ 0x259AA3D8, 0x9669412D, 0xB92D39A5, 0x29B217D2, 0x27A07E25,
+ 0x9AFFD359, 0x7E8F5AC9, 0xCF7C0F61, 0x5B4F8D7D, 0x31C4E97E,
+ 0xBDB9599C, 0xA85BD7E0, 0x87F0BAAB, 0x2852E628, 0x377BD41D,
+ 0x4B54844, 0xDABF47AE, 0xA1B7AF6B, 0xCCF57165, 0xA90C4348,
+ 0xDC1CE2FB, 0x42582D37, 0x2892F4E0, 0xB89AC8E9, 0xB2718E40,
+ 0x93BCCE08, 0x5606C693, 0x1952D10D, 0x96609D8F, 0xEE3BC3C7,
+ 0x2DFA50E8, 0x5582FD75, 0xBDC2618C, 0xA3D922EE, 0x8F766106,
+ 0x184ED901, 0xDAABDE09, 0x40CBD4E2, 0x4A9A2A70, 0x9814D393,
+ 0xE394A090, 0x9EA06A4F, 0x2EC8C8A2, 0xFD2EAFF0, 0x2F6C96B5,
+ 0xBB17EF37, 0xDA677FE2, 0x2357E330, 0xA8C9DDED, 0x735A7B2C,
+ 0x41C2B39C, 0x787E099A, 0xFBF8204F, 0xA56A4B69, 0x7DE2860,
+ 0x34299BB3, 0xD1CAE881, 0x5F452DDC, 0x700904E8, 0xC3B47017,
+ 0xF7040305, 0x5C42BE94, 0x88AAAE53, 0x9FCAAD72, 0x2774D420,
+ 0xDD685357, 0x80499592, 0xC5FB26E7, 0x90BA598F, 0x4A13D60A,
+ 0xC6D5F72, 0x97C35532, 0x6580493F, 0x9D31E266, 0xEF926A38,
+ 0xF68CF9C6, 0xF770C570, 0xCA18C06A, 0xFA2BB2, 0xFBA375DC,
+ 0xC2FE76ED, 0xB91611FA, 0x528A8EA5, 0x360A527, 0xF631D04B,
+ 0xF0C67ECF, 0x4E490A69, 0x19DB46F0, 0x497DFBF4, 0x58E490FC,
+ 0x24A51378, 0x186BDC14, 0x90E633A3, 0x6D6F8D95, 0x2FDE02DD,
+ 0x4B2714A6, 0x6FC87FE0, 0x21569667, 0xDCC31F06, 0xC9D9DFD0,
+ 0x830AA4A4, 0x78FBFE69, 0xDF17CD55, 0x3952AAA7, 0x9A4B5A7D,
+ 0xB1EBF3EF, 0x4F3BC1C9, 0xDFEEBF40, 0xAB130CC8, 0x1EB84425,
+ 0x4625E802, 0x20B990D6, 0x4E36869F, 0x5EEC0472, 0x29194460,
+ 0xCA425ECA, 0xEB0742C, 0x17D07C02, 0xF38BCA14, 0xBC9D555E,
+ 0xF15822E7, 0x89CF96E0, 0xAA848F9C, 0x90731AC9, 0x86EECBE3,
+ 0x308F3257, 0x5FF375DC, 0x1E62C041, 0xFDB6A3E7, 0xDFEBED8E,
+ 0x8FC77E76, 0x6973E542, 0x2AD1616C, 0x99B549C6, 0xD28CF364,
+ 0x88C87768, 0xECA2CFB, 0xA0D0B060, 0x42DFFD8, 0xAF80A6DE,
+ 0xFF323760, 0x1CB2DAAA, 0xD11DE4FC, 0xEEBF565A, 0x9C986CAC,
+ 0xC1C95B3F, 0x6868BF0, 0xF5604930, 0x316DD9EF, 0x1231D331,
+ 0x95E38E67, 0x7D30C191, 0x354804BA, 0x265EE5E, 0xC6728C70,
+ 0xD36F32D0, 0xBBEA0ECA, 0xD055ED76, 0x9135E317, 0x8A7B9770,
+ 0x4D1344B0, 0xE9F29AE3, 0x7BA303B9, 0x2C38AEC, 0x82ABCBA6,
+ 0x7729F177, 0x71793932, 0x6FE6E38D, 0x1F8416B, 0x147D8310,
+ 0x6A962FEC, 0xFE2F100E, 0x4FB1D511, 0x3D38AB33, 0x58ADC416,
+ 0x64B07504, 0x458CC4B4, 0x584BC93E, 0xDE49B6D1, 0x7347876,
+ 0x4A2C3EB6, 0xDF5DE09C, 0xBFD376DC, 0xC9F451C5, 0x5F793A0,
+ 0x892952A2, 0x15060767, 0xE1E3B589, 0x4D513C3F, 0xAF3D2CC7,
+ 0x289DAA2E, 0x8C711417, 0x62E5E006, 0x3BECED98, 0x99E73ACC,
+ 0xDE156054, 0x1283655B, 0x5123FC41, 0x3DE21841, 0xC032F050,
+ 0x94B5151F, 0xA5577757, 0xCC0C8DF, 0xBDB52821, 0xD530FAAD,
+ 0xD070D8FC, 0x46F5BB68, 0xB02DFF88, 0xD4923EA8, 0xC85A5622,
+ 0x93E834A3, 0x38E84468, 0x79408C75, 0xCCB635, 0xE76BADA2,
+ 0xC2296DA1, 0x711543BB, 0xF441F4A2, 0xBD18127C, 0x8385BFB9,
+ 0xD350D4D, 0x90FAF999, 0xABD1A695, 0xFCEE12C7, 0xF428912A,
+ 0xC9759F80, 0x6DB6491, 0xD1421D30, 0xBC398DC4, 0xB8E0A889,
+ 0xC854AA72, 0x82CAAF64, 0xBB6A65BC, 0x6DCB2D0B, 0xD215ADB,
+ 0xF45033DE, 0xC1300029, 0x665C61DF, 0x756D1875, 0xBD2CF722,
+ 0xC477E3C7, 0xDDD97C9B, 0x89AE48E4, 0x65000FDC, 0x1FD717CD,
+ 0xBEEA764A, 0x8FC2DCB7, 0xA162EFB3, 0xD4AC2490, 0xCDA9A72A,
+ 0xBFB4EE17, 0x66C73CBB, 0x6B7CB021, 0xCC5AF099, 0x5389E8B7,
+ 0x7668286B, 0x31A223BC, 0xA66475FF, 0x9C3DDA93, 0x2F3171FE,
+ 0xDB89A7DA, 0x1699616B, 0xA380F010, 0xB05D7388, 0xD774EA44,
+ 0x64D6091C, 0xF23298F8, 0x71C88081, 0xF90C4A04, 0x2FBEEA4F,
+ 0x2F9178BB, 0xF8723D8A, 0x1C07FCC8, 0x36D24E08, 0xE02A8B61,
+ 0xFD6312AE, 0xA7DDCE9B, 0xAE45AC52, 0xCA2EC55C, 0xEEC6BE42,
+ 0x244F3D79, 0x994FB339, 0x8316CC43, 0xE3CEC898, 0x8D37639,
+ 0x833D21BB, 0x4333A2F7, 0x95F3B0C0, 0x7258174C, 0xBFCF0EF7,
+ 0x9A7F4883, 0x71F2406B, 0x16B2BA04, 0xE1BCEA70, 0xE3C6798A,
+ 0x3FBF481C, 0xF5A8D117, 0xB37ED250, 0x49AB5E0D, 0x2793A7EB,
+ 0x45DF69A7, 0x4EE4B815, 0x98259530, 0xC223CA40, 0xDB7B208A,
+ 0x4AD3C0F7, 0xE7C33E50, 0x49FD7631, 0xA228021B, 0x2C27FCB2,
+ 0x5F77BCF4, 0x65D593D4, 0x7C700797, 0x6E67920A, 0xEABAF033,
+ 0xBFC8B68B, 0x8835B368, 0x90CACC99, 0x6B90E022, 0xF2466D89,
+ 0x432DED25, 0xEFC94B45, 0x3116C3E, 0x1BBFBC45, 0x8FBC3D21,
+ 0xFB2039AA, 0x50679156, 0x450F8837, 0x73C7F87D, 0xC27898A7,
+ 0x7F48E602, 0x5064FCB3, 0x1EB6F58F, 0xE647C845, 0xBC8E84EC,
+ 0x5C4B8FFC, 0x440A88B7, 0xA490480E, 0x371DC115, 0xE1F236FE,
+ 0x4D65A2C5, 0xA965B0B7, 0xD05512FB, 0xDFAB9656, 0x191C627C,
+ 0x56B7FAC3, 0xF304A2E4, 0xC7ED6DF0, 0xD09B8C49, 0x1A1E777B,
+ 0xE70746BA, 0xEB582E9C, 0xFA6014DD, 0xB3B67784, 0xD3F64D81,
+ 0x318872EA, 0x4D241611, 0x134DF119, 0x2EA55DFA, 0x71A8D182,
+ 0x15AFE856, 0xD5CD885A, 0x5EA2B899, 0xF87BC7FC, 0x25DE8D6,
+ 0x93837315, 0x341C3698, 0x58534F, 0xF10652DF, 0x18C92AA4,
+ 0x17E969AB, 0xC12D08D, 0x6B0D0FBD, 0x40ACD3E2, 0x8C3AD43C,
+ 0xFDE55C9D, 0x25A58094, 0xBBCAB168, 0x2F06ECA1, 0x9D23A101,
+ 0x6F850449, 0x769C743A, 0xB63FD349, 0x3B3C852F, 0x1EC89061,
+ 0xFE8C7369, 0xA19C0F73, 0xB682F1D3, 0x48DAE3D4, 0x7F9FD390,
+ 0xEF784A6E, 0xCB23F15, 0x7BEB1E0E, 0xCBE90203, 0x6979F11D,
+ 0x251C50A4, 0xDAD9C59F, 0x5E4E5BFD, 0xCCD4DF48, 0x72BD66E,
+ 0xE7FB1B35, 0x75B4B83B, 0x29E9282A, 0x2590317D, 0x7835F9A1,
+ 0x25D3602C, 0xCFEC2E4F, 0x9CA2B0E7, 0xA4714302, 0x8F3D53C4,
+ 0xDE00F109, 0xC26D6273, 0x3E8DC623, 0xE3A972E2, 0xF67DF096,
+ 0x781682A5, 0x6C16F144, 0x49DC8D17, 0xB2EB82EA, 0x3CB93D91,
+ 0x44D4D3C4, 0x556040F, 0x1406DD74, 0x55FA83ED, 0x91C35357,
+ 0xF5A1C63, 0xA64E34D0, 0x7DF58C80, 0x62E97E52, 0xFBA1A2FE,
+ 0x8CB29D60, 0xDC1AEDE5, 0xB260BBF, 0x1AD9C6A6, 0xC60E9788,
+ 0xAD9DFA42, 0x2E422C17, 0x51CB5E86, 0xEB840466, 0x2666D5D8,
+ 0x7A0F7C62, 0xDE052A31, 0x6F0330C4, 0x9142D4AD, 0xDC8578C9,
+ 0x978F3E76, 0xEE43CB4D, 0x14E7EFC7, 0xB50B064B, 0xD7FB2900,
+ 0x67C4F4A3, 0x4D1193D7, 0x5091FB73, 0x3EB9C846, 0x960BE069,
+ 0x88250E7E, 0x94503385, 0x1C1F244A, 0xCFD72CE3, 0x8CD5F105,
+ 0x2B34131F, 0x60D266E2, 0x16BA806A, 0x25C25A42, 0x5FF6C068,
+ 0xD23A191F, 0x7AB5C53D, 0x9EA37FBB, 0xD1AD4B07, 0x40BCB39C,
+ 0xF45C8526, 0x80FEF5BF, 0x197D6D43, 0xD56FD4D0, 0xF39E498B,
+ 0xFB4F6847, 0x84DF289A, 0x2246F5CF, 0xF979B823, 0x42DCD843,
+ 0x1AB1BB0C, 0xABEC5FCE, 0x6E7EBC1, 0xE013DB54, 0x73BC8A04,
+ 0x88D0F71E, 0x4D93B6D8, 0x57B0B7CF, 0x99371728, 0x86B129E9,
+ 0xF4EB3DD2, 0x6956AA9D, 0x4C84AA0, 0xFD22CA10, 0x36E6915F,
+ 0xC830D7EA, 0x1EE1666, 0x1036A43F, 0x3FC86E7C, 0xF10F9CD2,
+ 0xEFF5F21B, 0xBF9082E0, 0xDD0DD00C, 0x80524F27, 0xDD5A3222,
+ 0xEA53B93F, 0x7FDA09AC, 0x89840C97, 0xC3A9BDCF, 0x1EC26899,
+ 0xEBCAF99C, 0x2EBB3226, 0x936A3254, 0x2E1E1786, 0x57E4CB9C,
+ 0xE5CDBE5, 0xFBA2458C, 0x48F3D0EF, 0x74FD06AB, 0x96C30795,
+ 0x14FEF0E9, 0x2F5FBA0C, 0x3CCEA60E, 0x7BA0354A, 0xCD7329FF,
+ 0xD4169550, 0x5FAA5E66, 0xF0C25CA2, 0xEBCC8065, 0x3F147D8F,
+ 0x5ED3293E, 0x6457117D, 0xE4CF4B98, 0x11F1E74E, 0xC13F47EC,
+ 0xBC7E22DC, 0x22512D19, 0x9140ACBB, 0x490D52F, 0x3E2D54C2,
+ 0x9FCBBC1B, 0x89646A33, 0x9FE4B65F, 0x92CE9ECC, 0xFBD59FB9,
+ 0xCE95DAD1, 0xBBCDE794, 0x9C0FA1C6, 0xCFD90F8B, 0x494C1770,
+ 0x21AD2AAE, 0x58EC00A6, 0xB0848A25, 0xEC4FEB5E, 0xFF1517EC,
+ 0x52871C07, 0x105E05B0, 0x178B1913, 0x18023805, 0xB16BBC6B,
+ 0xF8522A7F, 0xB17DEC22, 0x3808ACAC, 0xBC5B9043, 0xBEC01BA4,
+ 0xBC6CDA0B, 0x17906D50, 0x8422829F, 0x51C9AFB9, 0x54F78CEF,
+ 0x72CEEA16, 0x76A74B94, 0x7EC063E2, 0x51C65B1D, 0xD97ED9B8,
+ 0xDE89F034, 0xB5AEEFA0, 0xB88D3E9D, 0x9D4C57AE, 0xC8CEA9C1,
+ 0x941A74D3, 0x8E2FC33, 0xEDCEB551, 0xB91FA3E4, 0x8BA2261F,
+ 0xE558E0F2, 0xA4E81979, 0xAAE31455, 0x70B62249, 0xD48D1A67,
+ 0x11767EB6, 0x823DFECA, 0xC815C538, 0x2AB67EE6, 0x22FA86BA,
+ 0xD7A1F96C, 0xBA96E382, 0xB75B3FB7, 0xCB705FAF, 0xD1B9D3E2,
+ 0xD4C8DC2F, 0xF954B0A5, 0xDABE493B, 0xCA3FBB37, 0xBBDC387C,
+ 0xA30C87D6, 0xB5B493D5, 0x584F5615, 0x90FB6370, 0x5544A92D,
+ 0x980F7FA2, 0xF1459235, 0x130B11BD, 0xC7A44998, 0xFEBCA776,
+ 0x7943BE84, 0x72C99B04, 0x353F6042, 0x66F5C2F2, 0x9C5B2CC5,
+ 0x9FF06E41, 0xAC9E5492, 0xFF9A1CC8, 0x4429DE05, 0x97845307,
+ 0xDBA36668, 0x40BEBB2F, 0x606DBA6A, 0xDE7A4225, 0x9AF7FB71,
+ 0xE97A0E6C, 0x99C2AA59, 0xE00C525B, 0x5D4F9521, 0x89C5D7BB,
+ 0x18481C9F, 0xA27A1F59, 0x2A6267A3, 0xC467981A, 0xE04CE94D,
+ 0xAAB2AC1D, 0x5FD1AC86, 0x8F33E395, 0xE1FBE285, 0x636C2961,
+ 0xD838584E, 0x2F845D90, 0xAD52A8ED, 0x8F8C841B, 0x829A3861,
+ 0xAA0FF413, 0xA079F240, 0xB15D507B, 0x93722B10, 0x833AF929,
+ 0x4FB5B879, 0xEDD3031D, 0xE22CE740, 0x9ADF835A, 0x13A0C7A3,
+ 0xD5791B98, 0x99D9409F, 0x9F776A0E, 0x8665EC9F, 0x7301EF7C,
+ 0x9B341035, 0x59EADE7F, 0x242C1ECA, 0x20FD13FD, 0xE22DAF76,
+ 0x3859E84D, 0x6ED83DA, 0x54ABF391, 0xC43F4740, 0x4661F86,
+ 0xC6442213, 0x7FEAF294, 0xC0CAC024, 0x38B9FA9C, 0xFFF33259,
+ 0x1AD86335, 0xB365445F, 0x54B58378, 0xFD7AE96A, 0xE019B245,
+ 0xCF51C4EC, 0x604D7EE, 0x7B40C023, 0xA5E168B0, 0xD7B8C643,
+ 0x91C028D3, 0xCB939A6B, 0x169B0123, 0x96FF8CFA, 0xFCB3E126,
+ 0xB95C01B1, 0x1758BFB6, 0x50F50968, 0xF774D536, 0xC5A8BFE7,
+ 0xE2496BE, 0x6FB8D434, 0x3F7FEDB9, 0x9BDEE991, 0x1CBD2009,
+ 0x2CE74DB4, 0x1CB51025, 0xE965ECE6, 0x89100034, 0xA089E8C0,
+ 0x5860A65B, 0x9C4D349E, 0x54898852, 0xD07C9738, 0xBC677E89,
+ 0x75B5D0C1, 0xCFD435AF, 0xED550357, 0xAED9301, 0xDCD1734A,
+ 0xEDCD21D7, 0x69F6A592, 0xEF8009F7, 0x44374358, 0x9405770D,
+ 0x668AC4FA, 0x50507E61, 0x2DB19DDC, 0xA9BDD137, 0xFB722699,
+ 0xBC067E88, 0x88740174, 0x717CCEDC, 0x9F7F1E11, 0x389F4CC,
+ 0xCF4D0018, 0x24588FF1, 0x25C9F951, 0xDA660468, 0x6C09D91C,
+ 0xC9F788E, 0xDD4DF43F, 0x8B04484A, 0xC7F67DDB, 0xD2939F8B,
+ 0x96BCFDE5, 0xF6DD10D8, 0x1124A3BC, 0x7C281FBB, 0x5FAFA71B,
+ 0x58A9C493, 0x4747793C, 0xD3B79E72, 0x357AA675, 0x8E94A74B,
+ 0x1994025, 0x95D10FB8, 0x5C64AE63, 0x9E37973F, 0xFCE67009,
+ 0x8480F94E, 0x34DA26F7, 0x126CFB46, 0x206AAA6B, 0xBA0A6200,
+ 0x8DF3F67F, 0x4936802F, 0x950F62F8, 0x17E64C44, 0xC70E523E,
+ 0x2F910727, 0xAF7C5BC, 0x9EA24508, 0x1E945729, 0x55E48FBD,
+ 0x897CB57, 0x8C134FEB, 0x54E68223, 0x91912044, 0x7A461BDB,
+ 0xCE91309, 0x72135AF, 0xBF94D484, 0xDD752690, 0x32248D12,
+ 0xEA092355, 0xC24CA220, 0xE8A95D65, 0xE4E2EAE6, 0x664763E9,
+ 0x71F1AA47, 0x832550FF, 0xFFA73B6B, 0x96F5DFF6, 0x60CB9B66,
+ 0x75F29F5C, 0xF863AC8F, 0xF16993FC, 0x3503801C, 0x3D1E8B2,
+ 0x583CDFF6, 0x62AD49F2, 0x8261843F, 0x826EA9B6, 0x5E2EF3,
+ 0x8D3848EC, 0x7391A581, 0xDFC466FB, 0xB38DCBD1, 0x4145C3C0,
+ 0x73F322D7, 0x2B55F284, 0x6B19FBA6, 0xD9446AD1, 0x36C330C5,
+ 0xB71E4B29, 0xF29F504E, 0xB4FA4CFB, 0x290B6941, 0xA2197E21,
+ 0xF2AAE27F, 0x1A1728B5, 0xAFF5632, 0x6AEE763B, 0x2962A376,
+ 0x965D67E7, 0x231A8B76, 0xBD3596FC, 0xD4AE3E8D, 0x58D4D740,
+ 0x4EA3B6DC, 0x5479A7F5, 0x110A4791, 0x9A772A63, 0x728C4794,
+ 0x6D6A0801, 0x3F89D9E1, 0x326D1BC4, 0x49B3798, 0x5E2B3CA8,
+ 0x742C385A, 0x89450FE0, 0x24236A74, 0x81AC9891, 0x7BEF3C66,
+ 0xACECD674, 0x29009073, 0x94D6BDBF, 0xF2C6CDF4, 0xDBC21EE3,
+ 0xC65C89A4, 0x35DC5337, 0xBA281430, 0x787521B0, 0xADF8317E,
+ 0xD5739B77, 0x8567F3A2, 0x374E0CAC, 0x5AFFF50F, 0x9654D41,
+ 0x4A86EDEF, 0xE16C9A62, 0x59D15E49, 0xA69769C8, 0xA9197100,
+ 0x1E04CB9F, 0xA926CCB8, 0x5047C429, 0xB7E369C, 0x812F5F0A,
+ 0xA53EA5BA, 0x9AE5C105, 0xD4C7CC5D, 0xC99E02F9, 0x5BCDFE96,
+ 0xCDBAA854, 0xCF209B89, 0xBE08E9B, 0x5C73AED2, 0xBD959602,
+ 0x63C309AB, 0xEE289A4, 0xEDA954C9, 0x5C54F616, 0x3BC34487,
+ 0x47A3C772, 0xAB0084A4, 0x2CFB8D44, 0xF5F8411D, 0x43F6361D,
+ 0x12B8467F, 0xCDC437A5, 0xAC96A375, 0x7962CD18, 0x5D728EF4,
+ 0x66B11DEF, 0x73C87A6, 0xA35AEF9A, 0xC84F12F7, 0xB1EDE9B4,
+ 0x2F6A1752, 0xCF8DA321, 0x2E37F4E0, 0x4985F516, 0x684E49AF,
+ 0x56287772, 0xF74F95EF, 0xD994FF05, 0xC1D23E99, 0x81214F78,
+ 0xA5DF2934, 0xC2B686DB, 0xABC54017, 0x6918D067, 0x737A798C,
+ 0x3904B21C, 0xD4CB6EFF, 0xC256E4F8, 0x38B0CD4D, 0xE2D27089,
+ 0x75A00DC2, 0xDC1D5E7B, 0xE2295307, 0x2F0A683C, 0xD00AF450,
+ 0xE45C3252, 0xD86804C8, 0xF9628DB9, 0xEA011DB9, 0x6A67523A,
+ 0x488B54B3, 0xA292CDEA, 0xB1D1D89A, 0x17415325, 0x3EAD3D80,
+ 0x5D092525, 0xB5880E29, 0x1104A8AF, 0xBC177790, 0xEC730159,
+ 0x11B0A1AD, 0xB809FD7C, 0xB23FE31, 0xCCBED7C8, 0x45B7F7BF,
+ 0x9491B0EB, 0x1B1A90F9, 0xE34F4317, 0xF060A5B3, 0xF795EF1,
+ 0x8254A941, 0xC6CC30E4, 0x770FC40C, 0x17EC9C1F, 0x20DA83EF,
+ 0xF9CCBFC9, 0x9D0675AD, 0xACEA7EB3, 0x56326F5C, 0x74D4DF3A,
+ 0xA8FF9A9, 0x8F55E3E2, 0x5B0D12F1, 0x12DDB28C, 0x95FADBED,
+ 0x81F48694, 0xABEE8392, 0x90E96B15, 0x2C44972E, 0x4E2D3A4F,
+ 0xE8D34D14, 0x83C03E59, 0xDC295E2E, 0xDDEA452F, 0xC2A2A33F,
+ 0x617210DE, 0x69542DB0, 0x1DD96D24, 0x3E3871D0, 0x9DDDAF6C,
+ 0xBD326CD5, 0xD87CE143, 0xF3C79B3A, 0x7F811CCD, 0xDE1B1502,
+ 0x8075EA04, 0x9D09F1DC, 0x8CCBD152, 0x669F35C, 0xC9414276,
+ 0xA2BFFE0E, 0xF8AAE650, 0x190C1AE7, 0x2DBB4A7D, 0x575B247D,
+ 0x3A599D3E, 0xB09B4DFC, 0xCE4904A0, 0x63C72670, 0x15A3BD05,
+ 0x799B50CD, 0x19A2718C, 0x4142750D, 0x9013BE74, 0x21288938,
+ 0x590BD2BB, 0xE4303149, 0x46B308C0, 0xD2BB7D56, 0x1BFB248,
+ 0x943B2E72, 0xCAB18644, 0xFCC921C4, 0x5308C4D9, 0x9098CEE2,
+ 0x435B219F, 0x69F1BBE5, 0x155216D4, 0x83F2A4A5, 0xE177744D,
+ 0x37DF6FDE, 0x9D9EA50A, 0xDFA8D408, 0x6C72E71E, 0xEA617E3E,
+ 0xDAD6C13B, 0xB83A850D, 0x45F6BEB5, 0x6AFB346D, 0x400B29FB,
+ 0xBC8E57DE, 0xC6C1081A, 0x4F6A9545, 0xF878303F, 0xB9E519DC,
+ 0xCCF25FBA, 0xCAE069A5, 0xB79B082E, 0xF70BB7E7, 0xE6A5535C,
+ 0xB769EA37, 0xE07CCBCE, 0xA9F04406, 0xBB7E5A7A, 0x10C986,
+ 0x5EB448A0, 0x3B154163, 0xCB832FD3, 0x50100140, 0x6963216B,
+ 0xEF480040, 0x75B83F45, 0x4A07D8C5, 0xEFDF39B2, 0xDB139034,
+ 0x5BE9C8C9, 0x1915F818, 0x852ACD9, 0x58BFF825, 0x64AF5C20,
+ 0x1F13AFAA, 0x8A5A1E9D, 0x57870533, 0x98A418CB, 0xCEBDAD9D,
+ 0xFA54CB95, 0x707D0BBA, 0x26EE1F10, 0x428CAAC6, 0x33AC77D0,
+ 0x6879957E, 0x522DCDE5, 0xE29E9579, 0x4AB0C59C, 0xB5FA1395,
+ 0x4C0BA116, 0x297A0F00, 0x440CD4CD, 0x63BCFEC0, 0xAC14638B,
+ 0x3C7DF738, 0xC213D3AE, 0x5CA0779D, 0xB49A3458, 0x678D95A9,
+ 0x281735D2, 0x1911DA83, 0x3A5EA479, 0x2C1090F6, 0x40C0D5E7,
+ 0x33AD6433, 0x49B076BB, 0xA1C1D333, 0x80474C82, 0xC62FE221,
+ 0x87F4E57A, 0x4C5C1506, 0xAD5E1E10, 0xE435A8C6, 0x96D7E0E8,
+ 0x53E54D01, 0x7EECEA8B, 0x699C41E0, 0x181C6479, 0xAE6E687E,
+ 0x2FD27BB7, 0xDF60DD39, 0xC38A3AC, 0x5AC51EC3, 0x8F1205E1,
+ 0xBD71109C, 0xCB2CCA62, 0x236D9D16, 0x45ACA6BD, 0xB33BDCE1,
+ 0xE1D9134F, 0x410F24FB, 0x3BF34DF6, 0xB799F963, 0x1B2D4C07,
+ 0x8D92C15, 0x9CA0073, 0x76772A47, 0xFBB63B16, 0x78F3C3B7,
+ 0xF118B4A6, 0x8E86A34A, 0x56693D7E, 0x381EA186, 0xCB9B430D,
+ 0xAD11DC36, 0x599B3370, 0x7A6B80C0, 0xF2A282DC, 0xF58F96FF,
+ 0x97AADB3A, 0x5AA06FD, 0x44A43553, 0xBE8097C6, 0x4CF5002D,
+ 0xBADE20DD, 0xFEC25B7, 0xC8B50C4E, 0xF0C899D4, 0x815F9958,
+ 0x77772B46, 0x7413F82A, 0x7203A939, 0xF4623F73, 0x35EE625C,
+ 0x2723BC68, 0x33790B09, 0xA58391E4, 0xA27C7C25, 0xBC032556,
+ 0x1D812AD4, 0x301BB65D, 0x22FAF223, 0xDCBB79DE, 0x78CE1CBF,
+ 0x570C796B, 0x17EF8909, 0x8E2C32E5, 0xB54FF82F, 0x7702F70,
+ 0x1C0A78C2, 0xCB3078DF, 0x7155531A, 0xEAC77450, 0xB9DC2EDF,
+ 0xA8B6A1A6, 0x57FC52F0, 0x6B5543E4, 0x40679BEA, 0xE46813E7,
+ 0x65525695, 0x6C9CD43C, 0x5E5BD786, 0x44212626, 0x847A8357,
+ 0x7E39813D, 0x9FE22F0E, 0x29EC985A, 0xC91CF47C, 0xB31A26AC,
+ 0xA4C8B43C, 0x8EAB7865, 0xF6F2F67E, 0x3F73A8DC, 0x4FAF5455,
+ 0xE1253CAD, 0x3001A083, 0x532DEAE4, 0x6A110DF6, 0x585D0FDE,
+ 0x19071CC0, 0x1A351A69, 0x2FEAD890, 0x33902499, 0xA218C193,
+ 0x2294A970, 0xB0544EA1, 0xC54B25F0, 0x6C89048C, 0xC8203390,
+ 0x237F30DA, 0xE8F10E5F, 0x6B57E331, 0x43744B6E, 0x2EEF4BB4,
+ 0xEBD13AA, 0xA9024B04, 0x22895C31, 0x321C459A, 0xFCEFD3EE,
+ 0x94772392, 0xA094B3F3, 0xC070FBB2, 0xF30ADCDF, 0x8D294C6E,
+ 0x89E4C299, 0x47DE058E, 0x841A807E, 0xDEA7608F, 0x3A45D7AE,
+ 0xFE08A063, 0xF2C65E08, 0x4C653ADB, 0x8E4BED1C, 0xC85C1323,
+ 0x63DF1750, 0x4EF4B72F, 0x209903A9, 0x3ECCC1C6, 0x4283795A,
+ 0x205AC943, 0x38B1ABE3, 0x1241AC5D, 0x7C645871, 0x747695BB,
+ 0x29206570, 0x31BACE6E, 0xFDEEDAC9, 0x4DEFF536, 0xCD6CFDC0,
+ 0xEB0FAB42, 0x7DFA5EB6, 0x8363D9BA, 0xCFCD2514, 0x69FEB823,
+ 0x10BDBDCD, 0xE4C27020, 0x56DCF966, 0x9C97BD95, 0xCDAB9269,
+ 0x8316F55E, 0xC62F7354, 0x5415281A, 0x31EBDCED, 0xCDF7A05D,
+ 0x5F674F71, 0xF70EE58B, 0x26037964, 0x584174B4, 0xFEA5520C,
+ 0xD01A8007, 0x7F2772E8, 0xC2FF1456, 0x7B2CA1FB, 0xE938BBD0,
+ 0xD96CCCF2, 0x9AE8088B, 0xF3A25E6B, 0x3780417E, 0xB9E2917D,
+ 0x95872990, 0x12D99C68, 0x2FC5DDB0, 0x55437D2B, 0xDB9C14B7,
+ 0x6BBE6AF9, 0xFBDC9201, 0xDCB32A70, 0x1CABF45D, 0xD8BCBF4F,
+ 0x271AE6A5, 0xD34B8953, 0x58BBFB3A, 0x537F049A, 0x55B51226,
+ 0xCD809DC9, 0x846DB4EB, 0xED476D72, 0xEFC8F8AF, 0x6AA3228D,
+ 0xA363F656, 0x2207127, 0xA1BBE245, 0x2AB58A00, 0x637810C9,
+ 0x91F61AD, 0x347D333B, 0x1E9598E3, 0x2E7BD8C6, 0x8DCE469F,
+ 0x73B82620, 0x9257D4E0, 0xD9580F88, 0xE8EF6D53, 0x2D9FAC45,
+ 0xB56E2C6, 0x9B369045, 0xB50702C6, 0x955D3700, 0x577CC21E,
+ 0xED02FCBA, 0x73320B99, 0xB55DE16B, 0x7F578129, 0x3F6FD052,
+ 0xF211A764, 0x9B7F9204, 0xC61EDC01, 0x1363AA4F, 0xEFAF1CF2,
+ 0xE5AF97EC, 0xEEAD4FB7, 0xF41B649, 0x373087FB, 0xE81355EB,
+ 0xE04FF410, 0xFD04F4F7, 0xFA269CEE, 0xBE8D7535, 0x5FC007DE,
+ 0xCF085F76, 0x94D7201F, 0xAF49F41D, 0x8D6E7F, 0x9D63B6ED,
+ 0x9A2A0877, 0xF06123D9, 0x6624C891, 0x508266E4, 0x6921EAA4,
+ 0xD6E69A49, 0xCDA0F920, 0xA5870B5E, 0x1A93A2CF, 0xE3A030C6,
+ 0x6EC03FE5, 0x37FDBDF6, 0xBEFD0BFF, 0x3D3CBD0E, 0x2DDBFD7D,
+ 0x8B58AE2B, 0xCAD61AF3, 0x624F4677, 0xC402CF5E, 0x431D2CC1,
+ 0x5C205AE5, 0xFC3B8ED4, 0x501C36DA, 0xBC9217E5, 0x6752573D,
+ 0x3BE702E, 0x8E06CF12, 0x81494C86, 0xB2DC2F63, 0x792EC845,
+ 0xC6BDEDB5, 0xB255BA4B, 0x6C66C28D, 0xD1A16904, 0x93ABFF21,
+ 0x94827FC4, 0x87825689, 0x314D1F33, 0xC0D8B98A, 0xC84AC57D,
+ 0xEBDB0F92, 0xBA4F473B, 0x61130498, 0xA534064B, 0x3DC04FBD,
+ 0xD0A701F2, 0xA671765D, 0x17464B7E, 0x4CCCB84, 0xC297BAED,
+ 0xAAF8C84A, 0x631313F, 0x8E0FD926, 0x1699F616, 0xD9808C9D,
+ 0x55BF5BC2, 0x27FD10B0, 0xAE975927, 0x92B3F52F, 0x9025C6B3,
+ 0x95E5E313, 0x4CB83334, 0xE4A1E7B8, 0x74F7D3D5, 0xDDDC42B9,
+ 0x5A89BEF1, 0xF66A6AE5, 0x33730C23, 0xEB7F079E, 0x742FEF19,
+ 0x2C68CAC5, 0x2410679F, 0x9D1632DA, 0x458F4AAD, 0x8889E6AE,
+ 0xA3B48216, 0xC9AF4AEC, 0xA506C8F6, 0xB6AF9E59, 0xC6340436,
+ 0xA6B294E, 0xF35CF92B, 0xEB3A4113, 0x98070AD1, 0x9E61E01E,
+ 0x58C2893A, 0xCC1F8C34, 0xCAD665A0, 0xD0414D39, 0x643BDCD8,
+ 0x8AF801AD, 0x9ADBB106, 0x2BD02351, 0x8F890436, 0x546747D0,
+ 0x6DC33C48, 0x95FA7FD6, 0x5F12C5A5, 0x5DF2761D, 0x9A9B2F8A,
+ 0x8C61276B, 0xACCC7F4, 0x37A5829D, 0xF1A0F1, 0xAAED57E0,
+ 0x180CD2A3, 0xDC393CA7, 0x504E7405, 0x89DE2F7, 0xA4D8C4EA,
+ 0xD8BECE01, 0xD664017C, 0xF57FA30, 0x6049928D, 0x9832E166,
+ 0x176AAC31, 0xA793F88A, 0xCFFA8B54, 0xA30DF1EF, 0x3B6C7611,
+ 0xDEFC961, 0x9BFB79F1, 0x1483D430, 0xC3A77C0C, 0x42AC1FA0,
+ 0xFA3605B6, 0x9A2EBDF0, 0x684D414E, 0xD9308E10, 0x64D68C19,
+ 0xA8A9B67B, 0xF5E7B9D4, 0xC7B70ACE, 0xA6EB6DB8, 0x8A22FBE2,
+ 0x3AFFDDA1, 0xFB61F7D5, 0xE057717B, 0x846D96CB, 0x20A4B400,
+ 0x574089BB, 0x9F3D2DBD, 0xEEDDDB4B, 0x5E64EA6B, 0x6781DC90,
+ 0xCFD86A6, 0xA92441CD, 0xAC5DCCD6, 0xE6BB5582, 0x32FA6B3F,
+ 0x3ABB8A64, 0xA49D2003, 0xA965E430, 0xEC4053BB, 0x95859D40,
+ 0x2672832, 0xCAC3E608, 0xF8C13A53, 0xB04EC2A3, 0x87F54941,
+ 0x62A3A924, 0xE0B48702, 0xE8700446, 0x95BD4B11, 0xCFCFDF9A,
+ 0x19F67E7D, 0x60853AC6, 0x468F963, 0x298066B9, 0xEE53E89A,
+ 0xFC63E607, 0x6FA101E5, 0x8B2F1F84, 0x24AE7C1C, 0x385008FF,
+ 0x96E75EB6, 0xF1175277, 0xE5B4A577, 0xB0C97AC, 0xC21CC45A,
+ 0x5C680DF8, 0xDEB046DC, 0x1487FC03, 0x1D90CE3C, 0x712563BF,
+ 0x65A26CD9, 0x4D094F62, 0xB5DFE29C, 0xF58B2A62, 0x9420A9DC,
+ 0xCEC7537F, 0xC46D1FCA, 0xAD5D7B10, 0x68777A24, 0x6C096D2,
+ 0xD787D72, 0xC7743F50, 0xB3D05F4D, 0x53E0A7E3, 0x9E627C6D,
+ 0x1AA0959F, 0xD1E00E47, 0x8874BA26, 0xCEAC0958, 0x10F67BBD,
+ 0x712C6597, 0x3478BD73, 0x4D6F116, 0xD30BC24B, 0xB98C565A,
+ 0xD7C5B116, 0xA8CDAC4F, 0x4144673, 0x848F37E3, 0xADD946EE,
+ 0x6F17EAE3, 0xEA0FA265, 0x41DB99E0, 0x6BCFDA5A, 0xB46ECED5,
+ 0xAF67610E, 0xC7E9DF2C, 0x5CC6F0C6, 0xAB2C2BA, 0x6BCC3881,
+ 0xE482C243, 0xD8053417, 0xFFDB6E41, 0xF13EEB84, 0xE8292661,
+ 0xEB9940A6, 0xF0B45F98, 0x1CA82AF4, 0xCCA7771D, 0xDD5F3CFE,
+ 0x58BD8E91, 0xDF9E3342, 0xA1003957, 0x4621AF52, 0xF926F465,
+ 0x209925AD, 0xB1C72F09, 0x3FAB8ED, 0xA15C0A17, 0xDBE73D2C,
+ 0xF917CE51, 0xED047661, 0x7361B752, 0x1AAA57A8, 0x31445667,
+ 0xFEC0FD81, 0xE3073574, 0x7D36F720, 0xF418181A, 0x1CB8758E,
+ 0x8E85AFBA, 0x407E9AD9, 0xF724E308, 0xD030D3ED, 0x4610418E,
+ 0xE799EA4D, 0xF8B68F92, 0xB84B9ACD, 0x4B8168C0, 0x9888977,
+ 0x216F3B3E, 0x5C49C1DB, 0x759E718D, 0x7C4309FF, 0xBF6DEE2C,
+ 0xE566F231, 0x774B0A7A, 0xBE55CCFF, 0x3081B8CD, 0x2284369E,
+ 0x2FDF7473, 0x3AF68AC7, 0x6047E9B8, 0x3743BA0E, 0x691D261,
+ 0xADC440E1, 0x24150207, 0xFBFE466C, 0xF767E860, 0x8157332E,
+ 0xFB54D774, 0x1AF34C22, 0x74E05695, 0x2101FD57, 0x2904274C,
+ 0xA1294E9A, 0xF43CA18F, 0x4FA79EB5, 0xAFD1C9EE, 0x6EB3953F,
+ 0xDDFCB3AA, 0xDB48F7BA, 0xE1742183, 0x8A78CEBD, 0x225CD669,
+ 0xD76B771A, 0x3520113, 0x428B2892, 0x3A5CE8DD, 0xAB4AC42C,
+ 0x2928BE8D, 0xC34E3031, 0x93F0CB9B, 0xB7A6FDB4, 0xEEB2B85E,
+ 0xC393597B, 0x9D8457EF, 0x91F0F0FA, 0xC54AEA3C, 0xC639521,
+ 0xB668AFE4, 0xE4CCE3CD, 0x86223A5D, 0x6A51A2EB, 0x4333C505,
+ 0x3233B8B7, 0x1D01F51E, 0xF0C691A6, 0x699EBC2C, 0x7FEE8DBC,
+ 0xCC50E42A, 0x7951DB68, 0x8CF01752, 0x33D33841, 0xB46E353A,
+ 0x700B65B, 0x59ACA844, 0x38631893, 0xC32D0F92, 0x6897EFDD,
+ 0x3F93BCDD, 0xD50E33C3, 0xD0075F1D, 0xB3CB6096, 0x875896CB,
+ 0x5DF6651, 0x8E2D197F, 0xCDF68F10, 0xC74018CE, 0x83E6C42A,
+ 0x994DEA76, 0xF932D8AF, 0x98775C2D, 0xF79CAAE5, 0xF2BEB839,
+ 0x7318C6DB, 0x3AFD6D85, 0x37F18BDF, 0x10194867, 0xA73B5205,
+ 0x3F06A1BD, 0xBC8026DF, 0x531CF753, 0xCAFAED74, 0x817C9E70,
+ 0x32338A3F, 0xA5177C74, 0x9A3C131F, 0x90F9AF0, 0xE9281B62,
+ 0xEDD87C1E, 0x16577CB0, 0x5E3F7AC3, 0x4E49E1EA, 0x495C1B67,
+ 0xC282F5FE, 0xF8993B1, 0x47563C68, 0x49FA0716, 0x26A55B80,
+ 0xDF870F8D, 0xFBB8DDA5, 0x130EA4E3, 0xB0B66F1A, 0xD7B92F0F,
+ 0x55FD4759, 0x6D11AC86, 0x8AB0B6F8, 0xD8C8C8B0, 0x758DA8A,
+ 0x9CD589F, 0xB808C0A0, 0xB2C7A3F3, 0xBA40DA44, 0x937532CF,
+ 0x279CFDB2, 0x545896EA, 0x387A8F38, 0xB2E5F9D0, 0x7566CA0D,
+ 0x51B45DC4, 0xA93B6EAE, 0x1C22D8D5, 0xEB96BD1D, 0xB8F40750,
+ 0xCB7DCF85, 0x188F6018, 0x95BA817E, 0xF7C19E4E, 0xAAF97DDA,
+ 0xE5BD967B, 0x1604352F, 0x3758C3BB, 0xE2FA13D1, 0xE3666F4E,
+ 0x218059EA, 0x2F4750EA, 0x2F065B46, 0x8FC4F43F, 0x2F45422F,
+ 0x45928A5E, 0x77055776, 0xBB8103E1, 0x160EFF29, 0xA704F79B,
+ 0x6655E735, 0x2C19DC79, 0xE407A7CD, 0x9F4AE1F0, 0xBED7DCE5,
+ 0xA870A304, 0xDC413709, 0x903181E, 0x7C1F6803, 0x44971A01,
+ 0xF7A81ED1, 0x5DDFB023, 0x2D90CFBB, 0x7F7A432A, 0x35F3F5B0,
+ 0x7D935FC5, 0x1D99E7BB, 0x8EFC82B0, 0xAB0DEF56, 0x70702FA1,
+ 0xCF0064DF, 0xDD9DEAA9, 0xF05F927B, 0xB483A6DD, 0x9B7388B8,
+ 0x2FD82389, 0xAC982F20, 0xC86AD76F, 0x15C6977C, 0xAB10A137,
+ 0x1433E4A0, 0x2762D44, 0x1CB5399B, 0x310A54D8, 0xD4B8623A,
+ 0x40FAB5F3, 0xC2D51618, 0xC1F4AF55, 0x17C18E1C, 0x4F37D33F,
+ 0x2DC9F168, 0xF5BB9754, 0x716FB1F4, 0x7CFB1CE8, 0x1333224D,
+ 0x344C13B3, 0x7798CB50, 0xB4278C76, 0xD7CC1B03, 0x168B21E5,
+ 0xF7D77AAB, 0x3B651846, 0x639EB0CD, 0x68EB3E8B, 0xEC82FE45,
+ 0x622A71DE, 0xAA05B6CB, 0x878B59B1, 0x3E7FB616, 0x1D650408,
+ 0xF21F8C64, 0x9BF7BF7A, 0xA0874898, 0xFE4E3C6E, 0xFA36122E,
+ 0x1BCDF4FB, 0xC371B365, 0x8F791BB3, 0x9833AD98, 0xE84887FC,
+ 0xF8988AB6, 0x180916E2, 0xB587E39C, 0xD5C884C6, 0x27B6BFEB,
+ 0xD8868D1E, 0x689DA503, 0x936B4EFC, 0xDE0DB3C, 0x7950FDCB,
+ 0xA61C81C5, 0x9F1C93B2, 0xC983179A, 0x6F847EB0, 0x6F7F899D,
+ 0xD270412, 0xCC255717, 0x763112A0, 0x8725C96D, 0x48BC2863,
+ 0x85F13BF0, 0x6D8E0251, 0xB7E66CC3, 0xA4F5829F, 0x8779F381,
+ 0x16A5E04F, 0x3DF42C14, 0x367F06A3, 0x3BF8666C, 0xC6649CFB,
+ 0x4DD9808F, 0xB4F9AFD, 0xC2642410, 0x9740E4F6, 0x8FB667BE,
+ 0x4D4B0D3E, 0xE9B236F7, 0x6E30550C, 0x79DA7B48, 0xE721889D,
+ 0x79D9B21A, 0xA06B8C2E, 0x997B1696, 0x4383FC27, 0x8B77D293,
+ 0x6FAE2A9F, 0xB45ED194, 0xF38E2C59, 0xEAA0D05C, 0xA3BC449A,
+ 0x6EB0BB4B, 0x6B242CFF, 0x7FCA0B8A, 0x47221D33, 0x4E18FE39,
+ 0xF4691580, 0x6D03D791, 0x3B937AC5, 0x9CB761C3, 0x42812232,
+ 0xFB987D6C, 0x86AD164E, 0x5D8CED49, 0x22D6D058, 0x42FADF98,
+ 0x9363A1B3, 0x83C6DB74, 0x7AF44F4E, 0x20086D60, 0x7A37665E,
+ 0xC4A29C82, 0x330F278B, 0x8750B539, 0xDD2E83D0, 0xB8E002B1,
+ 0xF2A9323F, 0x91B60885, 0xDE83F01D, 0xACA126, 0x2F0FADA2,
+ 0xC0E879A6, 0x7C715655, 0x16642BA2, 0x43B9C083, 0x95F6789D,
+ 0xE6576886, 0x46BEF133, 0x84199FC3, 0xC45BA082, 0x26489AC1,
+ 0xA4FE268A, 0x633A25B0, 0x4FCD341D, 0x8E7374B3, 0x7F8A3466,
+ 0xC82B53F7, 0x2E2114DC, 0x59213BE7, 0xE72A2395, 0xAC5F982B,
+ 0x8F63E9D8, 0xA68BA42E, 0xF0E30E92, 0x580FD13A, 0xB2FCB7EA,
+ 0xF3E4C077, 0x2C8588B, 0xC31F5E5, 0x104982D9, 0x2C2F03E3,
+ 0x8F1791C, 0xCE14310F, 0x1696133B, 0x1BC68D6D, 0xFC488B95,
+ 0xE0E7FC31, 0xBDF0152B, 0x24F78B82, 0x45BD4367, 0xC89AF4B9,
+ 0x9698650F, 0xFB2E131A, 0x82B7A451, 0x9F6990FE, 0xB6EDE6BB,
+ 0x68D5D90, 0x51FE559E, 0x9B54ECE, 0xC09D3AB2, 0xD9BA990B,
+ 0x4CF02BC, 0x70067D7, 0x3568DF20, 0xFF1D7AE4, 0xF1C67DE3,
+ 0x5ACC7F95, 0x89ED16EB, 0x6EDCDC94, 0xDF367991, 0xF1D48A79,
+ 0x21AA30FB, 0xADA2B5B3, 0xC40A5761, 0x5769556B, 0x5E1510A2,
+ 0x5741566A, 0x25B88D83, 0xFD22574E, 0x6E9B2CD2, 0xF5CE960B,
+ 0x67F938EF, 0x1A1E3672, 0xFBCE5BDB, 0x756BACAB, 0x2F177A71,
+ 0x31F3EFC6, 0xB8263FBA, 0x9A1F772A, 0x84DC1FB0, 0xC907ED89,
+ 0xAD3C6092, 0xC225B6C8, 0x37EE4F54, 0x4BDDACF2, 0xB5E944CB,
+ 0xDC26F39E, 0x3BCE02DC, 0xC01F2632, 0x89AFE3ED, 0x600757F7,
+ 0x4804A684, 0xC4F3FCB8, 0xEBCAA904, 0xE0069A2E, 0xA2FBD213,
+ 0xDB736C4, 0xA6930699, 0x71FB43C0, 0xF66C955C, 0xFBD39B5,
+ 0xC87D1801, 0xE9D2DD1A, 0x78DA23CE, 0xCADBA5C9, 0x77015761,
+ 0xF5581BDF, 0xDEB4DAA0, 0xAF7E41B0, 0x71347196, 0xF8A29A93,
+ 0x8DA3BAE6, 0x73396AAD, 0xD4DF7765, 0x326AFF23, 0x27888A0C,
+ 0xE48AC062, 0xB9F18047, 0xDE9830DA, 0x8EF78C4D, 0xFBC1896E,
+ 0x9BB566A6, 0xB640ED13, 0x8B0D9D1E, 0xD84B471D, 0x4040EFB4,
+ 0xF6DF7908, 0xCB8ACF04, 0x253494DD, 0xA85F6D88, 0x1326822,
+ 0x61EFDFB8, 0x1C78154F, 0xB13866B1, 0x3ABE5DBB, 0xBB5907BF,
+ 0xA1A57FDF, 0x410549C8, 0xA9A364F4, 0x2A371B73, 0x24AC7296,
+ 0xA01C035C, 0xE839029C, 0x6E12051E, 0xE6A549FD, 0x345F10FF,
+ 0x3BB57347, 0xBDBF3A6A, 0x2A41C3C8, 0x6E0232B0, 0xAE66D42E,
+ 0x3BE90433, 0xE185FBF2, 0x9BCA91FE, 0xF4FFB74E, 0x142B6971,
+ 0xA75CD7B, 0x9B900DDD, 0xEC56B79, 0x2FE0CD8D, 0x87BE8237,
+ 0xB38A7226, 0xB5D8B437, 0xAAADC41D, 0x8014E227, 0x38D84DD1,
+ 0xEDF5294F, 0x862F0F, 0xD69F77F6, 0x409C3B68, 0x2F12B0FC,
+ 0x32A670B9, 0x5746EE2, 0x96B4901A, 0x57208639, 0xA282A77D,
+ 0xE9D9F48E, 0x651ADDA6, 0xFF5E974C, 0x37C833C, 0x41F2BD58,
+ 0xDFE1D009, 0x32222DA6, 0x22201781, 0x64A06BAF, 0x8F188902,
+ 0xA9C2A07B, 0x617C7DF7, 0x842DA704, 0x40AFDB72, 0x49625110,
+ 0x72484F13, 0x7340AC89, 0x6C6A2F36, 0x828EF5F9, 0x20344923,
+ 0x21D3304F, 0xD6EEB7C3, 0x8F99732F, 0xEBA045D5, 0x5C0065D4,
+ 0xEEB5E899, 0x1B079C47, 0x6198EE3B, 0x946A805F, 0x7C19F966,
+ 0x75E8F043, 0xFD9880BE, 0x47BF619, 0x9C001ADB, 0x7438184B,
+ 0xA3787EF2, 0xA461EF4E, 0xEB515D0E, 0x64EFA69D, 0xD41F3145,
+ 0xD08A900B, 0x495968AC, 0x746639C9, 0x43E85DCB, 0x62E55B3,
+ 0x6B913D8E, 0x2685D73B, 0xE4F98C19, 0xB404BD4B, 0xFEA327C5,
+ 0x1E0CC908, 0x71BC53EA, 0x530AAECB, 0xBD2977B, 0xB661A52,
+ 0x86560EE2, 0x250E2591, 0xDA57D5B3, 0x347D3C22, 0x6CE15221,
+ 0x6E5288EB, 0xA79875F3, 0xCA89972F, 0x36E93777, 0x257262E1,
+ 0xD1D4E5A4, 0xF7ED5D52, 0xECE58036, 0x644ACA69, 0xCA36DFB8,
+ 0x60EAB44D, 0x46FB8AB3, 0x81E6C199, 0xD5AA5C63, 0x4A7CB01D,
+ 0xFCC109CD, 0xD999C46B, 0x3FA4C688, 0xC95C0FBE, 0xA1E9DD3,
+ 0xBE9EAEF6, 0x1A3014D7, 0x729A662, 0xDC8178FD, 0x7FCAA1EF,
+ 0xD4005420, 0x2A904DAD, 0xEE7E52DB, 0x886C0F23, 0x12D49E10,
+ 0x2B3F3B39, 0x3373A6C6, 0x5D0759F5, 0x8CF5EF25, 0xCE02371C,
+ 0x2FFEEFDE, 0x5D9CFD69, 0x2B5BB7D0, 0x5A378EA9, 0x5BED8331,
+ 0x9C1A37CA, 0x702799F, 0x4D37A8EB, 0x370CEDF8, 0x43B95BE0,
+ 0xA0C1E534, 0x204130B2, 0x8E4995AC, 0xCF1C3C28, 0x3E901F78,
+ 0xB0F43C57, 0xED4B7492, 0xABD3C5CD, 0xEA95ABC4, 0xE03B739A,
+ 0x58388E80, 0xFDF22044, 0xF4379C7E, 0x87CFA0C, 0xAE9CA79E,
+ 0x41DCB004, 0x8F69512D, 0x73ED4756, 0xE215297A, 0xD931A6AD,
+ 0x59866B3D, 0x61825B1D, 0x4F5099E1, 0x25AE168B, 0x1272D5C6,
+ 0xBE071035, 0x24314F71, 0x82F4B23F, 0x6C7F3385, 0x36CF0505,
+ 0xB71C0E3D, 0xE9F881D0, 0x27F0C290, 0xF4BE30D7, 0x88315CE8,
+ 0x9E04FD20, 0xDE197591, 0xCF0D2FF4, 0x67A4C473, 0x158447BF,
+ 0xA4B37C88, 0x27918292, 0x5FDE3DF0, 0xE8A93C3D, 0x886287E8,
+ 0x746E199B, 0x9A894103, 0x7A529374, 0xA195E2AF, 0xAA3EB0C6,
+ 0xF70788A9, 0xCE2B7F30, 0x9C4724AA, 0x902EB7A8, 0x2CBBB407,
+ 0x3799651F, 0x9016E9D0, 0xD1C0ABC8, 0xC7684FDD, 0xE4670051,
+ 0x25B69E83, 0x1CEC9BBF, 0xD066D2B4, 0x2AD4BF14, 0x7AFBD3CF,
+ 0xCB8E5EFA, 0x63B67572, 0x89F7E3F3, 0x8E8D39E6, 0x60617ECD,
+ 0x9EECEA31, 0x59E57FAB, 0x807AFCD6, 0xFD0397B8, 0x3C57D963,
+ 0x9A972CF5, 0xFC47B628, 0x9CCFAA8B, 0x405869C3, 0x3CC128C1,
+ 0xE154C33E, 0xBE53F87D, 0xD23C7947, 0x4CBEB3BB, 0x1F068FFA,
+ 0x8A7D350A, 0xB822F33E, 0xFB3BB431, 0x741D2D0F, 0x81FAFE09,
+ 0x80B8BA3C, 0x30B4BE94, 0x4B2A2909, 0x31740925, 0xE68C0BC9,
+ 0x8E7F31D4, 0x29DA2599, 0xB9D267C9, 0xEDE811D2, 0x8BC7CBC3,
+ 0x69DDA8B6, 0x879E1212, 0xF915F0F1, 0xBBCDB1AD, 0x3A01011A,
+ 0x7CD005C4, 0x475FC718, 0xF03F454B, 0x7457F264, 0xB22D9DFD,
+ 0x569DE931, 0xB585EFEB, 0x9A183445, 0x9CB353AC, 0xE3AA9817,
+ 0x32E0722, 0xF0C7595E, 0x316DBD6A, 0x96D0F65C, 0xA6F0ECCE,
+ 0xCB8A9494, 0x5B077241, 0xD36BBC7, 0x9C4CD0F9, 0x108F5B32,
+ 0xC43C599A, 0x7B10108A, 0xA4106EE9, 0x3860CF99, 0x87B782C,
+ 0xF667524C, 0x129929C, 0xEA85C1D5, 0x1A07973E, 0xB9524891,
+ 0xBC02BD1F, 0xF378D7F, 0xD0BED4D7, 0x5B782DE2, 0x738681A,
+ 0x4BA1192C, 0x46DF1224, 0x4529AED7, 0x9B1DB01D, 0x810AA334,
+ 0x661982C8, 0xD3B32F94, 0xF50AC9D6, 0xCE9107C4, 0x203078BF,
+ 0x6B0F3B2B, 0xCF63520C, 0xACA9E5BF, 0x7FBE448E, 0x51BD1E2F,
+ 0xDF958295, 0x114A9693, 0x60FCBB39, 0x6669B642, 0xC490D54,
+ 0xD19C8DBC, 0x14CC7B2A, 0x7106D506, 0xAFDADD98, 0xAF398DF4,
+ 0x88AC5400, 0x1912BF0A, 0x5389D050, 0x5AF6233, 0xF10842A3,
+ 0x94DD7008, 0x93812804, 0xD8111DFD, 0xB7C97490, 0x7748A45E,
+ 0xE70A47A0, 0xC29B718E, 0x55783AEC, 0xA2789E21, 0x97488EBC,
+ 0xD9222F6A, 0xBF74BDD2, 0x9A983E5C, 0x6CC067D5, 0xBCFDD3B2,
+ 0xD7A2A5FE, 0x4733F2F5, 0xC7AA3556, 0x1CDB485D, 0x31755CA0,
+ 0xB9F8E9A7, 0x1346410D, 0x7D885AD7, 0xA30030D8, 0x9813B41C,
+ 0x8A64EFD4, 0x273F4CED, 0xFEDDC3FD, 0xF34D9687, 0x6B67F2DC,
+ 0x13F72B5A, 0x96445DDB, 0xAC94658B, 0x8FBF54BC, 0xA7C13389,
+ 0x95814EA3, 0x7823E5BC, 0x544C27DB, 0xECE6439B, 0xD1141B27,
+ 0x7A95ACF4, 0x806E58E7, 0xD07B5422, 0xFD0353AE, 0xC1840431,
+ 0x1DD89E9, 0xA102016D, 0x3730505, 0x1F91E46A, 0x3279C793,
+ 0xA060010D, 0x9BF86C80, 0xD0C35484, 0x33E81EF7, 0x1C4D3EA7,
+ 0x6C2A9935, 0xD65E2FB1, 0xBB1CA42E, 0xEA3E3609, 0x7B478C84,
+ 0x70C1DF93, 0xA872CA92, 0x7C025178, 0xF3B19C7D, 0x6F2BD89B,
+ 0x1AD7BBDC, 0x39A48FCC, 0xAB5B72E1, 0x821761B9, 0xD2368C1,
+ 0x20ABB349, 0x29A3F960, 0xFDB18DF1, 0xC4118A52, 0x5E28E88A,
+ 0x549A3386, 0xD81024CE, 0x82DAD5E0, 0xB20BCD42, 0x9DEA0D36,
+ 0x49A4992D, 0xAFCB2026, 0xCE7536E8, 0x2C191A65, 0x24FEE0D6,
+ 0xA769AB6D, 0xF47E292E, 0xCB501191, 0x6DE13907, 0xF1343277,
+ 0xB32AA746, 0xB055DB9E, 0x87CB8583, 0xA546A4C3, 0xF06F809C,
+ 0x8FE7A8AA, 0xD0E4037F, 0xD81FCF88, 0xF85830C2, 0x3D6F4840,
+ 0x5A43700E, 0xCD300C58, 0x3B81C27C, 0x8AF86EA8, 0xF65935FC,
+ 0x46367D7, 0x7FB75E63, 0xBB28A406, 0x173F982, 0xCB92DD14,
+ 0xAAA0B1D1, 0x1BCA8892, 0x64D21, 0xFF081A44, 0x8706E93B,
+ 0xB7DEFAD9, 0x4A6DEF76, 0xDA1670DF, 0x94ABCEBA, 0x465DA4C6,
+ 0x2484496C, 0x97BB3321, 0xEFB09CB, 0x2988AA2E, 0x2722344E,
+ 0x5301B744, 0xC5E16C47, 0xF7E05D01, 0xCBE7C20F, 0x4882A6EA,
+ 0x7168CF40, 0xA98A2747, 0x35F8E15A, 0x5FAF49F9, 0xD2008D24,
+ 0xCC45A63, 0x858A3255, 0xE4C095B6, 0x7074F7A5, 0x699C98FD,
+ 0xF0BFE2EA, 0xBDA35C64, 0xE83B891D, 0x7CD09FEA, 0xE8735FDD,
+ 0xFEA27F06, 0x631D71D3, 0xA08136CD, 0x42395363, 0xDCBA6E41,
+ 0x1562897, 0x4B1061A9, 0xB4F9640B, 0x38D24E3E, 0x76DF4423,
+ 0x94B5ED97, 0xFE6AB3B6, 0x6B329B8B, 0x37AFD275, 0xC9ABA12A,
+ 0xEC9693B, 0xD49B5585, 0xE0C2BEF7, 0x315D40A8, 0x34FBE3A,
+ 0xEBE81550, 0x569F6FC8, 0x5A9C8404, 0x9DBA0090, 0xFE985DE8,
+ 0xFF4209AE, 0x89F9E7AF, 0xF841164C, 0x6B4B8F5D, 0x95CB1085,
+ 0x1990660C, 0x31263B36, 0xCF8F435C, 0xDEBCF88A, 0xD1EE25C2,
+ 0x53D80B69, 0x9EB8F01C, 0xD682EA3C, 0xEEE79205, 0xA7EFAC65,
+ 0xE9AA6899, 0x3C1E197E, 0xC8ABE1E9, 0x7BEFE9CA, 0xE792E7D4,
+ 0xA955D60F, 0x3FE8A02F, 0xC963FDC1, 0xB3D53E43, 0xE28FFC12,
+ 0x7D5BECCC, 0x18E9F223, 0xBC8B0465, 0x7ED8EEFE, 0xBB90FFEE,
+ 0x904A9F3A, 0xBC467FF, 0x8AD43A15, 0xF3FC404A, 0x2492D5F4,
+ 0xBB3F5025, 0xBED0B8BF, 0x467FE6C2, 0x36E55C77, 0x8E2CAC4F,
+ 0xD12D325F, 0x68A4D268, 0xB1AA0895, 0x755B98FC, 0x2314C4FF,
+ 0xC3667346, 0x8003B9E8, 0x1185476D, 0x227B69D8, 0x5BADD019,
+ 0xB06567BF, 0x2B837581, 0x9E11F7, 0x158E67AE, 0x339AA6FC,
+ 0x8FE50AD9, 0x65902A97, 0x42917220, 0xF9AD39C, 0x2DAAD225,
+ 0x9673B896, 0xFAE150D6, 0xBEDE3417, 0xD233D722, 0x7E67F33C,
+ 0x6E150E30, 0xC856792A, 0x28EF69BA, 0xE2AC7866, 0x928D0A4A,
+ 0x8032C4A9, 0x3D413533, 0xC1BA5CCA, 0xD2BDAC83, 0x94198A14,
+ 0x3A25972F, 0x253EC030, 0x42D7A1F5, 0x97C28C1C, 0xBE4D0710,
+ 0x92F31B62, 0x73CA2F55, 0x15FC5417, 0xEF76B1C6, 0x655A963D,
+ 0xBC17C3FD, 0xD5BED3BC, 0xAB0E4857, 0x38BAD61A, 0x8C17E47F,
+ 0xE3C27887, 0x45D2A34, 0x6D48333A, 0xF400B767, 0x6ACF41B0,
+ 0x88DA15A9, 0x3FA0EAB1, 0xAF7B3786, 0x87F182FF, 0x4112A079,
+ 0x53360864, 0xDB5CE625, 0x630678D7, 0x63E01F17, 0x7BF658F1,
+ 0xB5E4F1A3, 0xB30E4393, 0x27454C31, 0x8E7E0E2, 0x2151A5F,
+ 0x2892E2B2, 0x92B53840, 0x1EB3D483, 0xA4273A65, 0xF0CC632,
+ 0x99AC2694, 0xE0A19111, 0xC7FBA613, 0x46C8F873, 0x88A27741,
+ 0x7E9A5972, 0xC2E76F79, 0xA5CA8180, 0xA28FF0EE, 0x2A1F7DE1,
+ 0xCC130B22, 0x50ECFD8A, 0xF5BAA999, 0x5FA2EC9C, 0xC1B5C5C4,
+ 0x90EC0E5D, 0x9C26620A, 0xA97D2935, 0xE1C08B89, 0xCB574B80,
+ 0xB3DE8B61, 0x1AF89CA0, 0xFD4A77DC, 0xED9485E1, 0xAF804C92,
+ 0x6B8EB167, 0xDCC836B6, 0x85A7FFFD, 0xD4E9A94A, 0x77DDCC31,
+ 0x8897B5F9, 0xA4FA88D3, 0x8ECB3E82, 0xBC175E89, 0x963A073E,
+ 0x547520C7, 0xEEB81BFB, 0x1D8B1867, 0x78833A4, 0xE40A0CCB,
+ 0xF8D5452F, 0x954BDCF6, 0xAC228FFA, 0xE6B32DF3, 0x181ED541,
+ 0xACE26A73, 0xF1C1440D, 0xA1B93EDD, 0xE90FF70A, 0xF6741843,
+ 0x4DF581AC, 0xBE785B32, 0x751509B5, 0xC30AD864, 0xC18D8A72,
+ 0x3BF07FD4, 0x827B4CBA, 0x7DD39A4F, 0x2CFEFE25, 0xE071F371,
+ 0xC0C3F6CB, 0x1FD70F85, 0xFDABDA88, 0x8F308991, 0x4CD794F9,
+ 0x5D18B022, 0xC13D5FC2, 0xD84337F, 0xED868BB8, 0x9904CD2,
+ 0x7551499C, 0x124B262, 0x5139C2A5, 0xEF56F59B, 0xE8B87B40,
+ 0x2F030010, 0x42D2E271, 0x4E344F3F, 0xC87CDFE1, 0x44A615C7,
+ 0xC32DB543, 0xCFC889E4, 0x60078825, 0x786F5917, 0x2DF9E82,
+ 0xEE26DA93, 0x48D0C94, 0xE97D5456, 0xF487F2EB, 0x35A47D65,
+ 0x183DA0CA, 0x1A7E1218, 0x8D2674C5, 0xB38D0910, 0x5D9C871C,
+ 0x7B463ED1, 0xBBC90FFD, 0x31DED99F, 0x5171DCFA, 0xF9413D0B,
+ 0x632A00FD, 0x7B6DA34C, 0xA475C597, 0x8E157360, 0x5911736B,
+ 0xCA19D544, 0xF487D465, 0x6E749BB9, 0x888BFB52, 0x3FDAD497,
+ 0xDB5D401A, 0x7015A4EC, 0xC1F571, 0xB2D7671A, 0x8203032F,
+ 0x5A755E9, 0x24F25BF5, 0x4D2AC51B, 0xE5950FA7, 0x20196F5B,
+ 0x68E90D90, 0x5D24196C, 0x9CFCD1C0, 0x745C0318, 0xEEB977E8,
+ 0x14AA16D, 0x80662EE1, 0x7BD55DE3, 0x35EE2B08, 0xD3E8051F,
+ 0x3D0EA4B5, 0xD551399E, 0x8FF94435, 0xDD4E34ED, 0x9139E4A3,
+ 0xE6AF7E5E, 0xE1ED4EAF, 0x638D2846, 0x7084F7EB, 0xF9705E17,
+ 0x2E7A89DC, 0x45855252, 0xBA8E51C7, 0x8510425C, 0xA97AF6D,
+ 0xF0C27DA, 0x9E00CA15, 0x3BCC0651, 0xEEC38CA9, 0x19597B08,
+ 0x4C68AB5D, 0x16CA41DB, 0x35EFBEF9, 0x1E441529, 0x25131FA1,
+ 0xC3D8483C, 0xD8650832, 0x60D271E3, 0x47C92A47, 0x9EFBB554,
+ 0xBF5DBFBF, 0xFF421FA2, 0x3A38F28, 0xAE4EE06B, 0x819945D1,
+ 0xC43101, 0xA3EE9278, 0x5BAE3EE4, 0x57ACE55E, 0xC3D95551,
+ 0xC00717B0, 0x38EC1B28, 0x123597, 0x6314F3F7, 0xB3F99DAB,
+ 0x7226CE1E, 0xE8350DE6, 0xD7C582CA, 0xBB1D38D, 0x54E656FE,
+ 0x400B60BD, 0x48291A06, 0x97819179, 0x850BF937, 0x93888A87,
+ 0xF51E684F, 0x4B111E, 0xC6B37E02, 0x6C923547, 0xEF25AF3B,
+ 0x8C12CE8E, 0x89296F4F, 0x3BE2C3DA, 0x8A29A35B, 0xBBE2E80C,
+ 0x79D0188D, 0xBD4320BC, 0xAFF4F0A9, 0x7FAE6C37, 0xCCA1777E,
+ 0xB06D2AE1, 0x26B6398C, 0x5A3E5876, 0xE814DF4E, 0xC43E9677,
+ 0x4C962CE8, 0x6C274FF8, 0x8B5A1A03, 0x963E1401, 0xD8CE0DF7,
+ 0x659190E7, 0x3AD63330, 0x894BFEDB, 0xEB4CF73A, 0x3731BC86,
+ 0x30FE0433, 0x94F5FD2, 0x8417999C, 0x337E86B8, 0xAFE08EF6,
+ 0x5B5F05DC, 0x8001C95F, 0x8C8092DC, 0x5EBC7995, 0xDCBE88EE,
+ 0x9C602950, 0xE3376596, 0x5D80E318, 0xAF3AC8C3, 0x8C7EDCC6,
+ 0x3E795E7, 0xDA8987AB, 0x7B7B4E3C, 0x3239CD40, 0x1B527DED,
+ 0xC95DEF29, 0xE40D047D, 0xE53C10C5, 0x5BAF528B, 0xA47921F9,
+ 0x6DCB9B0A, 0x7EA11040, 0xBBEFCCD5, 0x502F33FA, 0xAB5EBE8F,
+ 0xD59C448, 0x8C34FF3D, 0x4A3255A2, 0x4CFFDCB1, 0x3880A182,
+ 0x3499DAAF, 0xA1319450, 0xC550CCE5, 0x51026E2C, 0x73C4F05D,
+ 0x21F5FAAC, 0xE1C31B7D, 0xA390E6E6, 0x7B1582ED, 0xB92B4C3B,
+ 0x41C1128E, 0xF728F655, 0x3BC8AE16, 0x8A2A4E57, 0x9A8A7DE,
+ 0x86065598, 0x4328A574, 0xDBDAFC7D, 0x2C5EE98, 0xEAB5CE80,
+ 0xF7E8F60C, 0x7B4C3C0E, 0xE4A2F720, 0x90330B1D, 0xB6783BF2,
+ 0x48A8C26B, 0x847F1AAC, 0x351DB247, 0x43E84AC5, 0xAF726AA3,
+ 0x5CB4C059, 0x2C5784DE, 0xBA1111FB, 0x9F427968, 0xE41D29D1,
+ 0x2CAA8CA7, 0x764C8B63, 0xBDAA6F10, 0x280277B6, 0xE4A908B6,
+ 0xA6A9783, 0xD0643B01, 0x44FE52AD, 0x60B04A5, 0x194C190E,
+ 0xF73DA669, 0x12EE11C8, 0x2C769D96, 0x694787A4, 0x9FB03623,
+ 0xAC6F837C, 0xFC1E5935, 0x16246787, 0x4F94B817, 0xA3A4281F,
+ 0x1535252D, 0x13F8F1CB, 0xAAF6A508, 0xB38E10E, 0x7A4B238,
+ 0xC6A47410, 0xC864256, 0xF3C25E27, 0x94CE51D4, 0xF4ECAEEA,
+ 0x32684D74, 0x1AC8765, 0xDE6F6313, 0xF8C09409, 0xFB21FD21,
+ 0x6DB586BA, 0x241894B5, 0x65806E1F, 0x4B9D0DE7, 0x32DDDD16,
+ 0x3B16F0B0, 0xB56CAAF0, 0xC533ED5C, 0xADE48431, 0xB5893123,
+ 0xE977699C, 0xB295808B, 0x7A252898, 0xE3748392, 0x687A8ACD,
+ 0xB792504E, 0xBF4E2D8A, 0xB5EC4376, 0x754D9C34, 0x17BE53CC,
+ 0xC817A127, 0x732346E2, 0x29593976, 0x41D6AF89, 0x9072FAEC,
+ 0xC2B22666, 0x16A150DF, 0x4D379A36, 0xE732017F, 0xA6D12516,
+ 0xEA3DB9B5, 0x6E4C766B, 0xCA0ADEF5, 0x75E98F68, 0xC31687C3,
+ 0x62F16F66, 0x6486B129, 0xE237231B, 0xC6653007, 0x2BE06DFC,
+ 0x2BC32DC4, 0x9E3DD054, 0x47AA701E, 0x7741E537, 0xA09F9CD8,
+ 0x9D40881, 0x4F02F58, 0x6A5F31BB, 0x32BBBD23, 0x4520EB05,
+ 0x1DBFDD00, 0x6CCEC7D, 0x48CFC70C, 0xB41FBC13, 0x5B377E90,
+ 0x3B87923D, 0xC09F6D28, 0xC1CF24FB, 0xDD6BE459, 0x8B8BDD37,
+ 0xF7B103C8, 0xC1611360, 0xA8B8FCC8, 0xC16D4E2, 0x6AD23606,
+ 0x951A051, 0x6FC3B984, 0x95876867, 0xA0E1A04C, 0x8267F62C,
+ 0xC4B69588, 0xF53421DF, 0xC348685B, 0x59769E2B, 0x21F0FF90,
+ 0x2B978BB4, 0x3FDA987B, 0x216F4FFF, 0x95C68589, 0x2286F5D8,
+ 0x81E2702D, 0x88E2D01F, 0xE6F6B356, 0x2EA0C31, 0xA5E11CAF,
+ 0xE17DC578, 0x2115A0EA, 0x8DC2B323, 0xEB86957, 0xF3C7BECB,
+ 0xBCD805EC, 0x1121C3F5, 0xE6DEF224, 0x8EA2EE24, 0x2703D7B7,
+ 0x24D73574, 0x4068552C, 0xA85F5B6A, 0x65B563E, 0x4050954C,
+ 0xC7043820, 0x91E4A088, 0x19084C84, 0x7250FB54, 0xC1EC72,
+ 0x9FDB2412, 0x3B78E4E9, 0x588C2D17, 0x345C3232, 0xBC7CCB29,
+ 0xCB5F1F0A, 0x24EDD656, 0x7A9F0605, 0xC2EDB0E5, 0x7F01D20D,
+ 0x8EB211A2, 0x74AC4C1A, 0x37EDEDDB, 0x55B9AFF2, 0x100C4193,
+ 0x43CDF2C3, 0x9C75E7C1, 0xC43ABEFF, 0xB9704827, 0xDD4E6376,
+ 0xEA5FA0D3, 0xC6E14A66, 0xCB163673, 0x9515389, 0x5D3D30C5,
+ 0xD1FF8777, 0xC1347921, 0x21A5BAC, 0xD6CB5F87, 0xC6CE680B,
+ 0x46D1E5FB, 0x9B98BC15, 0x8D1446D6, 0x184659E7, 0xAAC79D5A,
+ 0x773E019E, 0xA1B9F814, 0x933D3D0B, 0x11DB7615, 0xC206A22A,
+ 0xE4EF5BA1, 0xF0EFA194, 0xDE0E6C2B, 0xBE185B42, 0xC28FDE0C,
+ 0xE416DD8A, 0xC636753F, 0xAFD119E, 0xB0198B17, 0x94C4115C,
+ 0x76EDF82A, 0x66818700, 0x6F003485, 0x993DFB2B, 0xF5A1F91E,
+ 0xDAB0080C, 0x7DF290D2, 0x72F65E9B, 0xBC126473, 0xF6050B10,
+ 0xB7380CA, 0x3352530, 0x9A403054, 0xB12581C1, 0x6F8E0370,
+ 0xBB5C1ED1, 0xCE738AFF, 0xE9F605DB, 0xA976BFE4, 0x68C9D107,
+ 0xA2BD1833, 0x545ACCE2, 0x965FBAF, 0x12D998F, 0x2C16B1CD,
+ 0xB20788BF, 0x96AADE36, 0xDF821415, 0xF1EBD654, 0x33F3C413,
+ 0xF2F2A6BF, 0x2DFB0ABA, 0x96845EC5, 0xB24622DD, 0xA83EEE5F,
+ 0x49DF9AF8, 0xB8DCFB8A, 0x16F7643, 0x436EFD30, 0xD90C9F8,
+ 0x9C10CD4E, 0x600CB15B, 0xE686606A, 0x5EC0502C, 0x23B2DCE5,
+ 0xDD5DE18D, 0x235A755C, 0xCB58A693, 0xACBEAFDE, 0xCA201FB5,
+ 0x2AE90380, 0x4F7455EC, 0xCA923312, 0x1BD202DD, 0x2D92B9E3,
+ 0xA2670F18, 0x831728C, 0x77D33D8C, 0x12400BDA, 0x9508A626,
+ 0x9253042B, 0x63C70C8C, 0x5496452F, 0x9237D610, 0x10448F3A,
+ 0x9303C709, 0x660D7EC, 0xDF6750F0, 0xBC4F14F2, 0x8F59720C,
+ 0xEE5AB051, 0xD5EC1228, 0xCC3E04CE, 0xE9E4D3B9, 0x8676FA58,
+ 0xF523860E, 0xF87D9BED, 0x4A6D02C9, 0xC5AD6CF0, 0x65F09045,
+ 0x8C620984, 0xDC40B4CD, 0x4216C291, 0x7A44C04B, 0x1E2B5D31,
+ 0xA0E77B7D, 0x12076C51, 0x22262FA1, 0x483B54F1, 0x2A7EF465,
+ 0xD1395E25, 0xB564369F, 0xC94A47A4, 0xFD678BAA, 0xECEE926A,
+ 0xE41A06AE, 0xE8F293C1, 0x3EB052BE, 0xD0959EF1, 0x93FF1935,
+ 0x4D65E4F1, 0xE87FC1F9, 0x3BD4BB2B, 0xD5F24F5B, 0x54FF70D4,
+ 0x968C7B60, 0x44F9BDE4, 0xF4894BDF, 0x3CFDDF7B, 0xD5CC3F10,
+ 0xD7F952C2, 0xEA3DCB60, 0xEFDAC96A, 0xBBF8F5EB, 0x41526813,
+ 0x714E3D51, 0x5E15A386, 0x1286AF4F, 0x5E1E5A3E, 0x676C9938,
+ 0xA716071B, 0x14D79998, 0x5CB794ED, 0xD815EDED, 0xCB1CA55A,
+ 0x9D6D74FD, 0xBE032C25, 0xF3FE1425, 0xC0CB5217, 0x3931A93F,
+ 0x82DB8222, 0xD8FF587F, 0x5AD4E8AC, 0xBCF00442, 0x4298A961,
+ 0x9F8CC3C2, 0x60E2347F, 0x7E090E, 0x691B735, 0x3D4C4D83,
+ 0x5612B097, 0x7B8DA321, 0x2C28A057, 0xF8FE8901, 0xDA39D0DD,
+ 0x465CE561, 0xA78756, 0x3B771E01, 0xE638B09, 0x201853B5,
+ 0xF934D7D2, 0xBD515A83, 0xC1B5C34E, 0x89159FA9, 0x2DDE3EBE,
+ 0xE27771DB, 0xB5983F05, 0xA3FD869D, 0x8ABA53CB, 0x55C8606C,
+ 0xDAB769C3, 0x4C4C2EAC, 0x18EE2A56, 0x88452A07, 0x9767C386,
+ 0x5C0418D6, 0xF79CA785, 0xF291195D, 0x9B0C286F, 0x68460BED,
+ 0xBF0079E5, 0x9906D932, 0x2F9E5535, 0x2A3C4947, 0xF0E240C3,
+ 0xE835A264, 0x43F38C0, 0x82DAADD8, 0x313612B1, 0x560D56FB,
+ 0x61BD734A, 0x58FD6B36, 0x2C45C40B, 0x55F70159, 0xA21A817D,
+ 0xAAA6FCE, 0x85BFDFB9, 0x1C71DE25, 0x56CB4C2C, 0x50FD91E5,
+ 0xF2340E88, 0x72BD5702, 0xB4FFBD3A, 0x1B35B171, 0xE94A34BD,
+ 0xC4C77575, 0x95B10420, 0x2471BC3F, 0xCB429841, 0x6DC5347F,
+ 0xC93CF782, 0xF1D26B2C, 0xEB2A260F, 0x67C3AE9, 0x34A56A4,
+ 0xF1F3D01B, 0xD8295F22, 0x7F9E5D4A, 0xE4DB3DEA, 0xE1531DCB,
+ 0x2C5FF857, 0x73622A7C, 0xC2691F1, 0xBC622B61, 0xE6A08C89,
+ 0xBA1807D4, 0x43ADBE43, 0xD90D427C, 0xC7A5C24, 0x613ED316,
+ 0xEC810B10, 0x1049BF74, 0x9A14C123, 0xA7B24E7E, 0x73254165,
+ 0x2C54081E, 0x14FF25AA, 0x7A12F3B4, 0xB4DF7C56, 0x89BFE8FC,
+ 0x5D5A04A6, 0xBE007173, 0x829DF863, 0x63E5E57D, 0x58F64C28,
+ 0x31A38144, 0xE843289B, 0xB48DFAF1, 0x2B335C2A, 0xEC3C96CE,
+ 0x255543F6, 0x33F17311, 0x3C60C51A, 0xE5D0D660, 0x5E162559,
+ 0xA2D9416, 0x9DDE4967, 0x28156A65, 0x71650796, 0x74EE54D1,
+ 0x3E8C19F7, 0x797C1E42, 0x2C536DFD, 0x2F3EED4D, 0x3BFC7C95,
+ 0x8EAEF87D, 0x18F5B02A, 0xA3532651, 0x24508E13, 0x280B9049,
+ 0xE4FC61CB, 0x388BA30F, 0xEC180A43, 0xBFDE77A4, 0x98CDB399,
+ 0xF82B586D, 0x38525AE7, 0x9D857BE8, 0xDD939D18, 0xD5CA6EBA,
+ 0xB70DDBA, 0xDFF43867, 0xD06AB2D0, 0xD8C78BB, 0x78F6AE4F,
+ 0x4C9A58CC, 0x9F9AA50E, 0x7D6A3912, 0xD897C7E4, 0x82F5939D,
+ 0xA4A9FFF5, 0x2CB56FDE, 0x3E082D4B, 0xB829DC58, 0xE4515CEB,
+ 0xCE585A33, 0x27901244, 0x68860E95, 0xE156A451, 0x9E351FE0,
+ 0xC69BD757, 0x4B2C4A2B, 0xD5DE5A91, 0x3557B0DE, 0x99E910B0,
+ 0x975BE470, 0xDB4DE130, 0xE4C6DA1D, 0xC2BC058F, 0x37544906,
+ 0x12CC200E, 0x54569133, 0x6586FC03, 0xF183C0CF, 0x642583E,
+ 0xFBE882CD, 0x8A098C35, 0xE8300988, 0xFE835E55, 0xEA74FD24,
+ 0xF3127AB2, 0xEE8379F2, 0x3F136FD2, 0x472AA942, 0x3BC1A7D7,
+ 0x5B6A8A98, 0xF039CCF3, 0x5E55425B, 0x3F801B4, 0x44556FB4,
+ 0xCC966D37, 0x56E32B90, 0x2BCDA2E5, 0xC70F1125, 0x8C2A015C,
+ 0x3D37FCA7, 0x2118A4EF, 0xCE051A9C, 0xCB84DCB9, 0x8451C9E0,
+ 0x4BDB1900, 0x8FC71D5D, 0xF61FD749, 0xA696D2E0, 0x6EED502A,
+ 0xB345CE8B, 0x76FCDA8E, 0xBE4A45F8, 0x8375E9E7, 0x625FF29B,
+ 0xCEC61240, 0x3876B21D, 0xBA8C8F59, 0x8CD169C6, 0x9F82251F,
+ 0x2E6EC495, 0x99319E, 0xB0160B46, 0x8B77EDD8, 0x6217902B,
+ 0x76FA6AD0, 0xB541F2BC, 0x961EA91C, 0x6F554C1F, 0xBD92328D,
+ 0xA9C077FD, 0x90A5311C, 0xEFE9B1FB, 0x9C84AA8C, 0x812517C3,
+ 0xFE71D7F4, 0xC4F6A5BF, 0x8B75A262, 0xC726EB36, 0x5F803035,
+ 0xCECDE2B7, 0xF61152A8, 0x78557ED1, 0x50F3BB55, 0xDD830290,
+ 0xB125B524, 0xC8683B0D, 0xE5FD573B, 0x48B13066, 0x62AE556E,
+ 0x5A637C89, 0x498D69F, 0x3F3A5BE5, 0xB98B86D7, 0x20CF4AF4,
+ 0xA3E55E7D, 0xEE93FC6F, 0xCCA95763, 0x5B3C5706, 0x8342B013,
+ 0xA0C7BDB9, 0x83D686E4, 0x6934B64, 0x324D75C3, 0x9A100C81,
+ 0x72E7E9AE, 0xC729A8AC, 0x9E8489E0, 0xFE5BC233, 0x64709AE9,
+ 0x113437BC, 0x296DEBC0, 0xC4376603, 0x9F0CD7EE, 0x6412AB97,
+ 0x3EECEFCD, 0x62DCD50, 0x15DFF1, 0xEEFDCF8E, 0x119849C1,
+ 0xDAAC93FF, 0xD531AF57, 0x82A10F47, 0xD55B7A97, 0x2F3A268B,
+ 0x4F1CC181, 0xAE01C1AC, 0xF3CF6F61, 0xE8BDAED5, 0x7397FD99,
+ 0xDD36A03C, 0x9BAED7C3, 0x51404903, 0xB9867B61, 0x3880A4FD,
+ 0x42B90A49, 0xA94696C1, 0x546DEA1D, 0xEE73A3DE, 0x1A4BAC37,
+ 0xBC6AF7AE, 0x7DD5B57B, 0xD2F121F, 0xD2BCCA1E, 0xD5DC4753,
+ 0xA135C08C, 0x78E97831, 0x9B91C00B, 0xFFF2C044, 0x147B797F,
+ 0x299CFB60, 0x71083BB, 0xB39A6C4F, 0x4814E3E1, 0xBD246AB0,
+ 0xBCD61250, 0x2D0870, 0xC660435C, 0xCA11681E, 0xADA4C80E,
+ 0x790C8875, 0x8C4F0D08, 0x48D90C74, 0xE874E9AA, 0xA8013EE8,
+ 0xB2D23A7A, 0xAF73A16E, 0x2485512C, 0x698E0CB2, 0x2FF566C9,
+ 0xC1B0C3C6, 0x2BE17C0E, 0xC42C3907, 0xD8A2EA94, 0x8991D24C,
+ 0x19B939F1, 0xF936F8B3, 0xA72D7EF1, 0x97EED001, 0xBF9C5156,
+ 0x75F08A67, 0x9AFD5756, 0x5D9D359C, 0xF905B7EC, 0x2B1553E1,
+ 0x9E0FD4E1, 0x8DC4814C, 0x89F28E6D, 0x14174915, 0x1F3A4217,
+ 0xA8F367F9, 0x93EE87C5, 0xAD70C6D8, 0xF04D465C, 0xE403D72B,
+ 0xA686EC0F, 0xCD3A5728, 0xA1BD007, 0x9E21E401, 0xAE8517CF,
+ 0x6DDB79FC, 0x8CB2C475, 0x6F71544, 0xBEAC91CF, 0x4739DC4E,
+ 0x6CF4F788, 0x36BAD9AC, 0xF23568D4, 0x250BAB0A, 0x4633384F,
+ 0x54F6F251, 0x454F9605, 0xCB1A346, 0x632E207F, 0x3017539C,
+ 0x174A33ED, 0xBDCFD2DE, 0xC17F3D39, 0x17B8A9A2, 0xC267FB51,
+ 0x9322387D, 0x348760C, 0x3C14D7E0, 0xE4E4254E, 0xCA72AA41,
+ 0xB6102ED3, 0x6317A3F, 0xD3B6B9F7, 0xA8C71BB7, 0x6E452957,
+ 0x3F896E32, 0xE38A4A58, 0x9893F432, 0x110A21D4, 0xE835FEBE,
+ 0x90F51080, 0xD0AC5AF, 0x4FCB9903, 0xFE547785, 0x144B285D,
+ 0xD0ECC753, 0xAE503BA4, 0x57CEAABC, 0x95713FE6, 0x5B0F4F86,
+ 0xD94BD751, 0x4017F139, 0xF60F5E1D, 0xB9A63351, 0xF7F94F6A,
+ 0x7E556ECC, 0xBFDB8642, 0xB70D07D, 0x351BEA77, 0xD1F3CAD,
+ 0xA3D7EF4D, 0x1EAA28E3, 0x98A2EA79, 0xD8647392, 0x1B896804,
+ 0x35CA6A08, 0x305258F, 0xE58BD955, 0xABCB6278, 0x87CF1146,
+ 0x13145966, 0x45BB55CD, 0x818AA368, 0xA027F11F, 0x64C427A3,
+ 0xEC831B99, 0xF2BD53F9, 0x7FDA7301, 0x35BE80D4, 0x5256E6FB,
+ 0xC97D33AE, 0x30921709, 0xC2724BEC, 0x78F5436F, 0x4F5749CD,
+ 0x9007F551, 0x327C31C0, 0x89782D13, 0x119AD125, 0xB1071A01,
+ 0x63100C70, 0x83120035, 0xA8E2E403, 0x7E213FA3, 0xBF06AAC4,
+ 0xBA68C4D9, 0x4B568927, 0x1DDD40F, 0x10FC10E8, 0xBBD7230A,
+ 0x96475640, 0x8C8E6EC1, 0x44A1134A, 0xEF0F40F0, 0x51E2A5E0,
+ 0x61AE6D65, 0x9DE72FD6, 0xB1711336, 0x90BEB84, 0xD610EFC6,
+ 0x3D231F91, 0xB5885164, 0x2CB2112C, 0x36F50789, 0x3DEF2AB9,
+ 0x1D9DC1DA, 0xA37DB070, 0x2AA92EB, 0x2D57ED6E, 0xD6E2C2CD,
+ 0xB78FC54C, 0x767A565E, 0x1D1F5AAE, 0x89F256DB, 0x716A97D,
+ 0x1344431D, 0xFAF015FB, 0xFED59649, 0xC479882A, 0xEEFC3D1E,
+ 0x840AE162, 0xD963A347, 0x75462C25, 0xDA990E07, 0x9A57DE31,
+ 0x74A35F20, 0x91852CD6, 0x3F16DE14, 0x5FA6A255, 0x47D00F85,
+ 0x1B4836C9, 0xC73D0290, 0xE301026B, 0x592068D6, 0x7C32A301,
+ 0x3A3C04C4, 0xB5BD3BAF, 0xB8C3BF60, 0x76723A1B, 0xD05BC35E,
+ 0x7679021C, 0x6298096, 0x590BA59C, 0xBB30A2F6, 0xE5F6B06C,
+ 0x21BD2A9E, 0xAC68D7DA, 0xEDA2ED5A, 0xA10E60FA, 0xABDBF569,
+ 0x17F5868E, 0x82AA8505, 0x384BD8FC, 0x68DC2746, 0x8F029C0D,
+ 0x3755EB11, 0xAEF4BB79, 0x453B87BA, 0x9926977F, 0x1FA1B806,
+ 0xC905618, 0x9BFE8E92, 0xF6F68A5A, 0xAA955D92, 0x44F57A4A,
+ 0x2186E272, 0x62EB01DA, 0x85A2D502, 0xB087955D, 0x26FF2BA0,
+ 0x8D462C04, 0xE024573B, 0x609CDBD7, 0xA99B9D19, 0xFEEB3F60,
+ 0x12903A0D, 0x46480C6, 0xDD0BD1B9, 0x6C60C43, 0x5E11A4FE,
+ 0x935E9E58, 0x8A7F6D33, 0xA505132D, 0xBB2E3E12, 0xF48633F4,
+ 0xF3BA8CF7, 0xC25D4EDD, 0x788672B8, 0xB2812608, 0xACB3A62,
+ 0x2EEB679A, 0x443A71B9, 0xC42F4B12, 0xD28B3482, 0x5571FA8A,
+ 0x5C0B3D55, 0x8B8619C6, 0xF564F10C, 0xD9A7C914, 0xFBD1EF46,
+ 0xCEABC573, 0xEC609D28, 0x5839413B, 0x5019E901, 0x248FFF30,
+ 0x7BFFB801, 0x7FD46584, 0x43702812, 0x3A5A0880, 0x7E3E9EDA,
+ 0xCA4623E3, 0x2FB87A70, 0xFE70D956, 0xCE9EB3E6, 0x9A2CD2F1,
+ 0x92EFB0C8, 0xC7E23873, 0x53B63A86, 0xB9D93548, 0x3C022B2,
+ 0xCF4F22A6, 0x981E70BC, 0x4A05F3AB, 0xD763E93B, 0x6EAF767D,
+ 0x4162629D, 0xD82A25E7, 0x6CDD19A3, 0x13524F68, 0xE5F23FDC,
+ 0xB37F311F, 0x35FD43B6, 0x36626469, 0x1E409CF6, 0xE4C04F9D,
+ 0xC1B58001, 0xD131078F, 0x9DE279A, 0x80B62212, 0x526405DD,
+ 0xC17777C1, 0x7045FCDC, 0x53862AEC, 0x5D583056, 0xEB532222,
+ 0x5837EA32, 0x719C06A4, 0x43D4F131, 0x577C6DDB, 0x9E5815A7,
+ 0x8189DDD9, 0x170F154F, 0xEF813B20, 0x4DD83A53, 0xB09A28FD,
+ 0x8D0DBED5, 0x1836596D, 0xC5BB2696, 0xA69FC859, 0xD6FF5E0D,
+ 0xCCC65761, 0xC818C6F7, 0x7A25F980, 0xF949133, 0xC515C093,
+ 0xA8AD04B5, 0x6768AC1C, 0xB5BE2C4A, 0x4F04616F, 0xBD28E4E3,
+ 0x4CCA6347, 0x5F61C031
+};
+
+/* The source data is random across the q31_t range. Accessing it by word should
+ remain random. */
+q15_t * transform_fft_q15_inputs = (q15_t *) transform_fft_q31_inputs;
+
+q15_t dct4_transform_fft_q15_inputs[TRANSFORM_MAX_FFT_LEN * 2] =
+{
+ 0x0000, 0x2d5c, 0x54d5, 0x714b, 0x7f0d, 0x7c51, 0x6972, 0x48e4,
+ 0x1edf, 0xf0da, 0xc4cb, 0xa06c, 0x8874, 0x8001, 0x882a, 0x9fe2,
+ 0xc413, 0xf00c, 0x1e16, 0x4839, 0x68fc, 0x7c1f, 0x7f25, 0x71ab,
+ 0x5570, 0x2e1e, 0x00cf, 0xd367, 0xabc7, 0x8f16, 0x810d, 0x837e,
+ 0x9619, 0xb672, 0xe057, 0x0e58, 0x3a7c, 0x5f0a, 0x7741, 0x7ffe,
+ 0x781e, 0x60a7, 0x3ca4, 0x10c2, 0xe2b4, 0xb873, 0x977b, 0x8415,
+ 0x80c3, 0x8df6, 0xa9f6, 0xd121, 0xfe61, 0x2bd6, 0x539c, 0x7087,
+ 0x7ed8, 0x7cb1, 0x6a5c, 0x4a38, 0x2072, 0xf277, 0xc63d, 0xa182,
+ 0x890b, 0x8005, 0x879b, 0x9ed2, 0xc2a6, 0xee70, 0x1c81, 0x46e0,
+ 0x680c, 0x7bb7, 0x7f53, 0x7268, 0x56a3, 0x2fa0, 0x026f, 0xd4ed,
+ 0xad02, 0x8fdc, 0x8145, 0x8321, 0x9531, 0xb51f, 0xdec5, 0x0cba,
+ 0x390a, 0x5df1, 0x76a8, 0x7ff7, 0x78ab, 0x61b5, 0x3e10, 0x125e,
+ 0xe449, 0xb9cd, 0x986d, 0x847f, 0x8099, 0x8d3c, 0xa8c4, 0xcf9f,
+ 0xfcc2, 0x2a4f, 0x5260, 0x6fbf, 0x7e9d, 0x7d0c, 0x6b40, 0x4b89,
+ 0x2203, 0xf414, 0xc7b1, 0xa29c, 0x89a7, 0x800e, 0x8710, 0x9dc5,
+ 0xc13a, 0xecd5, 0x1aec, 0x4585, 0x6718, 0x7b4a, 0x7f7b, 0x7320,
+ 0x57d3, 0x3121, 0x040e, 0xd675, 0xae40, 0x90a7, 0x8182, 0x82c8,
+ 0x944f, 0xb3d0, 0xdd35, 0x0b1d, 0x3795, 0x5cd5, 0x760a, 0x7fec,
+ 0x7933, 0x62bf, 0x3f7a, 0x13f8, 0xe5df, 0xbb2a, 0x9964, 0x84ef,
+ 0x8073, 0x8c86, 0xa796, 0xce20, 0xfb23, 0x28c6, 0x5120, 0x6ef2,
+ 0x7e5e, 0x7d63, 0x6c21, 0x4cd7, 0x2393, 0xf5b2, 0xc927, 0xa3ba,
+ 0x8a47, 0x801c, 0x868b, 0x9cbd, 0xbfd1, 0xeb3b, 0x1955, 0x4427,
+ 0x6620, 0x7ad7, 0x7f9d, 0x73d3, 0x5900, 0x329f, 0x05ad, 0xd7ff,
+ 0xaf81, 0x9176, 0x81c4, 0x8274, 0x9370, 0xb284, 0xdba6, 0x097f,
+ 0x361d, 0x5bb5, 0x7566, 0x7fda, 0x79b6, 0x63c6, 0x40e2, 0x1592,
+ 0xe777, 0xbc8a, 0x9a5e, 0x8564, 0x8053, 0x8bd5, 0xa66b, 0xcca2,
+ 0xf983, 0x273c, 0x4fdd, 0x6e21, 0x7e19, 0x7db3, 0x6cfd, 0x4e21,
+ 0x2521, 0xf750, 0xca9f, 0xa4dc, 0x8aed, 0x8030, 0x860a, 0x9bb9,
+ 0xbe6b, 0xe9a1, 0x17bd, 0x42c6, 0x6523, 0x7a60, 0x7fbb, 0x7481,
+ 0x5a29, 0x341c, 0x074c, 0xd98a, 0xb0c6, 0x924a, 0x820b, 0x8226,
+ 0x9297, 0xb13b, 0xda18, 0x07e0, 0x34a4, 0x5a92, 0x74bf, 0x7fc4,
+ 0x7a34, 0x64c8, 0x4247, 0x172b, 0xe90f, 0xbdec, 0x9b5d, 0x85dd,
+ 0x8038, 0x8b29, 0xa544, 0xcb27, 0xf7e5, 0x25af, 0x4e97, 0x6d4b,
+ 0x7dcf, 0x7dff, 0x6dd5, 0x4f69, 0x26ae, 0xf8ef, 0xcc1a, 0xa601,
+ 0x8b97, 0x8049, 0x858f, 0x9ab9, 0xbd08, 0xe809, 0x1625, 0x4162,
+ 0x6422, 0x79e4, 0x7fd3, 0x752b, 0x5b4e, 0x3596, 0x08eb, 0xdb17,
+ 0xb20e, 0x9322, 0x8258, 0x81dd, 0x91c1, 0xaff5, 0xd88c, 0x0641,
+ 0x3328, 0x596a, 0x7412, 0x7fa8, 0x7aad, 0x65c6, 0x43a9, 0x18c3,
+ 0xeaa8, 0xbf51, 0x9c5f, 0x865c, 0x8023, 0x8a82, 0xa421, 0xc9ad,
+ 0xf646, 0x2422, 0x4d4d, 0x6c70, 0x7d80, 0x7e46, 0x6ea8, 0x50ad,
+ 0x2839, 0xfa8e, 0xcd97, 0xa72b, 0x8c46, 0x8067, 0x8518, 0x99bd,
+ 0xbba7, 0xe671, 0x148b, 0x3ffb, 0x631e, 0x7963, 0x7fe6, 0x75d0,
+ 0x5c6f, 0x370f, 0x0a89, 0xdca6, 0xb359, 0x93ff, 0x82a9, 0x8199,
+ 0x90f0, 0xaeb2, 0xd702, 0x04a2, 0x31aa, 0x583f, 0x7360, 0x7f88,
+ 0x7b21, 0x66c0, 0x4508, 0x1a5a, 0xec42, 0xc0b9, 0x9d66, 0x86e0,
+ 0x8012, 0x89e0, 0xa302, 0xc836, 0xf4a8, 0x2292, 0x4c01, 0x6b91,
+ 0x7d2c, 0x7e87, 0x6f76, 0x51ee, 0x29c3, 0xfc2d, 0xcf16, 0xa858,
+ 0x8cfa, 0x808b, 0x84a7, 0x98c5, 0xba4a, 0xe4da, 0x12f1, 0x3e92,
+ 0x6215, 0x78dc, 0x7ff4, 0x7670, 0x5d8c, 0x3884, 0x0c27, 0xde36,
+ 0xb4a7, 0x94e0, 0x8300, 0x815a, 0x9024, 0xad73, 0xd579, 0x0303,
+ 0x302a, 0x5711, 0x72aa, 0x7f61, 0x7b90, 0x67b5, 0x4664, 0x1bf0,
+ 0xeddd, 0xc223, 0x9e71, 0x8769, 0x8007, 0x8942, 0xa1e6, 0xc6c2,
+ 0xf30b, 0x2102, 0x4ab1, 0x6aae, 0x7cd2, 0x7ec3, 0x7040, 0x532b,
+ 0x2b4b, 0xfdcc, 0xd097, 0xa988, 0x8db3, 0x80b4, 0x843a, 0x97d1,
+ 0xb8ef, 0xe345, 0x1155, 0x3d27, 0x6108, 0x7851, 0x7ffc, 0x770b,
+ 0x5ea6, 0x39f8, 0x0dc4, 0xdfc7, 0xb5f8, 0x95c5, 0x835c, 0x8120,
+ 0x8f5d, 0xac37, 0xd3f2, 0x0164, 0x2ea8, 0x55de, 0x71ef, 0x7f36,
+ 0x7bfa, 0x68a7, 0x47be, 0x1d85, 0xef79, 0xc390, 0x9f80, 0x87f6,
+ 0x8001, 0x88a9, 0xa0cf, 0xc54f, 0xf16e, 0x1f70, 0x495e, 0x69c6,
+ 0x7c74, 0x7efa, 0x7106, 0x5465, 0x2cd1, 0xff6c, 0xd219, 0xaabc,
+ 0x8e70, 0x80e2, 0x83d3, 0x96e2, 0xb796, 0xe1b1, 0x0fb9, 0x3bb8,
+ 0x5ff7, 0x77c1, 0x7fff, 0x77a1, 0x5fbc, 0x3b69, 0x0f61, 0xe15a,
+ 0xb74d, 0x96af, 0x83bd, 0x80ec, 0x8e9a, 0xaaff, 0xd26d, 0xffc5,
+ 0x2d24, 0x54a8, 0x712f, 0x7f05, 0x7c5f, 0x6994, 0x4914, 0x1f19,
+ 0xf115, 0xc500, 0xa093, 0x8889, 0x8001, 0x8816, 0x9fbb, 0xc3df,
+ 0xefd1, 0x1ddc, 0x4808, 0x68da, 0x7c10, 0x7f2c, 0x71c6, 0x559c,
+ 0x2e55, 0x010a, 0xd39e, 0xabf4, 0x8f32, 0x8115, 0x8371, 0x95f7,
+ 0xb641, 0xe01e, 0x0e1d, 0x3a48, 0x5ee2, 0x772c, 0x7ffd, 0x7832,
+ 0x60cd, 0x3cd8, 0x10fd, 0xe2ee, 0xb8a4, 0x979e, 0x8423, 0x80bd,
+ 0x8ddb, 0xa9ca, 0xd0ea, 0xfe26, 0x2b9f, 0x536f, 0x706b, 0x7ed0,
+ 0x7cbf, 0x6a7c, 0x4a68, 0x20ab, 0xf2b2, 0xc672, 0xa1aa, 0x8921,
+ 0x8006, 0x8787, 0x9eab, 0xc272, 0xee36, 0x1c48, 0x46af, 0x67ea,
+ 0x7ba8, 0x7f59, 0x7282, 0x56cf, 0x2fd7, 0x02aa, 0xd525, 0xad2f,
+ 0x8ff9, 0x814d, 0x8314, 0x9511, 0xb4ef, 0xde8c, 0x0c80, 0x38d5,
+ 0x5dc9, 0x7692, 0x7ff6, 0x78bf, 0x61db, 0x3e44, 0x1298, 0xe483,
+ 0xb9ff, 0x9890, 0x848f, 0x8093, 0x8d22, 0xa899, 0xcf68, 0xfc87,
+ 0x2a17, 0x5232, 0x6fa2, 0x7e95, 0x7d19, 0x6b61, 0x4bb8, 0x223c,
+ 0xf44f, 0xc7e6, 0xa2c5, 0x89bd, 0x8010, 0x86fd, 0x9d9f, 0xc107,
+ 0xec9b, 0x1ab2, 0x4553, 0x66f5, 0x7b3a, 0x7f80, 0x7339, 0x57fe,
+ 0x3157, 0x0449, 0xd6ad, 0xae6d, 0x90c4, 0x818b, 0x82bc, 0x942f,
+ 0xb3a0, 0xdcfc, 0x0ae2, 0x375f, 0x5cad, 0x75f3, 0x7fe9, 0x7946,
+ 0x62e5, 0x3fae, 0x1433, 0xe619, 0xbb5c, 0x9987, 0x84ff, 0x806f,
+ 0x8c6d, 0xa76b, 0xcde9, 0xfae7, 0x288e, 0x50f2, 0x6ed5, 0x7e54,
+ 0x7d6e, 0x6c41, 0x4d06, 0x23cc, 0xf5ed, 0xc95c, 0xa3e3, 0x8a5f,
+ 0x801f, 0x8678, 0x9c98, 0xbf9e, 0xeb00, 0x191b, 0x43f5, 0x65fc,
+ 0x7ac7, 0x7fa2, 0x73ec, 0x592a, 0x32d6, 0x05e8, 0xd837, 0xafaf,
+ 0x9194, 0x81ce, 0x8269, 0x9351, 0xb255, 0xdb6d, 0x0944, 0x35e8,
+ 0x5b8c, 0x754f, 0x7fd8, 0x79c8, 0x63eb, 0x4115, 0x15cc, 0xe7b1,
+ 0xbcbc, 0x9a82, 0x8575, 0x804f, 0x8bbd, 0xa641, 0xcc6c, 0xf948,
+ 0x2703, 0x4faf, 0x6e03, 0x7e0f, 0x7dbf, 0x6d1c, 0x4e50, 0x255a,
+ 0xf78b, 0xcad5, 0xa505, 0x8b05, 0x8033, 0x85f8, 0x9b94, 0xbe39,
+ 0xe967, 0x1783, 0x4293, 0x64ff, 0x7a4f, 0x7fbf, 0x749a, 0x5a52,
+ 0x3452, 0x0787, 0xd9c3, 0xb0f4, 0x9268, 0x8216, 0x821b, 0x9278,
+ 0xb10c, 0xd9e0, 0x07a5, 0x346e, 0x5a68, 0x74a6, 0x7fc0, 0x7a46,
+ 0x64ec, 0x4279, 0x1765, 0xe949, 0xbe1f, 0x9b81, 0x85ef, 0x8035,
+ 0x8b11, 0xa51b, 0xcaf1, 0xf7aa, 0x2577, 0x4e68, 0x6d2c, 0x7dc4,
+ 0x7e0a, 0x6df3, 0x4f97, 0x26e6, 0xf92a, 0xcc50, 0xa62c, 0x8bb0,
+ 0x804d, 0x857d, 0x9a95, 0xbcd6, 0xe7cf, 0x15ea, 0x412f, 0x63fe,
+ 0x79d2, 0x7fd6, 0x7543, 0x5b77, 0x35cc, 0x0925, 0xdb50, 0xb23d,
+ 0x9341, 0x8263, 0x81d3, 0x91a3, 0xafc7, 0xd854, 0x0606, 0x32f2,
+ 0x5940, 0x73f9, 0x7fa4, 0x7abe, 0x65ea, 0x43db, 0x18fd, 0xeae2,
+ 0xbf84, 0x9c85, 0x866f, 0x8020, 0x8a6b, 0xa3f8, 0xc978, 0xf60b,
+ 0x23e9, 0x4d1e, 0x6c51, 0x7d74, 0x7e4f, 0x6ec5, 0x50db, 0x2871,
+ 0xfac9, 0xcdcd, 0xa755, 0x8c60, 0x806c, 0x8508, 0x9999, 0xbb75,
+ 0xe637, 0x1451, 0x3fc8, 0x62f8, 0x7950, 0x7fe8, 0x75e7, 0x5c98,
+ 0x3744, 0x0ac4, 0xdcdf, 0xb388, 0x941e, 0x82b5, 0x8190, 0x90d3,
+ 0xae85, 0xd6ca, 0x0467, 0x3173, 0x5814, 0x7347, 0x7f82, 0x7b31,
+ 0x66e3, 0x453a, 0x1a94, 0xec7d, 0xc0ec, 0x9d8c, 0x86f3, 0x8011,
+ 0x89c9, 0xa2d9, 0xc801, 0xf46d, 0x2259, 0x4bd1, 0x6b71, 0x7d1f,
+ 0x7e90, 0x6f93, 0x521b, 0x29fb, 0xfc68, 0xcf4c, 0xa883, 0x8d14,
+ 0x8090, 0x8497, 0x98a2, 0xba18, 0xe4a1, 0x12b6, 0x3e5f, 0x61ef,
+ 0x78c9, 0x7ff5, 0x7686, 0x5db5, 0x38b9, 0x0c61, 0xde6f, 0xb4d7,
+ 0x9500, 0x830d, 0x8152, 0x9007, 0xad46, 0xd541, 0x02c8, 0x2ff3,
+ 0x56e5, 0x7290, 0x7f5c, 0x7ba0, 0x67d8, 0x4696, 0x1c2a, 0xee17,
+ 0xc257, 0x9e97, 0x877d, 0x8006, 0x892c, 0xa1be, 0xc68d, 0xf2d0,
+ 0x20c8, 0x4a81, 0x6a8d, 0x7cc5, 0x7ecc, 0x705d, 0x5358, 0x2b82,
+ 0xfe08, 0xd0ce, 0xa9b4, 0x8dce, 0x80ba, 0x842b, 0x97af, 0xb8bd,
+ 0xe30b, 0x111b, 0x3cf3, 0x60e1, 0x783d, 0x7ffd, 0x7721, 0x5ece,
+ 0x3a2d, 0x0dff, 0xe000, 0xb629, 0x95e6, 0x836a, 0x8119, 0x8f41,
+ 0xac0b, 0xd3bb, 0x0129, 0x2e71, 0x55b2, 0x71d4, 0x7f2f, 0x7c09,
+ 0x68c9, 0x47ef, 0x1dbf, 0xefb3, 0xc3c4, 0x9fa7, 0x880b, 0x8001,
+ 0x8894, 0xa0a7, 0xc51b, 0xf133, 0x1f36, 0x492d, 0x69a5, 0x7c66,
+ 0x7f02, 0x7121, 0x5492, 0x2d08, 0xffa7, 0xd251, 0xaae8, 0x8e8b,
+ 0x80e9, 0x83c5, 0x96c1, 0xb766, 0xe177, 0x0f7f, 0x3b84, 0x5fd0,
+ 0x77ac, 0x7fff, 0x77b6, 0x5fe3, 0x3b9d, 0x0f9b, 0xe193, 0xb77d,
+ 0x96d1, 0x83cc, 0x80e5, 0x8e7e, 0xaad3, 0xd236, 0xff8a, 0x2ced,
+ 0x547c, 0x7114, 0x7efe, 0x7c6d, 0x69b5, 0x4945, 0x1f52, 0xf150,
+ 0xc534, 0xa0ba, 0x889e, 0x8001, 0x8801, 0x9f94, 0xc3ab, 0xef97,
+ 0x1da3, 0x47d7, 0x68b8, 0x7c02, 0x7f33, 0x71e1, 0x55c8, 0x2e8c,
+ 0x0145, 0xd3d6, 0xac20, 0x8f4e, 0x811c, 0x8363, 0x95d6, 0xb611,
+ 0xdfe5, 0x0de2, 0x3a13, 0x5eba, 0x7716, 0x7ffd, 0x7847, 0x60f4,
+ 0x3d0c, 0x1137, 0xe327, 0xb8d5, 0x97c0, 0x8432, 0x80b7, 0x8dc1,
+ 0xa99f, 0xd0b3, 0xfdeb, 0x2b67, 0x5342, 0x704f, 0x7ec8, 0x7ccc,
+ 0x6a9d, 0x4a98, 0x20e4, 0xf2ed, 0xc6a6, 0xa1d2, 0x8937, 0x8007,
+ 0x8773, 0x9e85, 0xc23e, 0xedfb, 0x1c0e, 0x467e, 0x67c7, 0x7b98,
+ 0x7f5e, 0x729d, 0x56fa, 0x300e, 0x02e5, 0xd55c, 0xad5c, 0x9015,
+ 0x8156, 0x8307, 0x94f0, 0xb4c0, 0xde53, 0x0c45, 0x38a0, 0x5da1,
+ 0x767b, 0x7ff5, 0x78d2, 0x6201, 0x3e78, 0x12d3, 0xe4bd, 0xba30,
+ 0x98b3, 0x849e, 0x808e, 0x8d08, 0xa86e, 0xcf32, 0xfc4c, 0x29df,
+ 0x5205, 0x6f85, 0x7e8c, 0x7d25, 0x6b81, 0x4be8, 0x2275, 0xf48a,
+ 0xc81b, 0xa2ed, 0x89d4, 0x8011, 0x86ea, 0x9d7a, 0xc0d3, 0xec60,
+ 0x1a78, 0x4522, 0x66d2, 0x7b2a, 0x7f85, 0x7353, 0x5829, 0x318e,
+ 0x0484, 0xd6e5, 0xae9b, 0x90e1, 0x8194, 0x82b0, 0x940f, 0xb371,
+ 0xdcc3, 0x0aa7, 0x372a, 0x5c84, 0x75dc, 0x7fe7, 0x7959, 0x630a,
+ 0x3fe1, 0x146d, 0xe653, 0xbb8e, 0x99aa, 0x8510, 0x806a, 0x8c53,
+ 0xa741, 0xcdb3, 0xfaac, 0x2856, 0x50c4, 0x6eb7, 0x7e4b, 0x7d7a,
+ 0x6c60, 0x4d35, 0x2404, 0xf628, 0xc992, 0xa40c, 0x8a76, 0x8021,
+ 0x8666, 0x9c72, 0xbf6b, 0xeac6, 0x18e1, 0x43c2, 0x65d8, 0x7ab6,
+ 0x7fa6, 0x7405, 0x5955, 0x330c, 0x0623, 0xd86f, 0xafdd, 0x91b2,
+ 0x81d8, 0x825e, 0x9332, 0xb226, 0xdb34, 0x0909, 0x35b2, 0x5b63,
+ 0x7537, 0x7fd5, 0x79db, 0x6410, 0x4148, 0x1607, 0xe7eb, 0xbcee,
+ 0x9aa6, 0x8586, 0x804b, 0x8ba4, 0xa617, 0xcc36, 0xf90d, 0x26cb,
+ 0x4f80, 0x6de4, 0x7e05, 0x7dca, 0x6d3b, 0x4e7f, 0x2592, 0xf7c6,
+ 0xcb0b, 0xa52f, 0x8b1d, 0x8037, 0x85e6, 0x9b6f, 0xbe06, 0xe92d,
+ 0x1749, 0x4261, 0x64db, 0x7a3d, 0x7fc2, 0x74b2, 0x5a7c, 0x3488,
+ 0x07c2, 0xd9fb, 0xb123, 0x9287, 0x8220, 0x8211, 0x9259, 0xb0de,
+ 0xd9a7, 0x076a, 0x3438, 0x5a3e, 0x748e, 0x7fbd, 0x7a57, 0x6511,
+ 0x42ac, 0x179f, 0xe983, 0xbe51, 0x9ba6, 0x8601, 0x8032, 0x8af9,
+ 0xa4f1, 0xcabb, 0xf76f, 0x253e, 0x4e39, 0x6d0d, 0x7db9, 0x7e14,
+ 0x6e11, 0x4fc5, 0x271f, 0xf965, 0xcc86, 0xa656, 0x8bc9, 0x8051,
+ 0x856c, 0x9a70, 0xbca3, 0xe795, 0x15b0, 0x40fc, 0x63d9, 0x79c0,
+ 0x7fd9, 0x755a, 0x5ba0, 0x3602, 0x0960, 0xdb89, 0xb26c, 0x9360,
+ 0x826e, 0x81c9, 0x9185, 0xaf99, 0xd81c, 0x05cb, 0x32bb, 0x5916,
+ 0x73e0, 0x7fa0, 0x7acf, 0x660d, 0x440d, 0x1937, 0xeb1d, 0xbfb7,
+ 0x9caa, 0x8681, 0x801e, 0x8a53, 0xa3cf, 0xc942, 0xf5d0, 0x23b0,
+ 0x4cef, 0x6c31, 0x7d69, 0x7e59, 0x6ee3, 0x5108, 0x28a9, 0xfb04,
+ 0xce04, 0xa780, 0x8c79, 0x8071, 0x84f7, 0x9976, 0xbb43, 0xe5fd,
+ 0x1416, 0x3f95, 0x62d3, 0x793d, 0x7feb, 0x75fe, 0x5cc0, 0x3779,
+ 0x0aff, 0xdd18, 0xb3b8, 0x943e, 0x82c2, 0x8186, 0x90b6, 0xae57,
+ 0xd692, 0x042c, 0x313d, 0x57ea, 0x732d, 0x7f7d, 0x7b41, 0x6706,
+ 0x456b, 0x1ace, 0xecb7, 0xc120, 0x9db2, 0x8706, 0x800f, 0x89b2,
+ 0xa2b1, 0xc7cc, 0xf433, 0x2220, 0x4ba1, 0x6b51, 0x7d13, 0x7e99,
+ 0x6fb0, 0x5248, 0x2a32, 0xfca3, 0xcf83, 0xa8ae, 0x8d2e, 0x8096,
+ 0x8487, 0x987f, 0xb9e6, 0xe467, 0x127c, 0x3e2b, 0x61c9, 0x78b5,
+ 0x7ff7, 0x769c, 0x5ddd, 0x38ee, 0x0c9c, 0xdea8, 0xb507, 0x9521,
+ 0x831a, 0x8149, 0x8feb, 0xad19, 0xd50a, 0x028d, 0x2fbc, 0x56ba,
+ 0x7275, 0x7f56, 0x7baf, 0x67fa, 0x46c7, 0x1c64, 0xee52, 0xc28b,
+ 0x9ebe, 0x8791, 0x8005, 0x8916, 0xa196, 0xc658, 0xf295, 0x208f,
+ 0x4a51, 0x6a6c, 0x7cb8, 0x7ed4, 0x7079, 0x5385, 0x2bba, 0xfe43,
+ 0xd104, 0xa9df, 0x8de8, 0x80c0, 0x841c, 0x978d, 0xb88c, 0xe2d2,
+ 0x10e0, 0x3cbf, 0x60bb, 0x7828, 0x7ffe, 0x7736, 0x5ef5, 0x3a61,
+ 0x0e39, 0xe03a, 0xb659, 0x9608, 0x8377, 0x8111, 0x8f25, 0xabde,
+ 0xd383, 0x00ee, 0x2e3a, 0x5586, 0x71b9, 0x7f29, 0x7c17, 0x68eb,
+ 0x4820, 0x1df8, 0xefee, 0xc3f9, 0x9fce, 0x8820, 0x8001, 0x887f,
+ 0xa080, 0xc4e6, 0xf0f8, 0x1efd, 0x48fd, 0x6983, 0x7c58, 0x7f09,
+ 0x713d, 0x54be, 0x2d3f, 0xffe2, 0xd288, 0xab15, 0x8ea7, 0x80f0,
+ 0x83b6, 0x969f, 0xb735, 0xe13e, 0x0f44, 0x3b50, 0x5fa9, 0x7797,
+ 0x7fff, 0x77cb, 0x600a, 0x3bd2, 0x0fd6, 0xe1cd, 0xb7ae, 0x96f3,
+ 0x83da, 0x80de, 0x8e63, 0xaaa7, 0xd1ff, 0xff4f, 0x2cb6, 0x5450,
+ 0x70f8, 0x7ef7, 0x7c7b, 0x69d6, 0x4975, 0x1f8b, 0xf18a, 0xc569,
+ 0xa0e2, 0x88b4, 0x8002, 0x87ed, 0x9f6d, 0xc377, 0xef5c, 0x1d69,
+ 0x47a6, 0x6896, 0x7bf3, 0x7f39, 0x71fc, 0x55f4, 0x2ec3, 0x0181,
+ 0xd40d, 0xac4d, 0x8f6a, 0x8124, 0x8356, 0x95b5, 0xb5e1, 0xdfab,
+ 0x0da7, 0x39de, 0x5e93, 0x7700, 0x7ffc, 0x785b, 0x611b, 0x3d40,
+ 0x1172, 0xe361, 0xb906, 0x97e2, 0x8441, 0x80b1, 0x8da6, 0xa973,
+ 0xd07c, 0xfdb0, 0x2b30, 0x5315, 0x7032, 0x7ebf, 0x7cd9, 0x6abe,
+ 0x4ac8, 0x211d, 0xf327, 0xc6db, 0xa1fa, 0x894d, 0x8008, 0x875f,
+ 0x9e5f, 0xc20a, 0xedc1, 0x1bd4, 0x464c, 0x67a4, 0x7b89, 0x7f64,
+ 0x72b7, 0x5726, 0x3045, 0x0320, 0xd594, 0xad89, 0x9032, 0x815e,
+ 0x82fa, 0x94d0, 0xb490, 0xde1a, 0x0c0a, 0x386b, 0x5d79, 0x7665,
+ 0x7ff3, 0x78e6, 0x6227, 0x3eab, 0x130d, 0xe4f7, 0xba62, 0x98d6,
+ 0x84ae, 0x8088, 0x8cee, 0xa843, 0xcefb, 0xfc10, 0x29a8, 0x51d8,
+ 0x6f68, 0x7e83, 0x7d32, 0x6ba1, 0x4c18, 0x22ae, 0xf4c5, 0xc850,
+ 0xa316, 0x89eb, 0x8013, 0x86d7, 0x9d54, 0xc0a0, 0xec26, 0x1a3e,
+ 0x44f0, 0x66af, 0x7b19, 0x7f8a, 0x736d, 0x5854, 0x31c4, 0x04bf,
+ 0xd71d, 0xaec9, 0x90ff, 0x819d, 0x82a4, 0x93ef, 0xb342, 0xdc8a,
+ 0x0a6c, 0x36f5, 0x5c5b, 0x75c5, 0x7fe5, 0x796c, 0x6330, 0x4014,
+ 0x14a7, 0xe68d, 0xbbc0, 0x99ce, 0x8520, 0x8065, 0x8c3a, 0xa716,
+ 0xcd7c, 0xfa71, 0x281e, 0x5097, 0x6e99, 0x7e41, 0x7d86, 0x6c80,
+ 0x4d64, 0x243d, 0xf663, 0xc9c7, 0xa435, 0x8a8d, 0x8024, 0x8653,
+ 0x9c4d, 0xbf38, 0xea8c, 0x18a7, 0x4390, 0x65b4, 0x7aa5, 0x7fab,
+ 0x741e, 0x597f, 0x3342, 0x065e, 0xd8a8, 0xb00b, 0x91d0, 0x81e2,
+ 0x8252, 0x9313, 0xb1f7, 0xdafc, 0x08ce, 0x357c, 0x5b39, 0x751f,
+ 0x7fd2, 0x79ed, 0x6434, 0x417b, 0x1641, 0xe825, 0xbd20, 0x9aca,
+ 0x8597, 0x8047, 0x8b8b, 0xa5ed, 0xcc00, 0xf8d2, 0x2693, 0x4f52,
+ 0x6dc6, 0x7dfa, 0x7dd4, 0x6d5a, 0x4ead, 0x25cb, 0xf801, 0xcb41,
+ 0xa559, 0x8b35, 0x803a, 0x85d5, 0x9b4b, 0xbdd3, 0xe8f3, 0x170f,
+ 0x422e, 0x64b6, 0x7a2c, 0x7fc6, 0x74ca, 0x5aa6, 0x34be, 0x07fd,
+ 0xda34, 0xb151, 0x92a5, 0x822b, 0x8206, 0x923b, 0xb0af, 0xd96f,
+ 0x072f, 0x3402, 0x5a14, 0x7475, 0x7fb9, 0x7a69, 0x6535, 0x42de,
+ 0x17da, 0xe9bd, 0xbe84, 0x9bcb, 0x8613, 0x802f, 0x8ae1, 0xa4c8,
+ 0xca85, 0xf734, 0x2506, 0x4e0a, 0x6cee, 0x7dae, 0x7e1e, 0x6e2f,
+ 0x4ff3, 0x2757, 0xf9a0, 0xccbc, 0xa680, 0x8be1, 0x8055, 0x855b,
+ 0x9a4d, 0xbc71, 0xe75a, 0x1576, 0x40c9, 0x63b4, 0x79ad, 0x7fdc,
+ 0x7572, 0x5bca, 0x3637, 0x099b, 0xdbc1, 0xb29b, 0x9380, 0x827a,
+ 0x81bf, 0x9168, 0xaf6b, 0xd7e4, 0x0590, 0x3285, 0x58eb, 0x73c7,
+ 0x7f9b, 0x7adf, 0x6631, 0x443f, 0x1971, 0xeb57, 0xbfea, 0x9ccf,
+ 0x8694, 0x801b, 0x8a3c, 0xa3a6, 0xc90d, 0xf596, 0x2377, 0x4cc0,
+ 0x6c12, 0x7d5d, 0x7e62, 0x6f00, 0x5136, 0x28e1, 0xfb3f, 0xce3a,
+ 0xa7ab, 0x8c93, 0x8076, 0x84e7, 0x9952, 0xbb12, 0xe5c3, 0x13dc,
+ 0x3f62, 0x62ad, 0x792a, 0x7fed, 0x7615, 0x5ce9, 0x37ae, 0x0b39,
+ 0xdd50, 0xb3e7, 0x945e, 0x82ce, 0x817d, 0x9099, 0xae2a, 0xd65a,
+ 0x03f1, 0x3106, 0x57bf, 0x7313, 0x7f78, 0x7b51, 0x6729, 0x459d,
+ 0x1b08, 0xecf1, 0xc153, 0x9dd8, 0x871a, 0x800d, 0x899c, 0xa288,
+ 0xc797, 0xf3f8, 0x21e7, 0x4b72, 0x6b31, 0x7d06, 0x7ea2, 0x6fcd,
+ 0x5276, 0x2a6a, 0xfcde, 0xcfba, 0xa8d9, 0x8d48, 0x809c, 0x8478,
+ 0x985c, 0xb9b5, 0xe42d, 0x1241, 0x3df7, 0x61a2, 0x78a1, 0x7ff8,
+ 0x76b3, 0x5e05, 0x3923, 0x0cd7, 0xdee1, 0xb537, 0x9541, 0x8327,
+ 0x8141, 0x8fce, 0xacec, 0xd4d2, 0x0252, 0x2f86, 0x568e, 0x725b,
+ 0x7f50, 0x7bbe, 0x681d, 0x46f8, 0x1c9d, 0xee8d, 0xc2bf, 0x9ee4,
+ 0x87a5, 0x8004, 0x8900, 0xa16f, 0xc623, 0xf25a, 0x2056, 0x4a20,
+ 0x6a4c, 0x7cab, 0x7edb, 0x7095, 0x53b2, 0x2bf1, 0xfe7e, 0xd13c,
+ 0xaa0b, 0x8e03, 0x80c7, 0x840d, 0x976b, 0xb85b, 0xe298, 0x10a6,
+ 0x3c8b, 0x6094, 0x7814, 0x7ffe, 0x774c, 0x5f1d, 0x3a96, 0x0e74,
+ 0xe073, 0xb689, 0x9629, 0x8385, 0x810a, 0x8f09, 0xabb2, 0xd34c,
+ 0x00b2, 0x2e03, 0x555a, 0x719e, 0x7f22, 0x7c26, 0x690c, 0x4850,
+ 0x1e32, 0xf028, 0xc42d, 0x9ff5, 0x8835, 0x8001, 0x886a, 0xa059,
+ 0xc4b2, 0xf0be, 0x1ec4, 0x48cc, 0x6962, 0x7c4a, 0x7f10, 0x7158,
+ 0x54ea, 0x2d77, 0x001c, 0xd2bf, 0xab41, 0x8ec2, 0x80f7, 0x83a8,
+ 0x967d, 0xb705, 0xe105, 0x0f09, 0x3b1b, 0x5f81, 0x7782, 0x7fff,
+ 0x77e0, 0x6031, 0x3c06, 0x1011, 0xe206, 0xb7df, 0x9715, 0x83e8,
+ 0x80d7, 0x8e48, 0xaa7b, 0xd1c7, 0xff14, 0x2c7e, 0x5423, 0x70dc,
+ 0x7eef, 0x7c88, 0x69f8, 0x49a6, 0x1fc5, 0xf1c5, 0xc59d, 0xa10a,
+ 0x88c9, 0x8002, 0x87d8, 0x9f46, 0xc343, 0xef21, 0x1d30, 0x4775,
+ 0x6874, 0x7be4, 0x7f40, 0x7217, 0x561f, 0x2efa, 0x01bc, 0xd445,
+ 0xac7a, 0x8f86, 0x812c, 0x8348, 0x9594, 0xb5b1, 0xdf72, 0x0d6c,
+ 0x39aa, 0x5e6b, 0x76ea, 0x7ffb, 0x786f, 0x6141, 0x3d74, 0x11ac,
+ 0xe39b, 0xb938, 0x9805, 0x8451, 0x80ab, 0x8d8b, 0xa947, 0xd045,
+ 0xfd75, 0x2af8, 0x52e8, 0x7016, 0x7eb7, 0x7ce6, 0x6ade, 0x4af8,
+ 0x2156, 0xf362, 0xc710, 0xa222, 0x8963, 0x8009, 0x874b, 0x9e38,
+ 0xc1d6, 0xed86, 0x1b9b, 0x461b, 0x6782, 0x7b79, 0x7f6a, 0x72d1,
+ 0x5751, 0x307b, 0x035b, 0xd5cc, 0xadb6, 0x904f, 0x8167, 0x82ed,
+ 0x94b0, 0xb460, 0xdde1, 0x0bcf, 0x3836, 0x5d50, 0x764e, 0x7ff1,
+ 0x78f9, 0x624d, 0x3edf, 0x1347, 0xe530, 0xba93, 0x98f9, 0x84be,
+ 0x8083, 0x8cd4, 0xa818, 0xcec5, 0xfbd5, 0x2970, 0x51aa, 0x6f4b,
+ 0x7e7a, 0x7d3e, 0x6bc1, 0x4c47, 0x22e7, 0xf500, 0xc885, 0xa33e,
+ 0x8a02, 0x8015, 0x86c4, 0x9d2e, 0xc06d, 0xebeb, 0x1a04, 0x44be,
+ 0x668b, 0x7b09, 0x7f8f, 0x7386, 0x587f, 0x31fb, 0x04fa, 0xd755,
+ 0xaef6, 0x911c, 0x81a7, 0x8298, 0x93d0, 0xb312, 0xdc51, 0x0a31,
+ 0x36bf, 0x5c32, 0x75ad, 0x7fe2, 0x797e, 0x6355, 0x4047, 0x14e2,
+ 0xe6c7, 0xbbf2, 0x99f2, 0x8531, 0x8060, 0x8c21, 0xa6ec, 0xcd46,
+ 0xfa36, 0x27e6, 0x5069, 0x6e7b, 0x7e37, 0x7d91, 0x6c9f, 0x4d93,
+ 0x2476, 0xf69e, 0xc9fd, 0xa45f, 0x8aa5, 0x8027, 0x8641, 0x9c28,
+ 0xbf05, 0xea51, 0x186d, 0x435e, 0x6590, 0x7a94, 0x7faf, 0x7437,
+ 0x59a9, 0x3378, 0x0699, 0xd8e0, 0xb039, 0x91ee, 0x81ec, 0x8247,
+ 0x92f4, 0xb1c8, 0xdac3, 0x0893, 0x3547, 0x5b10, 0x7507, 0x7fce,
+ 0x79ff, 0x6459, 0x41ad, 0x167b, 0xe85f, 0xbd53, 0x9aee, 0x85a8,
+ 0x8043, 0x8b73, 0xa5c3, 0xcbca, 0xf897, 0x265a, 0x4f24, 0x6da7,
+ 0x7df0, 0x7ddf, 0x6d78, 0x4edc, 0x2603, 0xf83c, 0xcb77, 0xa583,
+ 0x8b4d, 0x803e, 0x85c3, 0x9b26, 0xbda1, 0xe8b8, 0x16d5, 0x41fb,
+ 0x6492, 0x7a1a, 0x7fc9, 0x74e2, 0x5ad0, 0x34f4, 0x0838, 0xda6c,
+ 0xb180, 0x92c4, 0x8236, 0x81fc, 0x921d, 0xb081, 0xd937, 0x06f4,
+ 0x33cc, 0x59ea, 0x745d, 0x7fb5, 0x7a7a, 0x6559, 0x4311, 0x1814,
+ 0xe9f8, 0xbeb7, 0x9bef, 0x8625, 0x802b, 0x8ac9, 0xa49e, 0xca50,
+ 0xf6f9, 0x24cd, 0x4ddc, 0x6ccf, 0x7da3, 0x7e28, 0x6e4d, 0x5022,
+ 0x278f, 0xf9db, 0xccf3, 0xa6aa, 0x8bfa, 0x805a, 0x854a, 0x9a29,
+ 0xbc3f, 0xe720, 0x153c, 0x4096, 0x638f, 0x799b, 0x7fdf, 0x7589,
+ 0x5bf3, 0x366d, 0x09d6, 0xdbfa, 0xb2ca, 0x939f, 0x8286, 0x81b5,
+ 0x914a, 0xaf3d, 0xd7ab, 0x0555, 0x324f, 0x58c1, 0x73ad, 0x7f96,
+ 0x7af0, 0x6655, 0x4471, 0x19ab, 0xeb91, 0xc01e, 0x9cf5, 0x86a7,
+ 0x8019, 0x8a25, 0xa37d, 0xc8d8, 0xf55b, 0x233e, 0x4c90, 0x6bf2,
+ 0x7d51, 0x7e6c, 0x6f1e, 0x5164, 0x2919, 0xfb7a, 0xce71, 0xa7d6,
+ 0x8cac, 0x807b, 0x84d7, 0x992f, 0xbae0, 0xe589, 0x13a1, 0x3f2e,
+ 0x6287, 0x7917, 0x7fef, 0x762b, 0x5d12, 0x37e4, 0x0b74, 0xdd89,
+ 0xb417, 0x947e, 0x82da, 0x8174, 0x907c, 0xadfc, 0xd622, 0x03b6,
+ 0x30d0, 0x5793, 0x72f9, 0x7f73, 0x7b61, 0x674c, 0x45cf, 0x1b42,
+ 0xed2c, 0xc187, 0x9dfe, 0x872d, 0x800b, 0x8985, 0xa260, 0xc762,
+ 0xf3bd, 0x21ae, 0x4b42, 0x6b10, 0x7cfa, 0x7eaa, 0x6fea, 0x52a3,
+ 0x2aa2, 0xfd1a, 0xcff1, 0xa905, 0x8d63, 0x80a1, 0x8468, 0x983a,
+ 0xb984, 0xe3f4, 0x1207, 0x3dc4, 0x617c, 0x788e, 0x7ff9, 0x76c9,
+ 0x5e2d, 0x3958, 0x0d12, 0xdf1a, 0xb567, 0x9562, 0x8334, 0x8139,
+ 0x8fb2, 0xacbf, 0xd49a, 0x0217, 0x2f4f, 0x5663, 0x7240, 0x7f49,
+ 0x7bcd, 0x683f, 0x4729, 0x1cd7, 0xeec7, 0xc2f3, 0x9f0b, 0x87b9,
+ 0x8003, 0x88eb, 0xa147, 0xc5ee, 0xf220, 0x201d, 0x49f0, 0x6a2b,
+ 0x7c9d, 0x7ee3, 0x70b1, 0x53de, 0x2c29, 0xfeb9, 0xd173, 0xaa37,
+ 0x8e1e, 0x80cd, 0x83ff, 0x9749, 0xb82a, 0xe25f, 0x106b, 0x3c56,
+ 0x606d, 0x7800, 0x7fff, 0x7761, 0x5f44, 0x3aca, 0x0eaf, 0xe0ac,
+ 0xb6ba, 0x964a, 0x8393, 0x8102, 0x8eed, 0xab85, 0xd314, 0x0077,
+ 0x2dcc, 0x552e, 0x7183, 0x7f1b, 0x7c34, 0x692e, 0x4881, 0x1e6b,
+ 0xf063, 0xc461, 0xa01c, 0x8849, 0x8001, 0x8855, 0xa031, 0xc47d,
+ 0xf083, 0x1e8a, 0x489c, 0x6940, 0x7c3c, 0x7f17, 0x7174, 0x5516,
+ 0x2dae, 0x0057, 0xd2f6, 0xab6d, 0x8ede, 0x80fe, 0x839a, 0x965c,
+ 0xb6d4, 0xe0cb, 0x0ecf, 0x3ae7, 0x5f5a, 0x776c, 0x7fff, 0x77f4,
+ 0x6058, 0x3c3a, 0x104b, 0xe240, 0xb810, 0x9736, 0x83f7, 0x80d1,
+ 0x8e2d, 0xaa4f, 0xd190, 0xfed9, 0x2c47, 0x53f7, 0x70c0, 0x7ee7,
+ 0x7c96, 0x6a19, 0x49d6, 0x1ffe, 0xf200, 0xc5d2, 0xa131, 0x88df,
+ 0x8003, 0x87c4, 0x9f20, 0xc30f, 0xeee7, 0x1cf6, 0x4744, 0x6852,
+ 0x7bd5, 0x7f46, 0x7232, 0x564b, 0x2f31, 0x01f7, 0xd47c, 0xaca7,
+ 0x8fa3, 0x8134, 0x833b, 0x9574, 0xb581, 0xdf39, 0x0d32, 0x3975,
+ 0x5e43, 0x76d5, 0x7ffa, 0x7883, 0x6167, 0x3da8, 0x11e7, 0xe3d4,
+ 0xb969, 0x9827, 0x8460, 0x80a5, 0x8d71, 0xa91c, 0xd00e, 0xfd3a,
+ 0x2ac0, 0x52bb, 0x6ff9, 0x7eaf, 0x7cf3, 0x6aff, 0x4b28, 0x2190,
+ 0xf39d, 0xc745, 0xa24a, 0x8979, 0x800b, 0x8738, 0x9e12, 0xc1a3,
+ 0xed4c, 0x1b61, 0x45e9, 0x675f, 0x7b6a, 0x7f70, 0x72eb, 0x577c,
+ 0x30b2, 0x0396, 0xd604, 0xade4, 0x906c, 0x8170, 0x82e1, 0x9490,
+ 0xb430, 0xdda8, 0x0b94, 0x3800, 0x5d28, 0x7638, 0x7ff0, 0x790c,
+ 0x6273, 0x3f12, 0x1382, 0xe56a, 0xbac5, 0x991c, 0x84ce, 0x807e,
+ 0x8cba, 0xa7ed, 0xce8e, 0xfb9a, 0x2938, 0x517d, 0x6f2e, 0x7e71,
+ 0x7d4a, 0x6be1, 0x4c77, 0x2320, 0xf53b, 0xc8bb, 0xa367, 0x8a19,
+ 0x8018, 0x86b1, 0x9d09, 0xc039, 0xebb1, 0x19ca, 0x448c, 0x6668,
+ 0x7af9, 0x7f94, 0x73a0, 0x58aa, 0x3231, 0x0535, 0xd78d, 0xaf24,
+ 0x913a, 0x81b0, 0x828c, 0x93b0, 0xb2e3, 0xdc19, 0x09f6, 0x368a,
+ 0x5c09, 0x7596, 0x7fe0, 0x7991, 0x637a, 0x407a, 0x151c, 0xe701,
+ 0xbc24, 0x9a15, 0x8541, 0x805c, 0x8c08, 0xa6c1, 0xcd10, 0xf9fb,
+ 0x27ae, 0x503b, 0x6e5e, 0x7e2d, 0x7d9d, 0x6cbe, 0x4dc2, 0x24ae,
+ 0xf6d9, 0xca33, 0xa488, 0x8abd, 0x802a, 0x862f, 0x9c03, 0xbed2,
+ 0xea17, 0x1833, 0x432c, 0x656c, 0x7a83, 0x7fb3, 0x744f, 0x59d3,
+ 0x33ae, 0x06d4, 0xd918, 0xb068, 0x920c, 0x81f6, 0x823c, 0x92d5,
+ 0xb199, 0xda8b, 0x0858, 0x3511, 0x5ae6, 0x74ef, 0x7fcb, 0x7a10,
+ 0x647e, 0x41e0, 0x16b5, 0xe899, 0xbd85, 0x9b13, 0x85ba, 0x8040,
+ 0x8b5a, 0xa599, 0xcb94, 0xf85c, 0x2622, 0x4ef5, 0x6d89, 0x7de5,
+ 0x7dea, 0x6d97, 0x4f0b, 0x263c, 0xf877, 0xcbad, 0xa5ac, 0x8b66,
+ 0x8041, 0x85b2, 0x9b02, 0xbd6e, 0xe87e, 0x169b, 0x41c9, 0x646d,
+ 0x7a08, 0x7fcd, 0x74fa, 0x5af9, 0x3529, 0x0873, 0xdaa5, 0xb1af,
+ 0x92e3, 0x8241, 0x81f1, 0x91fe, 0xb053, 0xd8fe, 0x06b9, 0x3396,
+ 0x59c0, 0x7444, 0x7fb1, 0x7a8b, 0x657d, 0x4343, 0x184e, 0xea32,
+ 0xbeea, 0x9c14, 0x8637, 0x8028, 0x8ab2, 0xa475, 0xca1a, 0xf6be,
+ 0x2494, 0x4dad, 0x6cb0, 0x7d97, 0x7e32, 0x6e6b, 0x5050, 0x27c7,
+ 0xfa16, 0xcd29, 0xa6d5, 0x8c13, 0x805e, 0x853a, 0x9a05, 0xbc0d,
+ 0xe6e7, 0x1501, 0x4063, 0x6369, 0x7988, 0x7fe1, 0x75a1, 0x5c1c,
+ 0x36a2, 0x0a11, 0xdc33, 0xb2f9, 0x93bf, 0x8291, 0x81ac, 0x912c,
+ 0xaf0f, 0xd773, 0x051a, 0x3218, 0x5896, 0x7394, 0x7f92, 0x7b00,
+ 0x6678, 0x44a3, 0x19e5, 0xebcc, 0xc051, 0x9d1a, 0x86b9, 0x8017,
+ 0x8a0e, 0xa354, 0xc8a2, 0xf520, 0x2306, 0x4c61, 0x6bd2, 0x7d45,
+ 0x7e75, 0x6f3b, 0x5191, 0x2951, 0xfbb5, 0xcea7, 0xa800, 0x8cc6,
+ 0x8080, 0x84c7, 0x990c, 0xbaae, 0xe550, 0x1367, 0x3efb, 0x6262,
+ 0x7904, 0x7ff0, 0x7642, 0x5d3a, 0x3819, 0x0baf, 0xddc2, 0xb446,
+ 0x949e, 0x82e7, 0x816c, 0x905f, 0xadcf, 0xd5ea, 0x037b, 0x3099,
+ 0x5768, 0x72df, 0x7f6d, 0x7b71, 0x676f, 0x4600, 0x1b7b, 0xed66,
+ 0xc1ba, 0x9e24, 0x8741, 0x800a, 0x896f, 0xa238, 0xc72d, 0xf382,
+ 0x2175, 0x4b12, 0x6af0, 0x7ced, 0x7eb3, 0x7006, 0x52d0, 0x2ada,
+ 0xfd55, 0xd027, 0xa930, 0x8d7d, 0x80a7, 0x8459, 0x9817, 0xb952,
+ 0xe3ba, 0x11cc, 0x3d90, 0x6156, 0x787a, 0x7ffa, 0x76df, 0x5e55,
+ 0x398d, 0x0d4d, 0xdf53, 0xb597, 0x9583, 0x8341, 0x8131, 0x8f96,
+ 0xac92, 0xd463, 0x01dc, 0x2f18, 0x5637, 0x7226, 0x7f43, 0x7bdc,
+ 0x6861, 0x475a, 0x1d11, 0xef02, 0xc327, 0x9f32, 0x87cd, 0x8003,
+ 0x88d5, 0xa11f, 0xc5ba, 0xf1e5, 0x1fe4, 0x49c0, 0x6a0a, 0x7c90,
+ 0x7eeb, 0x70cd, 0x540b, 0x2c60, 0xfef4, 0xd1aa, 0xaa63, 0x8e39,
+ 0x80d4, 0x83f0, 0x9727, 0xb7f9, 0xe225, 0x1030, 0x3c22, 0x6046,
+ 0x77eb, 0x7fff, 0x7776, 0x5f6c, 0x3aff, 0x0eea, 0xe0e6, 0xb6ea,
+ 0x966b, 0x83a1, 0x80fb, 0x8ed1, 0xab59, 0xd2dd, 0x003c, 0x2d95,
+ 0x5502, 0x7167, 0x7f14, 0x7c42, 0x6950, 0x48b2, 0x1ea4, 0xf09e,
+ 0xc495, 0xa043, 0x885e, 0x8001, 0x8840, 0xa00a, 0xc449, 0xf048,
+ 0x1e51, 0x486b, 0x691f, 0x7c2e, 0x7f1e, 0x718f, 0x5543, 0x2de5,
+ 0x0092, 0xd32e, 0xab9a, 0x8efa, 0x8105, 0x838c, 0x963b, 0xb6a4,
+ 0xe092, 0x0e94, 0x3ab2, 0x5f32, 0x7757, 0x7fff, 0x7809, 0x607f,
+ 0x3c6e, 0x1086, 0xe279, 0xb841, 0x9758, 0x8405, 0x80ca, 0x8e12,
+ 0xaa23, 0xd159, 0xfe9e, 0x2c0f, 0x53ca, 0x70a4, 0x7ee0, 0x7ca3,
+ 0x6a3a, 0x4a06, 0x2037, 0xf23b, 0xc607, 0xa159, 0x88f5, 0x8004,
+ 0x87b0, 0x9ef9, 0xc2db, 0xeeac, 0x1cbd, 0x4713, 0x682f, 0x7bc6,
+ 0x7f4c, 0x724c, 0x5677, 0x2f68, 0x0232, 0xd4b4, 0xacd4, 0x8fbf,
+ 0x813c, 0x832e, 0x9553, 0xb551, 0xdf00, 0x0cf7, 0x3940, 0x5e1b,
+ 0x76bf, 0x7ff9, 0x7897, 0x618e, 0x3ddb, 0x1221, 0xe40e, 0xb99a,
+ 0x984a, 0x846f, 0x809f, 0x8d57, 0xa8f1, 0xcfd7, 0xfcfe, 0x2a88,
+ 0x528e, 0x6fdd, 0x7ea6, 0x7cff, 0x6b1f, 0x4b58, 0x21c9, 0xf3d8,
+ 0xc77a, 0xa273, 0x8990, 0x800c, 0x8724, 0x9dec, 0xc16f, 0xed11,
+ 0x1b27, 0x45b8, 0x673c, 0x7b5a, 0x7f75, 0x7305, 0x57a7, 0x30e9,
+ 0x03d1, 0xd63c, 0xae11, 0x9089, 0x8179, 0x82d4, 0x9470, 0xb401,
+ 0xdd6f, 0x0b59, 0x37cb, 0x5cff, 0x7621, 0x7fee, 0x7920, 0x6299,
+ 0x3f46, 0x13bc, 0xe5a4, 0xbaf7, 0x993f, 0x84de, 0x8079, 0x8ca0,
+ 0xa7c2, 0xce58, 0xfb5f, 0x2900, 0x514f, 0x6f10, 0x7e67, 0x7d56,
+ 0x6c00, 0x4ca6, 0x2359, 0xf576, 0xc8f0, 0xa390, 0x8a30, 0x801a,
+ 0x869e, 0x9ce3, 0xc006, 0xeb77, 0x1991, 0x445a, 0x6644, 0x7ae8,
+ 0x7f99, 0x73b9, 0x58d4, 0x3268, 0x0570, 0xd7c5, 0xaf52, 0x9157,
+ 0x81ba, 0x8280, 0x9391, 0xb2b4, 0xdbe0, 0x09bb, 0x3654, 0x5be0,
+ 0x757f, 0x7fdd, 0x79a3, 0x63a0, 0x40ae, 0x1556, 0xe73b, 0xbc56,
+ 0x9a39, 0x8552, 0x8058, 0x8bef, 0xa697, 0xccda, 0xf9c0, 0x2775,
+ 0x500c, 0x6e40, 0x7e23, 0x7da8, 0x6cdd, 0x4df1, 0x24e7, 0xf714,
+ 0xca68, 0xa4b1, 0x8ad4, 0x802d, 0x861d, 0x9bdf, 0xbea0, 0xe9dd,
+ 0x17f9, 0x42f9, 0x6548, 0x7a72, 0x7fb7, 0x7468, 0x59fd, 0x33e4,
+ 0x070f, 0xd950, 0xb096, 0x922a, 0x8200, 0x8231, 0x92b6, 0xb16b,
+ 0xda52, 0x081d, 0x34db, 0x5abd, 0x74d7, 0x7fc8, 0x7a22, 0x64a2,
+ 0x4213, 0x16ef, 0xe8d3, 0xbdb8, 0x9b37, 0x85cb, 0x803c, 0x8b42,
+ 0xa56f, 0xcb5e, 0xf821, 0x25e9, 0x4ec7, 0x6d6a, 0x7dda, 0x7df4,
+ 0x6db5, 0x4f39, 0x2674, 0xf8b2, 0xcbe3, 0xa5d6, 0x8b7e, 0x8045,
+ 0x85a0, 0x9ade, 0xbd3c, 0xe844, 0x1660, 0x4196, 0x6448, 0x79f6,
+ 0x7fd0, 0x7512, 0x5b23, 0x355f, 0x08ae, 0xdadd, 0xb1dd, 0x9302,
+ 0x824c, 0x81e7, 0x91e0, 0xb024, 0xd8c6, 0x067e, 0x3360, 0x5996,
+ 0x742b, 0x7fad, 0x7a9c, 0x65a1, 0x4375, 0x1888, 0xea6c, 0xbf1d,
+ 0x9c39, 0x8649, 0x8026, 0x8a9a, 0xa44c, 0xc9e4, 0xf683, 0x245c,
+ 0x4d7e, 0x6c90, 0x7d8c, 0x7e3c, 0x6e89, 0x507e, 0x2800, 0xfa51,
+ 0xcd5f, 0xa6ff, 0x8c2c, 0x8063, 0x8529, 0x99e1, 0xbbdb, 0xe6ad,
+ 0x14c7, 0x4030, 0x6344, 0x7976, 0x7fe4, 0x75b8, 0x5c45, 0x36d8,
+ 0x0a4c, 0xdc6c, 0xb328, 0x93de, 0x829d, 0x81a2, 0x910f, 0xaee1,
+ 0xd73b, 0x04df, 0x31e2, 0x586b, 0x737b, 0x7f8d, 0x7b11, 0x669b,
+ 0x44d5, 0x1a1f, 0xec06, 0xc084, 0x9d40, 0x86cc, 0x8014, 0x89f7,
+ 0xa32c, 0xc86d, 0xf4e5, 0x22cd, 0x4c31, 0x6bb2, 0x7d38, 0x7e7e,
+ 0x6f58, 0x51bf, 0x2989, 0xfbf0, 0xcede, 0xa82b, 0x8ce0, 0x8085,
+ 0x84b7, 0x98e9, 0xba7c, 0xe516, 0x132d, 0x3ec7, 0x623c, 0x78f0,
+ 0x7ff2, 0x7659, 0x5d63, 0x384e, 0x0bea, 0xddfb, 0xb476, 0x94bf,
+ 0x82f3, 0x8163, 0x9042, 0xada2, 0xd5b2, 0x0340, 0x3062, 0x573d,
+ 0x72c5, 0x7f67, 0x7b80, 0x6792, 0x4632, 0x1bb5, 0xeda1, 0xc1ee,
+ 0x9e4a, 0x8754, 0x8009, 0x8959, 0xa210, 0xc6f8, 0xf347, 0x213c,
+ 0x4ae2, 0x6acf, 0x7ce0, 0x7ebb, 0x7023, 0x52fd, 0x2b11, 0xfd90,
+ 0xd05e, 0xa95b, 0x8d98, 0x80ad, 0x844a, 0x97f5, 0xb921, 0xe380,
+ 0x1191, 0x3d5c, 0x612f, 0x7866, 0x7ffb, 0x76f4, 0x5e7d, 0x39c2,
+ 0x0d87, 0xdf8c, 0xb5c7, 0x95a4, 0x834e, 0x8129, 0x8f79, 0xac65,
+ 0xd42b, 0x01a1, 0x2ee1, 0x560b, 0x720b, 0x7f3d, 0x7beb, 0x6884,
+ 0x478c, 0x1d4a, 0xef3c, 0xc35b, 0x9f58, 0x87e1, 0x8002, 0x88bf,
+ 0xa0f7, 0xc585, 0xf1aa, 0x1faa, 0x4990, 0x69e8, 0x7c82, 0x7ef3,
+ 0x70e9, 0x5438, 0x2c98, 0xff2f, 0xd1e1, 0xaa8f, 0x8e54, 0x80db,
+ 0x83e2, 0x9705, 0xb7c9, 0xe1ec, 0x0ff6, 0x3bee, 0x601f, 0x77d6,
+ 0x7fff, 0x778b, 0x5f93, 0x3b33, 0x0f24, 0xe11f, 0xb71b, 0x968d,
+ 0x83af, 0x80f3, 0x8eb6, 0xab2c, 0xd2a6, 0x0001, 0x2d5d, 0x54d6,
+ 0x714c, 0x7f0d, 0x7c50, 0x6971, 0x48e3, 0x1ede, 0xf0d9, 0xc4ca,
+ 0xa06b, 0x8873, 0x8001, 0x882b, 0x9fe3, 0xc415, 0xf00e, 0x1e17,
+ 0x483a, 0x68fd, 0x7c1f, 0x7f25, 0x71aa, 0x556f, 0x2e1c, 0x00ce,
+ 0xd365, 0xabc6, 0x8f16, 0x810d, 0x837f, 0x9619, 0xb673, 0xe059,
+ 0x0e59, 0x3a7e, 0x5f0b, 0x7742, 0x7ffe, 0x781d, 0x60a6, 0x3ca2,
+ 0x10c0, 0xe2b3, 0xb872, 0x977a, 0x8414, 0x80c4, 0x8df7, 0xa9f7,
+ 0xd122, 0xfe63, 0x2bd8, 0x539d, 0x7088, 0x7ed8, 0x7cb1, 0x6a5b,
+ 0x4a36, 0x2070, 0xf275, 0xc63b, 0xa181, 0x890a, 0x8005, 0x879b,
+ 0x9ed3, 0xc2a7, 0xee72, 0x1c83, 0x46e2, 0x680d, 0x7bb7, 0x7f52,
+ 0x7267, 0x56a2, 0x2f9f, 0x026d, 0xd4ec, 0xad01, 0x8fdb, 0x8145,
+ 0x8321, 0x9532, 0xb521, 0xdec7, 0x0cbc, 0x390b, 0x5df3, 0x76a8,
+ 0x7ff7, 0x78aa, 0x61b4, 0x3e0f, 0x125c, 0xe448, 0xb9cc, 0x986c,
+ 0x847f, 0x8099, 0x8d3c, 0xa8c5, 0xcfa1, 0xfcc3, 0x2a51, 0x5261,
+ 0x6fc0, 0x7e9e, 0x7d0c, 0x6b40, 0x4b87, 0x2202, 0xf413, 0xc7af,
+ 0xa29b, 0x89a6, 0x800e, 0x8711, 0x9dc6, 0xc13c, 0xecd7, 0x1aed,
+ 0x4586, 0x6719, 0x7b4a, 0x7f7a, 0x731f, 0x57d2, 0x311f, 0x040c,
+ 0xd674, 0xae3f, 0x90a6, 0x8182, 0x82c8, 0x9450, 0xb3d1, 0xdd36,
+ 0x0b1e, 0x3796, 0x5cd7, 0x760a, 0x7fec, 0x7933, 0x62be, 0x3f79,
+ 0x13f7, 0xe5de, 0xbb28, 0x9963, 0x84ee, 0x8074, 0x8c87, 0xa797,
+ 0xce21, 0xfb24, 0x28c8, 0x5121, 0x6ef3, 0x7e5e, 0x7d62, 0x6c20,
+ 0x4cd5, 0x2391, 0xf5b1, 0xc925, 0xa3b9, 0x8a47, 0x801c, 0x868b,
+ 0x9cbe, 0xbfd3, 0xeb3c, 0x1957, 0x4428, 0x6621, 0x7ad8, 0x7f9d,
+ 0x73d2, 0x58ff, 0x329e, 0x05ab, 0xd7fd, 0xaf80, 0x9175, 0x81c4,
+ 0x8275, 0x9371, 0xb285, 0xdba7, 0x0980, 0x361f, 0x5bb7, 0x7567,
+ 0x7fdb, 0x79b6, 0x63c5, 0x40e1, 0x1591, 0xe775, 0xbc88, 0x9a5d,
+ 0x8563, 0x8053, 0x8bd6, 0xa66d, 0xcca3, 0xf985, 0x273d, 0x4fde,
+ 0x6e22, 0x7e19, 0x7db3, 0x6cfc, 0x4e20, 0x2520, 0xf74f, 0xca9e,
+ 0xa4db, 0x8aec, 0x8030, 0x860b, 0x9bba, 0xbe6d, 0xe9a3, 0x17bf,
+ 0x42c7, 0x6524, 0x7a61, 0x7fbb, 0x7481, 0x5a27, 0x341b, 0x074a,
+ 0xd989, 0xb0c4, 0x9249, 0x820b, 0x8226, 0x9297, 0xb13c, 0xda1a,
+ 0x07e2, 0x34a5, 0x5a93, 0x74bf, 0x7fc4, 0x7a34, 0x64c7, 0x4245,
+ 0x172a, 0xe90d, 0xbdeb, 0x9b5c, 0x85dd, 0x8038, 0x8b2a, 0xa546,
+ 0xcb28, 0xf7e6, 0x25b1, 0x4e98, 0x6d4c, 0x7dcf, 0x7dff, 0x6dd4,
+ 0x4f67, 0x26ac, 0xf8ed, 0xcc19, 0xa600, 0x8b97, 0x8049, 0x858f,
+ 0x9aba, 0xbd09, 0xe80a, 0x1626, 0x4163, 0x6424, 0x79e4, 0x7fd3,
+ 0x752a, 0x5b4c, 0x3595, 0x08e9, 0xdb16, 0xb20c, 0x9321, 0x8257,
+ 0x81dd, 0x91c2, 0xaff6, 0xd88e, 0x0643, 0x3329, 0x596c, 0x7412,
+ 0x7fa9, 0x7aad, 0x65c5, 0x43a7, 0x18c2, 0xeaa6, 0xbf50, 0x9c5e,
+ 0x865c, 0x8023, 0x8a83, 0xa422, 0xc9af, 0xf648, 0x2423, 0x4d4f,
+ 0x6c71, 0x7d80, 0x7e46, 0x6ea7, 0x50ac, 0x2838, 0xfa8c, 0xcd95,
+ 0xa72a, 0x8c46, 0x8067, 0x8518, 0x99be, 0xbba9, 0xe673, 0x148d,
+ 0x3ffd, 0x631f, 0x7963, 0x7fe6, 0x75cf, 0x5c6e, 0x370d, 0x0a87,
+ 0xdca4, 0xb357, 0x93fe, 0x82a9, 0x8199, 0x90f1, 0xaeb4, 0xd703,
+ 0x04a4, 0x31ab, 0x5840, 0x7361, 0x7f88, 0x7b21, 0x66bf, 0x4507,
+ 0x1a59, 0xec41, 0xc0b7, 0x9d65, 0x86df, 0x8012, 0x89e0, 0xa303,
+ 0xc838, 0xf4aa, 0x2294, 0x4c02, 0x6b92, 0x7d2c, 0x7e87, 0x6f75,
+ 0x51ec, 0x29c1, 0xfc2c, 0xcf14, 0xa856, 0x8cfa, 0x808b, 0x84a7,
+ 0x98c6, 0xba4b, 0xe4dc, 0x12f2, 0x3e94, 0x6216, 0x78dd, 0x7ff4,
+ 0x766f, 0x5d8b, 0x3883, 0x0c25, 0xde34, 0xb4a6, 0x94df, 0x8300,
+ 0x815a, 0x9025, 0xad74, 0xd57b, 0x0305, 0x302c, 0x5712, 0x72ab,
+ 0x7f62, 0x7b90, 0x67b4, 0x4663, 0x1bef, 0xeddb, 0xc222, 0x9e70,
+ 0x8768, 0x8007, 0x8943, 0xa1e8, 0xc6c3, 0xf30c, 0x2103, 0x4ab2,
+ 0x6aaf, 0x7cd3, 0x7ec3, 0x703f, 0x532a, 0x2b49, 0xfdcb, 0xd095,
+ 0xa987, 0x8db2, 0x80b3, 0x843b, 0x97d2, 0xb8f0, 0xe347, 0x1157,
+ 0x3d28, 0x6109, 0x7852, 0x7ffc, 0x770a, 0x5ea5, 0x39f7, 0x0dc2,
+ 0xdfc6, 0xb5f7, 0x95c4, 0x835c, 0x8121, 0x8f5d, 0xac39, 0xd3f4,
+ 0x0165, 0x2eaa, 0x55df, 0x71f0, 0x7f36, 0x7bfa, 0x68a6, 0x47bd,
+ 0x1d84, 0xef77, 0xc38f, 0x9f7f, 0x87f6, 0x8001, 0x88aa, 0xa0d0,
+ 0xc551, 0xf16f, 0x1f71, 0x495f, 0x69c7, 0x7c74, 0x7efa, 0x7105,
+ 0x5464, 0x2ccf, 0xff6a, 0xd218, 0xaabb, 0x8e6f, 0x80e1, 0x83d3,
+ 0x96e3, 0xb798, 0xe1b2, 0x0fbb, 0x3bba, 0x5ff8, 0x77c1, 0x7fff,
+ 0x77a0, 0x5fbb, 0x3b68, 0x0f5f, 0xe158, 0xb74b, 0x96ae, 0x83bd,
+ 0x80ec, 0x8e9a, 0xab00, 0xd26f, 0xffc7, 0x2d26, 0x54aa, 0x7130,
+ 0x7f06, 0x7c5e, 0x6993, 0x4913, 0x1f17, 0xf113, 0xc4fe, 0xa092,
+ 0x8889, 0x8001, 0x8816, 0x9fbc, 0xc3e1, 0xefd3, 0x1dde, 0x4809,
+ 0x68db, 0x7c11, 0x7f2c, 0x71c5, 0x559b, 0x2e53, 0x0109, 0xd39d,
+ 0xabf3, 0x8f31, 0x8115, 0x8371, 0x95f8, 0xb643, 0xe01f, 0x0e1e,
+ 0x3a49, 0x5ee3, 0x772c, 0x7ffd, 0x7832, 0x60cc, 0x3cd6, 0x10fb,
+ 0xe2ec, 0xb8a3, 0x979d, 0x8423, 0x80bd, 0x8ddc, 0xa9cb, 0xd0eb,
+ 0xfe28, 0x2ba0, 0x5370, 0x706c, 0x7ed0, 0x7cbe, 0x6a7b, 0x4a67,
+ 0x20aa, 0xf2b0, 0xc670, 0xa1a9, 0x8920, 0x8006, 0x8787, 0x9eac,
+ 0xc273, 0xee37, 0x1c49, 0x46b0, 0x67eb, 0x7ba8, 0x7f58, 0x7281,
+ 0x56ce, 0x2fd6, 0x02a8, 0xd523, 0xad2e, 0x8ff8, 0x814d, 0x8314,
+ 0x9512, 0xb4f1, 0xde8e, 0x0c81, 0x38d6, 0x5dca, 0x7692, 0x7ff6,
+ 0x78be, 0x61da, 0x3e43, 0x1296, 0xe481, 0xb9fd, 0x988f, 0x848e,
+ 0x8093, 0x8d22, 0xa89a, 0xcf6a, 0xfc88, 0x2a19, 0x5234, 0x6fa3,
+ 0x7e95, 0x7d19, 0x6b60, 0x4bb7, 0x223b, 0xf44e, 0xc7e4, 0xa2c3,
+ 0x89bd, 0x8010, 0x86fe, 0x9da0, 0xc108, 0xec9c, 0x1ab4, 0x4555
+};
+
+float32_t transform_fft_f32_inputs[TRANSFORM_MAX_FFT_LEN * 2] =
+{
+ 43.0264275639, -17.0525215570, -94.8488973910, -8.1924989580, 7.2830326091, 66.8368719314, 33.9778190671, 117.8652289772,
+ -129.6077797465, -14.6420815368, 18.0239223278, 20.6760530292, 55.0375037651, 1.8674609862, -85.6534302408, -33.5750364909,
+ 29.2110949614, 110.4727049460, -94.1914619387, -1.4084169343, 83.5181653041, 47.3073514127, -13.3420621181, 30.3389699104,
+ 12.1188124277, 100.9730921941, -114.0146362390, -77.5823200409, 37.2019034618, 40.0026301128, -58.3387276630, -34.9472398600,
+ -5.1169678311, -87.7660091118, -150.5888601131, 56.0349370503, 50.2168884079, -74.2313236767, 22.3648603560, -6.8676387051,
+ 74.8957303680, -90.1292012823, -55.1436241586, -66.6732976100, -6.7918147615, 7.7612697081, 35.7892605979, -20.0470508830,
+ 41.8369017546, -143.7378056984, -41.9127158600, -108.3531841158, -57.1917422289, -124.2808828105, 38.9316388820, -77.9212517405,
+ 37.1990818377, -28.9545952748, -155.6371057564, 45.8088886393, 36.2537018275, -6.5727656016, -104.2070491921, 45.5583813729,
+ -19.7674717059, -80.4802190947, -1.4444563441, -42.2142256438, 36.6546339194, -57.0866498590, 44.4677067511, 65.7285753407,
+ -103.8158864647, 25.4348723711, -153.5419639389, 39.3608409474, 49.1658103436, 79.5570602275, 75.2944095996, 58.9394700746,
+ -53.1018534392, 33.4172444014, 35.6224682287, -64.4353396418, -125.8464291251, -47.6072111617, -26.2177687594, -12.0061322096,
+ -17.7887967585, -28.2926175090, -62.0691715749, 40.5098573604, -191.1123732593, 119.6750713043, 19.6182375803, -26.7615252921,
+ 2.2957847015, -108.3436451287, -50.5906164995, -5.6360985100, -11.6772204201, -84.2765293757, -60.9317810068, 82.0446350218,
+ -70.2048296348, 72.8738253222, 60.2450218115, 114.2741231228, 46.8180775285, 6.9915412654, -8.9909197429, -78.9165936808,
+ 66.4731535459, -68.4235455651, -79.8254597080, -10.6308477115, -62.6161569330, -55.7744410292, -11.8408366528, 98.1034940997,
+ 35.8213741877, -54.4694482732, 86.9631830044, -53.0343838122, -47.4898642865, -47.2010929590, -31.3312639685, -23.0908245172,
+ 12.0258009869, -5.1098204703, -9.8420230737, -107.3328761158, 44.6810431959, -17.9083820345, -60.9753512872, -7.5915088994,
+ 17.2250813329, 57.9176125648, 124.3004161362, -63.1950908493, 120.5788885640, -44.1734238117, -91.7408095116, -43.5696066595,
+ -49.9560710099, -167.8513443296, -70.9437505499, -46.4109705355, -64.2264526456, -13.9995803916, -100.9548186356, 9.9101010575,
+ -50.0615130815, -55.7590145012, -60.3195153388, 61.7913378549, -102.0850899209, 53.2360193126, -25.8997883369, 75.1445512333,
+ -113.8148602310, 17.8027281119, -19.5006822722, -44.2169628471, 107.5017084384, -113.7909124666, -43.9735396033, 7.6880981388,
+ 46.7384653508, 9.9047443751, 81.8646964362, 132.3812863877, -95.6959050236, -68.5015813484, 65.8586404494, 18.5039353889,
+ -30.1786166621, -90.3098515667, -22.9356228552, -20.5778272423, -2.2127786675, -35.4418447703, -51.8722915974, -107.9024439078,
+ -51.5940748232, -51.7463262677, 74.2795485984, 94.2205022462, 9.7016384049, -47.3556083155, -36.7822314478, -151.6455525363,
+ -15.7183814485, 78.2063383182, 0.1516414969, 37.9304181609, 20.6185902740, -22.2164106778, 6.1160554677, 2.4061326953,
+ -111.6681824598, -60.0858917090, 75.1698614693, -76.5787410444, 28.3391655715, -2.4946186443, -68.0378899682, 104.0893199171,
+ -51.8319647254, 38.8521710524, 75.9114239564, 73.9206172905, -103.2533029987, 6.9002718274, -36.6346436319, -25.1990926265,
+ 1.5852145953, -50.6438436795, 21.5018844428, -151.9305562846, -51.7326681814, 21.4475994143, 42.2564011921, -74.0520586926,
+ 49.7370635809, -13.2957534126, 36.6746826778, -31.7005492589, 148.4894964268, 79.7890632353, 16.8856024809, 16.1690460177,
+ 39.2665169484, 117.2461167794, -37.4827984831, -47.8387803604, -95.7025286193, 34.3058214285, -124.9536456028, 56.1640195764,
+ 94.3636873606, 35.3992852810, -38.3920852159, -100.5738062016, -29.7837022314, 42.9133913996, -34.2715618187, -14.3589115627,
+ -16.5935468750, 20.4574192236, -88.7897972666, -38.6285080386, 53.3203422726, 98.5991486746, 122.7305462474, 67.7902817187,
+ 5.1764117389, 5.0632821624, 21.9288789574, -78.3140512638, -21.2069682335, 23.6342010925, 34.4445769455, 59.1346766615,
+ 28.9978778000, 39.8121180845, -17.1650033520, -56.9174900874, 17.8157086148, -112.8801457350, -122.4019040408, 140.8669393157,
+ -65.4664329639, 40.6952775518, 32.7260891658, -43.2565155866, 19.3945751928, -20.1815002000, -67.6601711640, -18.1921178207,
+ -35.6802153684, 49.9550290306, 131.4925251016, -31.2940938167, -5.2848453344, -109.5580577933, 20.2437599390, -8.8782958734,
+ 54.1836717264, 7.2555852190, -3.5698316137, -51.9236786262, 6.7861547980, -104.4814551670, 45.8458629668, 70.0890876844,
+ 38.3572837740, 61.8024165129, 68.0176962024, -12.8193934080, -21.4661610917, -0.9377108815, -74.2100679061, 71.0490808147,
+ 91.9813889497, -14.5797640164, 3.5036749129, -138.3605478356, -48.1501349794, -16.0636922482, -12.1334197606, 15.0562207637,
+ -34.0878176054, 55.1075126157, 97.3829871877, 0.2053358099, -94.8713267382, 51.5460954054, 21.2966946363, 58.1331025047,
+ -23.4599044132, -19.3315856528, -8.4497193577, -1.9594679356, -33.1906549336, -144.6825417978, -57.1218958072, 35.7353406097,
+ 61.4666549819, 14.6536253128, 82.1632196866, -44.6230161723, -91.1022589278, -18.5737673927, -136.8975612334, 56.9606788003,
+ 70.7059960183, -68.2829345081, -10.2629800455, -53.6385325047, -68.7928766204, 88.2444688302, 83.1412324801, -102.9206928160,
+ -68.2329763159, -69.7552955469, 108.2132269009, -28.2582329307, 5.6685898328, -36.0392956840, 43.3269513128, -8.6436416796,
+ -16.5054886972, 11.5008791788, 39.6923606683, -28.9039554061, 13.5938214364, -23.6296332202, 49.1171161163, 53.1636857935,
+ -62.9672053166, -54.2594757384, 48.3838956696, 8.0469071555, -33.6472086213, -120.5381752144, 55.0880453111, 17.8990740563,
+ 144.9402232336, 101.7886229203, -73.3666393712, -16.4721379138, -12.7447935685, 101.8245160983, -49.7026860415, -15.1227790364,
+ 65.7430288442, -131.8695390036, 10.2750933946, 90.9752774838, -26.5859990591, -95.6962772568, 76.2174589344, 24.8796848060,
+ -38.8938223046, 54.1687774852, -37.3585968996, -34.6848570502, 33.0151011570, -55.8345877671, -3.9009101671, -31.5024971691,
+ -9.6863895491, 91.8719195957, -58.9993249744, -25.6887030614, -8.0829472205, 4.6386491741, -71.4019697167, -21.3734669095,
+ 86.2079144404, 79.6823974266, -0.0910915997, 44.8067718095, 58.7204020766, 72.6856808976, -50.3373732478, -116.1175365534,
+ -15.0884909384, 5.4593772059, -63.6553527905, 37.3460388205, -32.2399421679, 95.7569350513, -7.3700141964, -56.0370832967,
+ -41.7377150439, -42.0042856519, 12.5134312941, 93.7845584531, -32.4801087157, -33.3976050318, -24.2252126001, -46.3199064467,
+ -20.3704610276, 15.8571376404, 88.9127217235, -33.1132582267, -1.0005675836, -28.1780471904, 150.9349379135, 38.0600520828,
+ 36.4338677563, -3.3709201641, 29.7709773016, 16.5064119077, 21.3147729463, 110.6714300904, 18.8406036507, 14.8963298097,
+ 50.9975960392, 16.3991140350, -194.0805845907, -41.6723945839, -74.8991127408, -6.4587655805, -0.6883628218, -49.8709647175,
+ 194.2265120473, 64.3043624521, 16.0040882780, 68.4032551772, -43.4050313128, 84.6826289824, -28.1357565943, 134.6895584120,
+ -7.9746152680, -95.6692886462, -48.9444370342, 79.4479343188, -50.5345228122, 52.4800633307, -14.7735051703, -20.1510237050,
+ 22.5049816980, 64.4191999102, 24.8385648232, 99.4265041360, 62.0189508473, -28.3892600378, -109.8842008564, -79.0407483407,
+ 18.3408112020, 49.1650536089, 31.5419844924, -36.1160722679, -132.9148081329, 10.4053531567, -129.2463715470, -43.4602207151,
+ -24.2420653292, 91.5388317556, 21.4762248190, -44.3810909139, 18.4098011282, -45.8691164539, -20.9831197962, 16.2076792914,
+ 66.0224147666, -13.6794615513, 101.2163279622, -62.4462618603, 22.2040981785, -52.3208382802, -24.7909079016, 58.5150375093,
+ 18.8569705105, -55.6083430939, 131.0273367422, -34.5209015065, 121.4357296573, -77.2590299593, -51.5929566898, 5.0247131098,
+ -23.8451707592, -4.5912313547, 31.1387246821, 61.7019310824, 49.1912429744, -50.5836913031, -74.8182600630, -21.6209317022,
+ 20.9409464654, -72.7870824583, -28.3530746820, -45.0794425434, -13.4910629905, -62.0158772255, -34.1421181246, 44.2844972784,
+ 8.4213193211, 79.9349022793, 60.0160502260, 32.2272994080, -72.2893887746, 17.3063698247, -134.6335742431, 64.6499736261,
+ 7.1411921919, -37.5517577873, 6.2405670930, 117.1920927305, 128.7420689815, -3.1556854963, -13.4100422909, -11.9336372907,
+ -8.6022400553, -102.0033506666, -78.4696575074, 15.0765861403, -111.5219718576, -13.4162786508, 38.2437013694, 61.1637732561,
+ -34.4804160003, 107.4438003830, -79.4193067813, -81.1842853968, -26.2622970331, 132.3205425408, -119.1464268477, 67.3048866598,
+ 103.3266736715, -58.1865815617, 27.6231908601, -11.2004371750, 26.0340617206, 12.5696123916, 0.6442714420, -30.7393043544,
+ 1.5314955897, 49.9110088250, -106.1358721920, 51.1608329944, -32.8684239794, -27.7215905745, -11.6450303367, -36.7731678028,
+ 59.9383486599, -4.6301990580, 5.0361682939, -10.5669407980, 124.0908762205, 35.8305364082, -123.6216777114, -74.2569079167,
+ -56.7651776816, 16.0736385582, 23.5030632215, -110.6764295938, 44.3086821806, 9.4452708243, 5.3300080251, 39.0483916714,
+ 151.4550562868, 62.8957092621, -116.8103461233, 5.1129927759, -33.2252515135, -9.4522506046, 22.7026048372, -15.5264414569,
+ 71.2087620034, 19.1191568332, 50.3019546809, -5.6096922409, 22.9344126462, -7.7591876203, 31.8949515564, -58.4253952381,
+ 66.4341297173, -19.0583083044, 96.7695087855, 20.4934280047, 4.9544603116, -20.8288135920, -173.2659655408, -62.4883621640,
+ -48.5528422703, 12.1437504278, 60.2482234666, -19.6072312919, -34.6320214291, 129.0089698963, -50.9042160618, 98.3952661477,
+ -4.7051792479, -13.1768910826, 69.5138802139, 58.5748201565, -45.9385652563, 151.7952104306, 34.2541941013, -58.0417838381,
+ 28.1480473670, 46.4006562684, 97.7001828545, 4.0855607626, -32.6097018162, 16.8913949959, 105.7266202978, -89.3978374651,
+ -60.9338593128, -41.2220734230, 49.9393070783, 95.0974764854, 49.2498366456, 58.6214364590, 34.1113830569, 45.6634098874,
+ -22.5356086770, -97.1978653617, 86.5565049535, 70.6118545777, -30.6978082909, 118.7238621666, 14.5922386932, 11.3449652072,
+ 65.6007783405, 82.6369678204, -52.0390492248, -47.0160551227, -95.5142448634, 99.7162626888, -36.5523815090, -42.8042935534,
+ 68.3566199798, -13.8451547552, -71.1629911780, 36.2989433752, -32.4867163365, 112.4079947071, -75.6295117422, 47.5276421639,
+ 51.8078250755, -26.8715188457, -9.6291144797, 40.1999849640, -38.4634033246, 40.9764960915, -26.1715730268, 36.5996396515,
+ -26.9924731886, 53.7879986570, -83.1658398348, 23.6381378489, 43.8794937753, -55.4133836419, 90.0266130838, 14.1036181982,
+ -18.1225736715, 85.1363181151, -62.5970846379, -18.5291947838, -25.7341986703, -49.7061342931, -59.0442763971, 50.8960636803,
+ -87.6471123430, -36.7217762531, 22.5952364054, 11.1107885650, -0.5377327229, 160.8145792630, 73.3103441505, 10.1656872354,
+ -50.4554350397, -57.3478171016, -15.4201715357, -26.9135446491, -4.9891264771, -37.0226770057, -80.9919535641, 50.4418660876,
+ -25.8517575250, -69.9538258421, -17.5730160671, 15.9405836751, 113.9545230349, -46.1040379057, -94.2458635014, -69.0338522452,
+ 43.5813790265, 107.1836101171, -55.1012654323, -77.1529555887, -33.1530320656, -94.5582659641, -53.6837586872, 27.0680381378,
+ 93.9385415207, -61.0955216188, 18.0530957225, 7.9150142320, -12.1218191587, 34.0173961457, 40.0084937565, 9.8119275580,
+ 44.2065861274, -1.8718514394, 67.4740024215, 46.7391150131, 207.2404815875, 45.1635364462, 43.3580102761, -44.0244218674,
+ 83.2387206007, -8.6441851856, 12.3993902588, -22.5091685270, -19.8332981376, 97.9196509289, -76.6720306234, 28.9740705859,
+ 121.9415248016, 9.6656982611, -51.0996453694, 37.3704374740, 74.7589840907, -113.4066752631, 120.0029566342, -105.3786221360,
+ 81.8152755619, -13.4979932982, -21.4680758393, -85.1088235539, -65.3610798409, -35.0444139470, -48.0220794487, -41.6210317362,
+ 33.1212995259, -82.1480936443, -10.5479715135, 76.4601917004, 42.1983651157, 92.6104239912, -42.3536237955, -24.5644182272,
+ 30.4446637772, -90.2899420489, 63.6723540422, 103.0895811428, 64.1706769263, -10.7069812309, 21.8927240409, 6.3571071738,
+ 57.1457649358, -52.9866276448, 66.0981829072, -29.5372056881, -79.2252039810, -136.2440652798, -57.0106422562, 86.8203548141,
+ 66.4244149837, 53.3230426111, -66.1283059222, -131.0402660353, 8.0548411081, 122.9088988100, 1.2626894208, -60.5059112373,
+ -68.8707203082, -6.4747987200, 85.8411327244, 99.9624156733, 90.4197864338, -35.9630441182, -22.9158275507, -17.3660128776,
+ 16.7845345761, 34.7219749782, -39.3513765878, 1.0460702756, -60.9494500182, 20.0900333387, -85.9636743832, 88.4400782168,
+ 15.0729628728, 61.5499846243, 11.8579871757, 107.8617581581, -42.9393027864, -62.8422307621, -19.0589600542, 4.0750325807,
+ -36.0651825425, 55.7638724501, -10.4691736080, -55.5672537178, -61.2061519915, -21.1885348576, -131.2535612498, 24.7463552676,
+ 22.9426321237, 14.3038202264, -138.0926317438, -59.0892900856, -162.5416439986, 7.1307658250, -141.1236672256, -4.7173618068,
+ -16.7741532807, -68.2615451173, -2.6608701102, 84.1978109826, -11.3446202072, 59.9630033088, -1.8994925010, -37.9301641959,
+ -119.4435600954, -11.4587491646, 12.2423215240, -7.3169898616, -67.0373621128, 36.0198843055, 53.9791315249, -134.5885680695,
+ -83.8330811965, -16.6714816463, -8.8498552035, -24.0513088196, -22.9444328877, -37.7961441531, 25.1975736186, -136.1611637464,
+ -5.0843464033, -10.3939554694, 20.7422826935, 75.6854136623, 46.4179626736, -57.0052830175, 7.3457235521, -51.5504447254,
+ -158.4375751701, -200.2426967181, -48.1234996261, 1.6623945527, 21.1746524375, 99.4092980367, -2.3206772903, 45.7989166757,
+ 2.0181548348, -88.0556010969, -59.1527212096, 47.3607925077, -10.4181140309, 56.3558125650, -8.9799125560, -30.0376711812,
+ -36.7132904688, 35.7785050392, -13.0763909369, -2.1855594714, 18.1550954005, -28.6711803575, -55.4495172398, -2.8812973198,
+ -59.9575059158, 40.0588875786, 57.4713686602, -3.2835144853, -36.7193552111, -64.9415131516, -166.9555466445, -23.5556853844,
+ -54.9408569587, -35.2310451959, 21.3345143458, 65.7590671151, 51.2214538168, 46.1271939944, -42.2235267919, 127.2329928299,
+ 105.2391778600, 17.6726845966, -129.9021148044, 8.7065613044, -94.0987112511, -3.5375742950, -23.1385452379, 60.6219530633,
+ 92.5445564235, 48.5111974469, -52.5699309159, -60.0634811685, 25.9034368684, 140.0249495491, 1.5918852392, 38.0266038291,
+ 17.5588710703, 3.4294066089, -27.6748782173, 59.6182974489, -35.2924781853, -38.6198576115, -13.6119803198, 7.8375587489,
+ 22.7250686519, -28.3524510951, -34.4269062817, 22.6464817325, -61.6528147860, -5.9782002429, 61.4730771294, 43.5582379527,
+ 55.6862408270, 87.8745651631, 46.3401042715, -19.8780979663, 74.1272633369, 29.8590452377, -12.8665765140, 34.2931401219,
+ 53.9279617551, -16.9017895140, -70.1527553166, -79.6367897992, 109.3728271017, -129.2214826835, -53.4644539730, -51.5654458993,
+ 17.6062148433, 3.5090251835, 74.2615941204, -109.3431097845, 40.1403465151, 28.8714561280, 94.0868659302, -19.0047033845,
+ -60.0967410050, -19.0998457619, -67.2027075128, 72.0711434846, -17.8737851232, 123.7050551274, 132.6331504104, 25.5018761009,
+ -36.7817189239, -29.1580893235, -6.5848563828, 90.2868948516, -35.7017258498, -68.5675432955, -52.4888589786, 47.1377730021,
+ -7.4546621940, -52.0657517138, -49.0404829633, -114.6910280126, -117.6819819437, -32.7856729408, 31.8232065591, 12.1192973039,
+ 35.2678513420, -1.0336778293, 30.7021249679, 127.0442906046, -84.8457819393, 28.9862843096, -47.3524701726, -126.1094998460,
+ -2.9700276582, -2.4956545870, -53.8624121141, -85.2114117637, 76.9057985618, 137.1205201755, -19.0830817212, 14.3407526579,
+ -56.5921994449, -25.6084873186, -44.9470801106, -133.3139496090, 0.3487447576, 33.4499716730, 34.7126257844, -9.3307383323,
+ 27.2996276947, 10.8765676134, -91.1032360444, -90.9584216222, 1.6981490570, 96.8557438791, 56.7726390913, -44.3246449237,
+ 52.3260643361, 21.5551140465, 27.4535327381, 2.0072717479, 7.4823125629, 77.1185863870, 16.1372262663, -10.7206012957,
+ 66.8830091413, 49.3523828287, 54.0855375598, 30.8570349345, -10.9255375390, 62.3910624674, 30.9238561381, 0.3352881853,
+ 72.1022806197, -28.8319885008, 23.3335288806, 46.8999035980, -67.0984424822, -164.7917209112, 42.5767681360, -92.4668227688,
+ 43.8491734282, -17.1126540408, 37.4819594334, 69.0774409673, -39.3530526854, -14.0693747124, -60.2520781215, -80.3860105519,
+ 32.6689956840, 15.3393042576, -18.5529761307, 97.3942151573, -4.4462855745, 13.7614349817, 158.3358780719, -44.7258299667,
+ -17.7741912819, 116.5136962268, -33.6261057820, 22.8344441288, -155.1423976144, 5.7070117893, -22.7906543902, -45.0633909283,
+ -13.9329987929, -66.0848932507, 1.1383038109, 123.8386958483, 67.6662401589, 45.9152963554, -27.4397697462, 97.9596747354,
+ -6.3544655181, 29.0832146722, 96.3468162499, 32.4535976137, -91.0650399301, 2.7293262791, 70.7853483111, -92.3655274571,
+ 69.0359217256, 83.1530567979, 35.8375091111, 7.3393552348, -95.1770165365, 76.4905790891, 55.6253140577, -29.5315327050,
+ -19.6571455162, -65.5631159968, -16.1022064890, 105.8715375468, -51.8381429466, 120.1887801783, -12.7792505862, 45.9625293061,
+ 5.2249771246, -44.2522411781, -49.9151046218, 58.9294840166, -39.5237729290, 7.7590557538, -36.9036719322, -13.3726971638,
+ 54.3809777660, 71.3070336679, -51.0631236639, -10.0694214486, 15.9743446435, -49.4179644909, 118.7626471706, -53.3128484840,
+ 13.5615377463, -109.8892656203, -42.4445411536, -66.3623671033, -14.8179688320, 76.6614429072, 11.1173310385, -44.0756061917,
+ -31.6081137549, -112.6622817309, 32.5091400724, 33.0802101919, -57.4339078738, 56.3466203876, -17.0577340891, -95.3692048341,
+ -67.3434566840, 13.8207460717, 48.9375767823, 7.9881518802, -33.7163627475, 38.5685408163, 12.1465400224, -107.6320581108,
+ 4.0618423016, -78.4521092994, -86.1605081811, 76.0528521785, -7.4505556232, -32.6671595550, 28.1668313458, -44.3982773094,
+ -17.6420279051, -31.0505367972, 21.8444018590, 29.2596019459, -15.0890859227, -13.1393295693, 2.8101074170, -17.7888538827,
+ 32.0378687652, -74.5375953900, 135.2497294704, -28.0677270675, 73.5721900551, -66.6873287357, -25.1872324027, 66.2043845748,
+ -94.9847220021, 51.0053667797, 125.6199200698, -97.2966230203, -100.0987757765, 38.7851883798, 20.5509402780, 91.2789361356,
+ -23.6347319001, 53.4814037964, -27.8226699628, -4.2998301656, -49.0060086613, 57.7107938724, 73.8228091191, 39.2104809606,
+ -27.3049570759, 78.3558930717, -39.1465109393, -59.6714099634, -71.7254332281, 44.0304489875, 62.4610534699, -47.5531388302,
+ 62.3692165629, 6.4426089142, 9.0422858718, 23.1735394482, -47.2878667545, 44.2020612249, 109.3032846597, 11.6805260558,
+ -30.4758154602, -82.4704834090, 38.6561095453, -55.4482370852, 8.5232602822, 133.2611664825, 100.1432731096, 22.9595423699,
+ -100.1659221126, 38.8223174175, 27.7691674207, 126.7418939874, -91.4494781699, 141.2081002115, 39.0632821221, 63.2623914663,
+ -30.0221078403, -33.5477169622, 29.1082028625, -3.3848571660, 61.5724672364, -34.9602677014, 110.9349405045, 102.6143795477,
+ -57.9940910047, -35.2709261901, 16.7143230992, -40.5324218543, 53.9355486697, -64.2634715959, -54.9387762268, -42.9168088882,
+ -57.5562950128, 37.9068250889, -12.1446003699, -60.1702164080, -20.6508515440, -98.5324628329, 101.4072369572, 129.5400369054,
+ -81.3566359702, 50.6071670655, -120.4768679404, -42.4978466545, -8.7364843153, 49.6150365421, 122.5389217747, -17.0756316445,
+ -62.3577228096, -45.0934187476, -32.0622747717, -30.5522096168, 28.4509994932, -38.2485520772, -50.1501458954, 33.6999850082,
+ -53.8053116265, 5.7733509059, -34.6589594313, 126.1617129527, 20.7567771895, 172.0372861812, 89.0892733767, 100.7503861649,
+ 7.3378103261, 98.5906415363, 32.0129761463, -41.8886119031, 41.2269067119, 68.3876187817, 138.4871996142, 11.3975797943,
+ 77.7316432733, -158.5764699010, -73.0154932162, 4.7811847147, -23.2377092445, -15.8949240362, -11.9056513173, -152.0900719578,
+ 18.2632385344, -54.1998869586, -181.7000796389, 48.1068217262, -32.5550981417, -28.0507229974, -31.8419308387, -25.6072993087,
+ 19.9544408703, 9.3745877673, -83.7112773954, 69.9469812476, 103.7806121094, 7.5661034347, 19.3961679774, -33.6734450687,
+ 145.2662801261, 84.6823084936, 3.8883005529, 16.9248666945, -16.9581909221, -89.4228081883, 16.2888634344, 11.1954888184,
+ 2.5472628157, 18.3389344143, -151.4283735338, -34.4147990116, -25.9480238152, -25.5347276158, -64.8106533195, 50.6575131879,
+ -7.3028646826, -32.2126924117, 18.1267061221, -16.2075818210, -45.6339941841, -33.6697120217, 49.2624187554, 77.8687058107,
+ 73.6069588809, -40.8028084671, 18.9768190808, -30.7579639537, 42.1813346527, -83.5367163130, -107.9332971302, 7.6029737222,
+ 26.9032374575, 49.3843590700, -46.3813865337, 9.1625140590, -66.2444573706, -81.6335790942, 38.1352819102, -26.9099106066,
+ -73.7453409821, 120.4931605467, 10.3564307049, -106.6178964489, 95.7043175624, 33.5246942332, 47.6828732088, 88.3229069791,
+ -15.5217019654, -19.5431169450, -3.8342503054, 57.2251891575, -48.5444916144, 71.5434047188, 12.4489765266, -11.7576981068,
+ -55.3127919285, 17.8351394582, -103.4011502717, -4.0445991564, 15.2952711643, 136.5345440142, -63.7492382166, 36.9305043452,
+ -1.5952862211, 16.2532277000, -8.2697982122, 59.2373828733, -114.7747262875, -10.3140845306, -30.5291082162, -109.5521180147,
+ 0.0880047356, -26.2704646488, -5.8324862328, 51.9555476050, 179.0193630333, 35.7565163112, -25.6830342083, -38.6240101524,
+ 7.1156497155, -38.9184661158, -44.0206559654, -61.9671745846, 49.0909411685, 30.5438751442, 61.5412933030, -24.2114612829,
+ 5.7471838440, -18.0880708776, 71.7203646740, 86.4088528992, -58.7737324960, -57.5055785792, -95.3936802143, 116.1138906258,
+ 60.1792035622, 56.3771096083, 49.7396983038, 38.3766351111, 69.8500772704, -49.1498577356, 70.3558567877, 8.6780858427,
+ 34.1723731409, 15.4734742852, 109.0630331552, -121.1548202826, -48.3994829024, 30.5337026074, 24.7828521521, 42.0584760304,
+ 75.1343090013, 129.5812051166, 48.4270407054, 26.4055953415, 14.0152471956, -95.9222273011, 90.6485095604, -14.3202487407,
+ -67.2852187582, -166.6666517028, 40.3833373200, -36.1005828038, 95.8066175560, -35.7716615894, -49.1292761932, -129.7066955214,
+ 103.7802140124, 1.3540192035, -11.7154031368, -33.6798122030, 38.8567068892, -13.4661723261, 27.7129532179, 11.5232210014,
+ 23.1346883982, -31.8376649712, 43.7429902892, -6.7521035668, 9.2376550661, 49.7442294743, -11.0442544230, 86.0728321584,
+ 83.9184836462, -16.1275908347, -18.4328902788, 29.0599791766, -119.8140170048, 6.1015865800, 8.3430418870, -26.4676140800,
+ -54.4170405827, 65.9500246661, -68.2589172652, -67.8087618276, -32.2785464329, 15.5784741177, -40.7911512889, -30.4549351749,
+ 65.3973162901, -88.7812378733, -100.7984347025, 33.8660362781, -29.6824618124, 43.1980425632, 28.3570049344, -53.0517620662,
+ 77.8517167497, -197.3149986900, 39.9412966213, 64.7267960844, 9.0985185643, -48.2516330353, -25.2702193655, 43.5324967389,
+ 25.2174278973, -143.4955124244, 97.6996202090, -6.8156183641, -24.7105412789, -82.1407130477, -84.2647074618, -31.8474816146,
+ -18.8364319750, -39.5505715225, -54.5495977905, 17.7158231401, -3.7065472234, 57.0344653317, -88.5539921734, 19.3061972587,
+ -71.7736386745, -41.9757523004, 44.0839025453, 93.6350283513, 23.9985071911, -82.1811236502, -109.4369907962, 63.5407415232,
+ 8.4092298502, 28.4295805746, 18.6411321700, -5.3460515491, -67.8392754185, 38.2413165851, -48.3890309482, -84.8999016731,
+ -96.8897430524, -108.9709380233, 12.6763008215, 0.6495692893, 42.5729352890, -45.4201114101, 178.6503517211, 32.3364256219,
+ -0.5018953239, 85.4524577539, 31.3821199920, -77.2752461536, -22.5276539124, -73.5513316548, 39.4443099153, -85.5453904099,
+ -92.8231923388, -40.3971881753, -58.4187011919, 43.8859268482, 8.6368900854, 36.7106300359, 46.0279473438, 98.0046308108,
+ 141.8908992398, 99.5148913015, -117.8125705364, -39.1830583755, -7.7274169732, -48.2601982254, 62.7987036515, -214.3028855312,
+ -63.1561162569, -16.8220689219, 25.8725009221, 122.4301600524, -14.0054049372, 34.6312211243, -80.1152116439, 19.5089176613,
+ -55.4531957952, 50.2925094566, -34.9023849044, 96.5932330242, -23.3903984041, 18.8379347047, -142.5109851060, -26.3638740038,
+ -45.2635268905, 10.4556800933, -67.2064627051, -82.5693793971, -61.2994401437, -60.8623342608, -49.5256808732, -67.5095279686,
+ 109.7221898389, 30.3565964773, -3.9295411009, -13.3243471006, 31.5325109517, -42.7881917663, -62.3012601651, 12.8902122674,
+ -72.4707062966, -1.1385459373, 31.9714183017, 25.4392014670, 5.2034169158, 7.4078411122, 3.9210252522, 5.6054243531,
+ -13.9283618935, 62.6605467523, 106.2229553720, -108.0346097164, 45.8846468124, 63.6694544818, -10.1426865266, -101.2125032732,
+ 84.7788854892, -74.9877442652, -90.4102888654, 82.3491489235, 13.4299871406, 8.6923780794, 21.7402751068, 1.3078400943,
+ -5.3323741070, -40.3811284623, -2.8868770078, 160.0268532699, -25.4997503943, -89.7351898498, 47.6695601274, 134.7207474765,
+ -28.8772848263, 43.7271906311, 7.3228230169, -96.1850462320, 35.8869106751, -11.4777855539, -25.7781856921, 48.9895273966,
+ 13.8032764481, 14.5942766183, 5.8336013315, 87.6897796695, -13.6765032835, 3.3883927453, -158.3668079137, 42.2382326860,
+ 21.2461344076, 15.6945936663, 9.6604677279, -9.5678778930, 123.3597739656, 22.1167117074, -74.9824011460, -95.9807585582,
+ 63.4915942695, 94.2011376357, 9.1392063086, 11.0696792396, -61.7781744244, 32.4342673236, 47.9943613167, -144.1319767603,
+ -72.7895423040, -51.0997685900, -1.7995707656, -94.9206104086, 72.7211674226, 58.6708314320, -20.8389738301, -21.1038399946,
+ -16.3313082354, -9.9622712842, 25.1381713884, -43.3630408732, 95.4208180249, 4.9957713162, 139.7419301257, -78.8102530942,
+ 18.4468841849, -36.6529768792, 32.8656605850, -13.9061010905, 25.3836067009, 29.3018838146, -3.3243716283, 19.1868542168,
+ -24.3576227747, 35.5704128749, 9.7305659636, -28.0698496733, 80.9991737110, 44.1711909705, 67.2428623477, -51.3139105230,
+ -84.1430177559, 48.3068887430, 9.0115749848, 14.7342922983, 69.3129475126, 15.3916339055, 19.1526114590, -36.2384578425,
+ 36.3072041758, -2.7831098993, -79.5517384898, 2.4496975564, 14.7441805304, 168.3353222077, 6.4042017907, -94.1108499663,
+ -96.4470728057, 93.2974672034, -25.8910707915, -109.8714867373, 19.6739537972, -25.7283734173, -63.5666504767, -13.2751224909,
+ -6.8369303742, -44.9757631953, 59.5220216584, -36.6656623877, 100.4234528842, 39.7179675926, 100.4793677526, -86.2364278236,
+ -92.0288292261, -103.2337376347, 44.2981800782, 19.1367051770, 13.8984402872, 58.8220815831, -77.2361735490, -114.4879467592,
+ 89.1682762205, 51.2266997372, 81.3502982945, -21.5959593928, -11.6326571964, 8.8353642779, -12.3913359429, -23.1216638844,
+ 0.3575351650, -18.2903762351, 45.8302612836, 80.6428162262, 59.7892572555, 60.1876610526, -145.2533267974, 106.2800108239,
+ -18.1569484863, 78.3937893751, -85.6984739674, 25.2366777542, 61.5343531109, 140.8219730338, 47.9603484021, -66.9887369929,
+ -30.6392044667, 52.9963805955, 62.4415105078, -90.2869564132, -24.2283129464, -99.9584280390, -43.1587468514, 34.3760232029,
+ 89.0356907077, 22.0053768451, -53.9159785951, -25.1650972100, 8.0202661814, -53.6342885367, -7.1736148465, 109.3934027137,
+ 33.3102237776, -81.7593644113, -31.4758286552, 37.4778685110, -22.7494345710, 2.0108643659, 46.8251888594, 55.2739450714,
+ 25.5904497373, 80.2180417943, 60.0712983927, 5.1023725171, -55.3981506793, 92.0411889173, -151.8431761496, -17.8889138320,
+ 13.8369339480, -98.9537744078, -69.4129195296, -9.4399479020, -4.5486917569, 3.8311487140, 17.2656994939, -25.4507802631,
+ -42.3325354568, -16.6440745458, -133.8308014681, -25.5109360172, -23.1019754685, -113.2804091682, -14.3636580071, 87.9235056149,
+ 72.6206212879, -58.7137643393, 167.9006741193, 39.5232107063, -6.3630485808, 71.6621087431, -114.1539708322, 101.7815598753,
+ 27.2475470378, -54.1505303371, 30.1111783717, -11.9959488516, 19.4405070791, -108.4745463396, 71.0642431926, -19.8129431719,
+ -15.2954756654, 14.3561030921, -16.5356371988, 52.7783287094, 28.8939941206, -17.2842243626, -133.2248386977, -83.3404111930,
+ -7.0104157691, 22.1756809435, 3.2730114916, -32.2394014930, 20.3115837303, -17.1488805354, -42.1049764681, 64.9096377499,
+ 7.1989366097, -54.9327048635, 27.4112784568, 12.8647289850, -47.9584681630, 28.1940916618, -77.7181004478, -39.0254847210,
+ 14.6762624107, 32.0630508538, 73.0143676987, -22.1015540909, 41.9874345585, -2.8858853990, -88.0645760668, -90.5936909394,
+ -17.7732180284, 118.5661779332, -66.7797486036, 50.5937256974, -21.9300412969, 32.8513839567, 9.2389232325, 7.6133233529,
+ 11.4306872743, 86.1899246751, -14.8265560191, 14.3516516628, -81.0949021047, -14.0165322751, 6.4193008532, 91.1325356747,
+ 136.3161040384, -79.8056934391, 48.3720074062, 184.1908593323, -1.2350224948, 104.8017124353, -70.7660168596, 59.8117635799,
+ 38.9768188797, -92.6445519451, 38.4757633507, -43.8909508451, -68.7430495433, -33.5503051820, -45.7745564558, 23.1582292853,
+ -53.0556301244, -84.2076950671, -11.0754062672, 59.8325332450, 115.3577555552, 6.0322991520, -27.2020584628, -11.6601684536,
+ -19.6192551137, 63.6069935939, -90.5530529832, -65.9660360514, -17.4108821433, -32.2870508580, -18.8912458596, -13.0325547618,
+ 15.6951179243, 52.5832125410, -5.3522907337, -17.8679842370, -29.6421416058, 54.8215269985, -33.6000150970, -17.9637151319,
+ 38.7672649613, 15.9768537914, -36.5384968894, -25.8899064866, 143.3564174538, -16.7027387067, 112.4635318759, 60.9380860218,
+ -12.5989262156, 65.1545135722, 68.4448023234, -26.7853957961, 93.3277464713, 103.6052678753, -67.2083365675, 17.5708362440,
+ 54.8826954360, 18.1508430942, -39.3842844795, 37.1447880280, 57.6547054454, 9.2814912808, 108.2432242472, 32.8556189396,
+ 94.3226005359, 5.8586602054, -110.9028458371, -51.1302011664, -16.0219070131, -7.0598649579, -176.6996383318, -49.6407750992,
+ -66.9977026952, -89.9496950726, -53.1942620674, 34.9304683629, 30.7056949448, -64.8309845749, 73.0371656315, -13.2113288868,
+ -58.9585474923, -49.8700242642, -6.1582020634, -145.9633036671, 46.6807699026, -9.8057958623, 45.5962806826, 17.8413742472,
+ -45.1844288752, 51.6533061953, -18.3891326987, 86.2944939973, -88.4475541046, 109.7385814010, 80.2606871510, -6.8687112951,
+ -40.4305300274, -68.8038418728, 98.8182955892, 45.0578128678, -17.9270836619, -58.9964717416, 11.5983932225, 9.3557201268,
+ 40.2977049475, 138.6920714505, -107.0950700047, -8.5417944988, 76.5742734827, 99.7719961192, 33.2465872494, -130.9955599444,
+ -29.2255022084, 35.8580665719, 35.2949239487, 47.8913285775, -23.4340430256, -20.2468230117, -129.2315852983, -43.7204390811,
+ 18.6427890127, -14.5256762331, -114.5390628737, 83.3822028084, -3.5819486705, -30.4441161689, -112.7352247162, -109.1237973030,
+ -1.2881432609, 102.3673365896, -56.6529958750, -17.8832422128, -83.7875095740, 27.3286576586, 28.2690336934, 11.4666255287,
+ 52.7806502871, -32.3964403795, -11.7703336362, -26.4802375579, 1.4830249909, -46.7745447418, -179.0106845682, -46.4060214919,
+ 13.0495006806, -15.7093018033, -23.0652411102, -46.8891647861, -11.2767379154, 54.4284213870, 61.0257369233, 25.9537772478,
+ 32.1447676269, -55.7565993845, 16.1980837538, 39.7108201653, 57.5494093425, 25.4753658982, -82.6747317912, 32.8120846114,
+ 94.3963947400, 115.4928024657, -103.8033683890, 0.5505661357, 17.6017067223, 0.3340989298, 11.4554380855, 60.7715773549,
+ 47.6023333479, 8.7147095957, -12.4689201501, -38.3317139365, -70.8372336044, 19.8454635262, -32.5311981944, 16.6656528545,
+ -99.4051451760, 52.1836216170, -36.3751695538, -168.5804600081, -12.4503257083, 20.3254098853, -115.3933821008, 99.5221568068,
+ -65.3861194417, 28.8829913431, 180.5755173101, -52.4724526473, -17.6810674060, -36.4748431538, -0.5256538571, -55.6217233478,
+ -21.4129350702, -62.6552175024, 43.7806633668, 68.9822663027, -103.7310445758, 24.8680657731, -23.1804371879, -19.6865562980,
+ 86.1256756588, 43.1915528025, 64.5202069909, 11.9433963783, 59.3956955884, -136.0065807072, 54.2444425795, -28.2438980841,
+ 27.6881277816, 3.3966585075, -23.2714416081, 56.2708787997, -104.6936674005, -56.2472159428, -66.3373352615, -79.0727896373,
+ -19.4338276833, -81.4066241391, -7.2994007916, 104.0111560011, 19.2521825910, 39.6171092266, 8.3114594881, -18.6024599138,
+ -55.8404695603, 28.7502170881, -35.9621183078, -83.4040376758, 100.9786890719, 43.7353110787, 58.0923223162, 158.0571243490,
+ -89.5270222788, 35.7263973066, -85.7794526924, -44.9442606374, 52.4649663641, -16.2400821703, -137.0501146883, 33.4104950855,
+ -66.4055049018, 20.4444710408, -58.9392047771, 93.1083108145, 30.4506487034, 110.0306666973, 9.2409143811, -24.4812544449,
+ 74.6860947628, 40.3769192483, -16.9497053699, 14.5576684325, 52.3350907389, -25.2007169663, -125.4063020221, 62.8691359335,
+ 12.3811488011, -49.4397264264, -45.2008829472, -45.9893935646, -51.0423101211, -13.5776298651, -117.3962715914, 20.9725891298,
+ -31.2377986416, -66.8022452921, -52.2545297076, 36.1808304465, 105.2804289847, -29.7408485717, 35.4936891096, -44.1058624503,
+ -7.4267543746, 45.9626674865, 43.2586644116, -84.9652227215, 52.2598894211, -27.7731305158, 79.4055411705, 134.9211049595,
+ -77.7683897577, 38.9772600887, -42.4478182670, 35.7767677279, 120.4883485663, 40.9080290988, -52.2908368677, 10.8332681424,
+ 103.8755744034, -69.4025590672, 63.1667239359, 51.1565115511, 30.4688205979, -7.2886782047, -18.0942283768, 31.5953801065,
+ -34.9573251248, -43.3238802424, -20.2265574149, -41.4045853426, -156.8022185924, -20.3378496469, 5.4144969666, -49.4467840461,
+ -27.8246258947, -36.1553394393, -40.4493178373, 13.5989840626, 69.9757376469, -60.0443280971, 3.4638171519, -141.4361514658,
+ 93.4118114115, -7.3645097888, 2.0470465032, -54.6478723026, 7.3294655198, -6.8416716006, 9.0045502006, 19.8489919128,
+ -6.4702933570, 16.4343253942, -10.3891055517, 100.4561542312, 29.1536913142, 53.8464057947, -16.7143417688, -153.3024265390,
+ 45.0496791201, -0.9943534787, -20.6269990550, -50.6212419282, -24.6576988474, 59.6066172704, 10.2122652005, -40.4195486296,
+ -29.2714128060, 62.6802622802, -47.4202386064, -34.8309723516, 79.5197299960, -20.0749434197, 169.8665850989, 98.4267485076,
+ 31.7347164541, 37.2604966566, 6.7605021281, -50.6903490963, 6.6127852698, 151.3469256096, -70.3184827662, 164.9601379841,
+ 92.6205263551, 69.9026079183, -31.0866155998, -34.9956145613, -9.6578985782, -32.6789267529, 80.3319506579, 91.7685176440,
+ 5.8995239218, -82.0636944263, 29.2086774264, 14.7724289401, 66.8988379781, -24.7460191895, -114.7525174298, -32.9732857706,
+ -51.4321208184, -66.2382282862, 21.2981329623, 9.1062826547, 125.8754077125, 51.0615189986, -96.7297998983, 64.9965050494,
+ -71.5111010300, -180.4535252581, -56.1041777677, -3.3591726481, -74.8271358166, -28.4281456554, -70.1818488305, 35.6835607015,
+ -13.9275123287, -83.1043490068, 22.2289783248, -95.1448030958, -40.5966123003, 11.8470675380, 106.6983680147, 52.7565554571,
+ -50.5809140712, 62.1951780988, 92.8998044629, -110.2770489118, -5.7088922157, 13.3095896843, -34.0434382314, 41.5967680846,
+ 7.1406890165, 49.0800572858, -4.8661130870, 50.1732411845, 21.8791360144, -20.6230498949, 33.2629053316, 34.8156585726,
+ 7.7974775850, 85.5360926916, -19.6603301120, -13.8088176043, 77.2247366741, 81.7615386790, 29.5025756045, -202.4477185665,
+ -31.0440373761, 119.6975128752, 46.8351618237, -36.0825651455, 52.3228058699, -61.7212902449, -37.0009190140, -111.1411485112,
+ 119.3548750790, 7.5570310830, 6.2657871086, 49.2259611245, 49.9691348215, -30.7394519018, -60.1418076104, -59.4870457446,
+ -111.9152565690, 124.6406880479, -47.4604425483, 13.0533325061, -76.5307924698, -60.2632649204, -28.0947702114, 5.4878397959,
+ -83.0541772262, -3.3172056420, 20.2732863285, 29.4076349749, 47.3392948241, 55.3208777615, -32.1444489144, -23.6019236678,
+ 61.9602080076, 41.6812616408, 30.8111928268, 21.8108462337, -24.6948175247, 16.1446229981, -15.8735793778, -24.1870889577,
+ 27.1864566801, -50.6435004599, -145.1098728714, -75.7531085939, -4.9397756888, 74.0940849050, -53.5740454881, 28.4600455809,
+ -64.1804054310, -56.5695284341, 45.7257738714, 27.3208227413, -87.4969438966, 96.9999840115, 26.5098283187, 75.3671956291,
+ -39.9875814398, -71.8080566179, -64.7909433975, 112.6208244120, -57.5455840916, -9.0666084922, 36.9334781097, 69.7260235716,
+ -47.6511701810, 48.9455812098, -19.7303239899, 34.4780933174, -24.8188130996, 1.7918733164, -51.1027083896, -8.0414842387,
+ -69.6904961677, 91.4021012418, 143.3158713687, 127.8431865361, -76.2463415340, 77.1863865583, -104.8165933906, -82.0491770730,
+ -4.2452881018, -29.8857354449, 39.4203383204, -78.4428804183, -67.3737881273, 45.7774162557, 43.1510666403, -38.1227007212,
+ 48.0367915577, -2.2796749550, -147.5309258951, 59.4609063787, -94.5201743634, -90.2713711080, 83.9499629394, -44.4267785769,
+ 66.2311395310, -19.8654393787, -40.9657871591, -7.6100345494, -153.4687135715, -24.0528389453, -43.0977703429, -32.4544558717,
+ 27.4626014725, 61.8263048101, 8.4949142219, -120.4489043103, 9.2738852281, 65.3309688121, 44.8133466197, -37.4373241359,
+ -83.9640842471, 23.4059670119, -93.9143209007, -55.4183425033, -93.7449781980, 74.3227981579, -11.7471950643, 84.3803942002,
+ -31.4489037424, -1.8363204298, -55.3456417353, -95.1228021775, -55.4637768242, -17.5611590555, 8.6597790424, 19.5417857682,
+ -17.2507716259, -5.7889755948, 70.5139270183, -26.9177828140, 39.6037632634, 4.0845034879, -59.7156630403, -55.4689095772,
+ -58.7669735168, 62.5057414231, 50.1807875376, -49.3189045747, 15.4287355682, -8.0824504769, -47.6198199719, 15.7657690255,
+ 24.1207871994, 27.9173027164, -12.5261250855, -19.0257872712, -82.0154379577, 76.9194034147, -14.6695769647, 1.4844193915,
+ -7.9956835409, -55.6156194033, 39.9952855598, 51.1083969228, 48.8829532142, 62.7988625371, 51.9432398511, 2.8722062155,
+ 156.1476408615, 37.5905889544, 54.7112433550, 80.2943943272, -6.5627640190, 88.6335213431, 112.2792767414, 21.0878200837,
+ 5.8741152139, -19.6667337723, 33.7905147067, -34.2798965801, -26.4594706418, -15.0765526773, 91.5802201722, 85.4145356413,
+ -36.4818922051, -147.9028534383, -42.1412753623, -27.3632859684, 44.0453194249, -19.1027467398, 14.3157309983, 4.1768734004,
+ -68.3022440228, 34.2186781120, -10.1854692365, -173.8586421151, 56.7091031998, 2.6538298634, -93.3821299316, 45.9499799668,
+ -11.8122305624, 26.1216815300, -61.0880687199, 73.1945783047, 28.9339417573, 42.3531539412, -71.3262502743, 85.4828937399,
+ -66.7918044637, 5.4192940999, -81.2977956585, 88.4998783552, -8.8973642437, 18.0257683389, 0.2933847454, -87.7509230128,
+ 1.4360726567, 57.2432970677, 103.3736004675, -33.8595106764, 36.4856625370, 87.6767927437, 45.9257522623, -91.4882358338,
+ -43.9564432991, 36.8048295224, -155.8735354347, 78.5839166200, 21.7365316114, 2.8251251119, -0.5016069183, 50.9050618615,
+ 14.1865751800, 53.6974572195, -47.3239324031, -62.3187399635, -109.6783459490, 10.6742758459, 3.0633856847, 170.8292829026,
+ 22.7107314592, -115.6997421721, 179.4541315127, 36.6353212025, -46.8173506792, 104.9377352185, -62.3839485230, 84.2161407106,
+ 136.1327139029, -1.7544748630, -86.9030562131, 15.4259753671, 2.5663369046, -116.9292434949, 64.2129157660, 78.7964806182,
+ 49.6087028507, -23.1282134104, -37.4278940992, -67.9769820701, -32.7546299170, 103.2337703853, 59.7504223629, 147.3485484359,
+ -3.2598723366, 116.2635358555, -4.3105783057, 99.2160004729, 18.7288916095, 78.2186271384, -32.7460615054, 26.6048168237,
+ 54.4099899967, -126.6518025639, 17.8377885986, -98.5074167624, 83.5842655157, 63.5608049079, 124.1282700584, 25.0506382513,
+ 9.0974612270, 10.2387616470, 31.1629214422, -24.4182834051, -15.9351308181, -32.8438279677, 8.8571103031, 3.0977533207,
+ -23.0359569441, -85.1033133185, 1.2922811622, -69.5278720344, 25.7444385081, -92.0141253702, 35.4374183520, 6.7043276497,
+ -0.7451513477, 6.4338102885, -75.9673321161, -91.6026967981, 34.9987265356, -83.2890589702, -47.9531745920, 142.7844807861,
+ 114.2435566703, -26.6531368807, -16.5029393959, 14.8125488050, 16.9592532170, 12.9147547847, 59.7887418020, -39.2528866593,
+ -15.3658342458, -74.4590980998, 74.3475628113, -48.1780064666, -11.0564355396, 70.9519213138, 110.0516331927, 36.4575879060,
+ 91.1281495181, -103.0201029342, -58.9865587379, -87.3023951029, -25.5889474724, -80.1022425592, 7.1308546919, 42.2966419390,
+ 28.1034227718, -110.4992975497, 52.3250451635, -22.1535855498, 12.7339036777, 34.0415435152, -39.0750294825, -30.4963132547,
+ -53.1808531221, 17.7255575164, -10.9535616620, -95.2135221101, 100.4987819707, -68.9493118541, -82.6099501128, -18.0285171027,
+ -21.9761772415, -27.5932967659, 91.8124465044, 5.8338598129, -7.0338759021, -45.7406241732, 12.9215890948, -0.0753638964,
+ 44.7159304680, 26.4654167590, -40.1423667648, -8.7426397748, 31.4700501616, -38.5847107897, -17.3446717482, 33.6461097548,
+ -107.3520493912, 117.4675224001, 40.6606607876, 7.9719714143, 27.8264722603, 38.7179679154, 1.7705195429, 25.5111272928,
+ -100.4419129176, 12.0673509113, 83.8410184425, 29.5781971450, 8.1040630143, 4.6727315335, 64.7847825199, 82.6216823615,
+ -15.1627242063, -22.6182310171, 13.1330997407, 49.5724583221, -46.1716475780, 47.7331801575, 49.7204543255, -85.3529225637,
+ 44.2195291098, 14.5616345667, 25.1355891397, 40.3146174825, 28.9423346884, -75.1582368771, 57.1913980615, -65.6984554165,
+ -40.7664709143, 66.4827050221, -37.4060644320, 22.4137979914, -40.0020443101, -50.0281409167, 4.8184431368, 62.4290842324,
+ -40.0926566688, 44.5774651507, -21.1028032780, 15.1185206565, -16.5265077365, 50.9848497205, -1.0692090929, -10.2392281457,
+ -73.6134935055, -58.7604124292, -78.9611342584, -22.1438277580, 38.5664728303, 39.8041438227, -43.2409994985, -37.9352795857,
+ -10.0448204868, -23.8371815139, 3.2897249640, -80.2885168342, 37.9525301994, -75.0706497208, 83.5246116221, -72.9921720117,
+ -8.2686558506, 3.9598212380, -88.0878393938, 14.7857207938, 37.3105932736, -25.5786314639, -14.2401437401, -131.8844485523,
+ -83.2051874645, -48.7402478144, -47.1392081390, -140.1935235859, -110.9171286805, 5.6067034386, -61.3508997640, -153.0780126325,
+ 20.9763880517, 36.9388874884, -0.5023108098, 109.2764166186, -64.7679763308, 27.5264562598, 12.7297402644, 135.9094145156,
+ 28.8725261600, 107.1985003559, -17.0333242428, 14.6472316711, 79.6550390697, 76.3253602754, -42.1106361443, 101.2937610145,
+ 29.1345513275, -81.3710305821, -51.6367882642, -75.6657420025, 67.6127817208, -143.1235134075, 63.4083371887, 20.2771663953,
+ -39.6962975349, 35.4904122251, -21.1761177463, 36.6827629732, 30.2533761253, -100.8244394079, 42.0562320416, -117.0985134680,
+ 86.9313959966, -68.5862263897, 39.2349791859, -62.0712807646, -4.7999897806, 157.2184386950, 40.1651596554, -130.2861272594,
+ -21.2745075974, 96.2019047346, 130.4626031799, 47.8121736864, 67.8619386636, -88.5169139565, -15.5429762844, 46.7375894206,
+ -19.9234556464, 74.2075824091, -146.2816301611, -27.5190709903, -105.4977126735, 82.7567139636, -63.4005073458, -97.8585647602,
+ 70.7163936702, 40.3196085322, -92.6325452663, -65.4906649632, 14.2362768591, -40.1848110012, -27.7039695490, -100.7942890248,
+ 31.7082105399, -25.9115041943, -37.2685165720, 12.4301141470, -86.2349812607, 85.4288388492, 61.4326022560, -52.6450593109,
+ -78.4043996861, 32.7052974812, 1.1786814775, 65.3401420354, 8.4364632653, 148.3052078011, -83.0828330696, 106.6354843068,
+ -4.3121195655, -44.5526178638, -2.9317305696, 109.9935497492, -18.4045116767, 23.1613955078, 15.6972686340, 128.8746575438,
+ 29.0629973213, -10.2922631539, -26.9225268881, 78.3939184322, -13.9891592847, -14.3955545921, 56.2259353432, -106.9719383698,
+ -69.4541718556, 83.7959262767, 118.0020136833, -76.6757480506, 53.0531323252, 20.3374814219, -45.9339005486, 46.3861511953,
+ -82.7185926581, -51.9983813997, -11.1149096121, -15.7796335925, -14.9611867369, -55.5963996752, 3.4778394189, -63.4371998633,
+ 28.8327087658, 12.5198672129, 87.7380213704, 18.4911159408, 56.8889056171, -21.9589217680, -93.4663445471, 55.1183878788,
+ 0.6449948853, 28.6533319776, -14.8059318368, 113.5439226734, 54.8995357737, 109.0924325068, 38.7922835723, -0.1180981319,
+ 157.7915336564, 81.6839158496, 11.8100964756, -22.1691332044, 9.1777753259, -58.6991331163, 121.9143128888, 123.2714985637,
+ 28.7886850251, -73.5910923730, -128.7124920003, 55.3579340152, -103.0285920820, -68.0360814429, -41.1894325447, 61.1418052767,
+ 9.1032579737, -114.7074592848, -35.4778656303, -56.5732437789, 87.7236911508, -34.1313499403, 62.2620712971, -52.3364100999,
+ -108.5676552169, -88.3757117464, -19.3248782556, -10.6333977657, 11.1531439202, 117.9042736262, -59.5405468137, -29.0685166095,
+ 84.9970950178, -27.4738785887, -49.4301782076, -23.7375836298, 123.1572277910, -30.7874739051, 20.0070113012, 92.6375682898,
+ -151.2677413660, -64.5993124352, -6.1931938222, 56.2980662344, -51.0667271974, 3.2590148897, 94.2279629570, -81.3680192851,
+ -58.2441470779, 136.3043204550, -65.1682000377, -11.6204578273, 82.5051730406, -20.7566312389, 12.9732577973, -3.6631681566,
+ 5.8870959981, -15.0765851320, 82.0878455090, -35.8669226696, 12.3547961199, -187.4160833910, 134.7486191161, 68.4591403436,
+ -10.0461433931, 59.1539319574, 43.7723616252, 79.1999168985, -24.1914155320, 38.0293798436, 4.5268241580, 32.8861446301,
+ 26.8134396608, -32.8357678171, 75.5315658240, -98.3994598766, 27.4380255469, -18.2567928813, -53.8692115445, 43.6445077874,
+ 41.8403964980, 145.5446940894, -45.1527793517, 36.2478163862, -23.4791069949, 12.4999105154, -39.0947731515, -94.0528129824,
+ 58.3030733328, -45.3491781120, 73.6529605858, 59.5823230864, -47.4741019188, 16.0307838051, 76.0140317071, 35.1546855136,
+ -5.8237741703, 8.3668861475, 125.3567506875, 55.2422644949, 22.2611352600, -33.7548647520, 22.9568910221, -35.1162490171,
+ 34.5901055588, -28.0490543019, -15.6322113695, 23.3610785957, 95.0831229094, -54.6273674257, 89.1750392621, 40.0225575612,
+ -14.4413587278, 97.6869759465, 14.7675464371, -37.4004765161, 119.4568961628, -26.1920161265, -58.0012410134, -28.7350340564,
+ -4.7796929865, -19.7344028715, -8.6437248253, 103.9809164360, 11.0043740394, -32.6092633210, -80.6443486297, 49.9986715363,
+ 105.5490975322, 104.0899701063, 59.5660092301, -17.9484147791, -55.4356343687, 5.6176664765, 147.8940936440, 42.5217478147,
+ -33.7007685862, 76.2702328206, 17.7168869112, 29.8692838033, 47.9156001099, 78.0087519225, -10.9663921228, 108.3826416455,
+ -12.7724638181, -84.5882451872, 19.6390498449, 50.9452521435, -10.4676220676, -59.5812635820, -165.2174342507, 52.9034909048,
+ 4.5103428162, 28.6714188830, 151.2376493891, -15.6519597742, 54.5244070834, 40.6356686042, -51.3633558110, 39.9915724858,
+ 1.7184423265, -4.3510464817, 6.8579282212, -37.7467707598, 37.4199831388, -44.1415061320, 7.9715921178, 80.9137854559,
+ -93.3883447881, -70.4226479003, -5.9804507221, -12.7588185792, -12.7748179660, -44.8489354744, -27.7084595447, -9.4696608732,
+ 57.0454576802, -137.5411295173, 34.0807152122, -82.8428997163, 36.3720183240, 117.5741160380, 91.0621096220, 16.9215804561,
+ 82.5046757105, -16.3941226525, 21.6412310432, 9.9347818503, 94.4637136289, 40.3883996184, -79.0927933462, -74.1126629254,
+ -1.8463008698, -11.7303452181, 51.4819690412, -40.9029132628, 79.5478142926, 37.3467151745, 119.3061300476, 81.7656373311,
+ 40.9995493552, -18.8267671804, -109.2814037436, 110.5826225324, 3.9090047179, -12.7311846356, 50.2434808607, -78.9987938122,
+ -48.9383950748, -23.2509396875, -67.8816298850, 46.0043667633, -79.5062435328, 3.7149881510, 28.8345576966, -2.4062068420,
+ 111.7203117517, 0.4410205414, -38.3832527193, -61.3416288539, -102.7939248826, 67.9533675166, 58.2475592529, 10.6035422626,
+ 37.5730234873, 49.4994673002, -82.1647604961, 65.7885201078, 92.2097983704, -37.3226143066, 135.8561958349, -49.4816302910,
+ 10.8193370693, -8.1591216625, -124.7982308726, -14.8282684728, 90.0927717376, 33.5256881620, -59.8703916309, 21.7176330197,
+ 2.1782551834, 114.1382737688, -88.1597739240, 6.5361543045, 97.9695862766, -39.4694065867, 11.5962132886, 33.7697466356,
+ 58.9764174727, -4.3190513332, 45.4357110166, -39.8718237733, 101.6682995218, 16.6389670713, 0.3598261204, -29.7440968058,
+ -31.6482054502, -43.8553776977, 67.0772865832, -54.5098535835, 30.0974211944, 45.0867818944, 8.8681839790, -27.6698123459,
+ 32.5238939056, 115.1771763945, 1.0297629680, -0.1277281381, 53.5989816709, -15.6940765735, 214.0039494923, -3.9607957468,
+ -28.2459062295, -78.4309884274, -45.1615660948, -56.8373512425, -14.9182469466, -46.6359981712, 10.2436473643, 49.6796044695,
+ -68.2156643693, -73.6736376702, -25.8482309017, 79.6432993680, 39.8430177404, -48.6865340771, -4.9554892261, -10.8103852199,
+ -163.6398049355, 34.8129987597, 43.1988001177, 4.6425367549, 71.5136740040, 5.7449295065, -129.5178610564, 23.2851316100,
+ -28.9856348679, 72.2878496468, 65.5641757637, -22.6995529120, 90.6678161988, 31.9503079809, -38.7957396135, -29.8167763909,
+ -127.0682245355, -114.5912946274, 95.8998971324, 14.6842186073, 38.6817470857, 53.4220170000, 30.9640386035, -8.7681524726,
+ 93.2374647164, 167.2548470938, -110.0113841742, 60.7832491969, -10.6378768861, -12.9541979766, 50.4311478762, 14.8581364205,
+ 36.2771855577, 16.0289680028, -27.1211553672, -27.6119525599, -64.3782858077, -30.6836783175, -11.3104575592, 46.6583470371,
+ 43.2576688462, 106.2483647125, 35.4221002374, 38.7051612461, 55.2640723227, -64.1159659536, 57.0032601941, -44.6269768244,
+ 53.7789820032, -157.3514759280, 9.5791816275, 6.2806945793, 18.6705185038, 153.1320561669, -5.5671006976, -3.2946321773,
+ -13.2024369589, -21.6449448269, -22.1412657716, 70.9673800953, -7.9864874901, 41.7239378937, 71.5984356144, 87.1584519164,
+ 71.0575050315, -38.5112900717, 41.0828370864, -97.7913314993, 24.9443056744, 71.6995496139, -116.3501231153, 67.3823850840,
+ 94.1851944844, -41.7993332022, 55.6783133892, 47.5180232694, -25.4261377746, -16.5909249978, -16.5035403522, -31.2504616568,
+ 38.1070466320, 0.3163573698, 36.1965564905, 54.8579811585, -54.0608838266, -112.2426667925, 184.8017345857, 49.4559933628,
+ 97.2753525540, -127.3976019425, 56.7945066844, 105.9924251837, -9.7156760373, 44.4969751065, -37.0888563276, -26.7522105798,
+ -40.8300149353, 52.5243354843, -19.8943377495, 51.1416695022, -70.0108248826, 15.6121585850, 32.5217684217, -90.1820508578,
+ 39.2513383879, -47.3412998909, -31.3055181623, -56.8173595829, -50.8924569276, -7.5435701646, 64.3413557990, 9.7281927789,
+ 48.9305305599, 56.5372975126, 26.7417330296, 89.0738343693, -48.5280725684, -31.0853481463, -9.6358615936, 51.4311918344,
+ -33.9718242925, -15.7470007951, 51.2850467492, -51.4187903682, 33.5815172911, -71.5483298410, -74.6635317137, -82.6284293355,
+ -19.3084129904, -58.4258965628, -7.7220084872, -50.0589600666, -35.4767663181, 113.1079148915, -10.8113655056, 6.6819361958,
+ -58.5734954218, -83.7627866065, 26.5302830531, -99.8288161852, 70.6577997609, 105.1602805436, -26.9709761883, 16.7715250364,
+ 100.4598899749, -12.8354110399, 31.2835111044, -28.1999286002, -71.8821977449, -43.8649368179, -24.4752744590, -13.8122643365,
+ -13.2937561135, 86.7641539982, -45.7159093571, -13.0092431337, 71.1728457692, -47.6143967182, -18.9549445122, -52.6530519413,
+ -36.3758751689, 95.3593012050, -13.8106918472, -47.9731072201, -42.5698690212, -33.2874699499, 74.6397905712, 13.2248699532,
+ 10.5705384630, 53.1572412508, 11.5799356215, 40.3743911825, -30.1315085582, -32.5536377528, -63.4740422506, -8.1108698232,
+ -39.7653559069, -61.9123876789, 30.2050339534, -13.4902607567, -49.0742542298, 88.5722862352, -22.0924973356, -43.2051228512,
+ 23.1418263846, -52.0531638851, 61.7042537346, 62.2206170738, 89.7321026525, 16.2048654039, -69.2890753423, 14.8548152449,
+ -44.7911045647, -2.5487807022, -25.2382987671, -73.1162478241, -6.5637044361, -62.4609072239, 50.2645328426, -127.1218373352,
+ 35.9901816641, -13.2427957988, -19.1139418128, 11.5763910792, 42.0967727508, 93.8373969941, 48.7578089767, 116.6192984420,
+ 29.2111912926, 58.1960409947, 45.8425638147, 72.1773323399, 83.8891643331, 17.1974768083, -78.1227071776, -76.1533486330,
+ -37.0312632710, 25.0291081414, -104.8734413579, 19.7434765416, -23.3082565679, -21.2852819234, -25.2235835223, -93.6817252275,
+ 2.7146982161, -17.4896953310, 71.2109780985, -59.2294931409, -84.0666862918, -65.3056520242, 120.9838686800, 74.4971556879,
+ -9.5684703908, 64.8377948685, -66.6770366247, 38.8265471508, -79.6623440265, -39.6171150046, 68.0022918215, 64.9078337860,
+ 19.6121887994, 7.2244101173, -23.1854400590, 30.4614578804, 46.9242283532, -1.0747268647, 49.2189640668, 44.6411673048,
+ 86.9687811173, 22.6744479392, -48.5360769344, -66.6164589196, 43.6822611836, 0.0803667092, 22.1251605426, 84.5472356977,
+ 23.3682917569, -119.0004161504, -77.5731290127, -8.1237991059, -9.8574787289, 8.0923731288, 11.6312746189, 48.8042209908,
+ -91.5385965138, -51.9417178439, -93.4017678039, -7.6902800177, 42.8038592146, 208.1745748115, -40.2269989314, 35.9946432857,
+ 14.8799963031, 72.5512530025, -33.4277806899, -3.2314305870, -66.9052809329, 99.7368956670, 19.5081727184, -29.1990516772,
+ 114.5317858084, -154.9703729745, -14.9584650353, 5.6179621219, 28.6224091068, 33.0426197666, 147.4892869040, -67.9739211942,
+ -71.7894315626, -107.3389637620, -95.5814122043, -16.2209528572, -32.6673756107, -24.6641235582, -96.2759765479, 42.9819639376,
+ -45.0775031344, 26.9177278735, 87.2353637167, 58.4214280318, -37.6862314706, -27.9660896146, -16.9115875649, -16.1061688951,
+ -28.9055343700, 58.1888376313, -38.1213943166, -4.7623621285, 33.9409953615, -85.9445074362, 3.1450686264, -88.4878703313,
+ -50.0848195592, -22.4167501243, 21.0397901669, 11.4240588629, -16.0956576256, 2.8322646297, -77.6952409905, 38.2576382396,
+ -53.6616605614, -26.4231916298, -26.3358464547, 81.4694985453, -50.3033670023, -8.2053965822, 19.9636273501, -10.4302918812,
+ 9.6629338686, 26.0903202845, -37.8068628176, 9.2638853986, -9.6752622225, -55.1704616516, -182.0875653530, -116.3887933434,
+ 8.5457908424, -29.0590636102, -52.1712423322, -84.2194156867, -17.3343644788, -69.9177944994, 98.4410912043, -5.8653773568,
+ 14.8287039959, -37.2315894188, -15.8744801467, 55.8855979582, 82.6374695897, -10.3491623457, -13.1871637112, -59.8321884846,
+ -13.6406794918, -90.9144246870, -39.5280425915, -21.9758399218, -21.0648164072, -37.2225695620, 179.7142651659, -1.6184261744,
+ -48.1631682332, 83.2309613815, 48.6367549372, -30.7160958486, -133.8419652482, 74.7583916606, 97.1026557281, 49.5481525536,
+ 33.9337592438, -48.6489706540, -74.5656495945, 11.2027589435, 2.2601440520, -26.1480067313, 14.1051697860, 104.3412840234,
+ -25.6567602627, 57.3314373931, 6.3330980799, -55.2666198655, -25.4971449454, 12.5333375030, 29.8117352747, -92.8414244156,
+ -143.2454500203, -7.5931354464, 1.8606525257, -9.6143470754, -56.0408726209, -26.0595448033, 37.1855765550, -21.2097936957,
+ 40.1996970371, -41.3351177032, 34.1834444638, -186.6269086563, -18.3614205839, -37.9357021641, 135.6670379673, 127.6586855975,
+ 23.6471207301, 73.4502163408, -73.9251876551, 47.5332209105, 50.1140713450, -5.8704801353, 12.9804536200, 46.7639885850,
+ -36.7458561449, -33.4506904080, 36.4941161678, 3.4199906571, -41.0407898239, -9.8181030415, 4.7245112428, 96.3687030689,
+ -28.2365241736, -17.4276379002, -65.7706653413, -96.5485126192, 46.4790636261, 32.1379379931, -70.2471563731, 52.3768573029,
+ 44.4162811009, -74.8951342613, 5.7318009676, -42.1108472837, -131.1371125092, 121.7221178589, 40.1216742680, 6.4128170610,
+ -32.2753329082, 36.3368525229, -30.2548033001, 72.6541502245, -33.4706909702, 15.8356670629, -50.4602392965, -4.4743341580,
+ 46.2418862356, 79.9973168669, -111.2430552953, -41.8285332332, 25.3359175319, 83.0841533978, -16.9581589718, -51.9200860092,
+ 77.9429675613, -100.4955466280, -16.9528387572, -63.4657485782, -14.2913689634, 20.8998480157, -98.7512394038, 175.0497111959,
+ 47.0357236193, 137.1821799965, 75.4859204931, 102.0896754000, -74.4319389528, 55.8710604661, 138.7844756707, -23.0214452064,
+ -44.0374225169, -39.5194006283, 17.6585042519, -83.7726310797, -40.9221184784, 66.2446785328, 61.9460848477, -26.5717761182,
+ 128.9173728445, -90.0154125585, 30.7220887905, 19.6211869212, 91.6137623259, 31.9401330791, -12.2054969481, -173.4012681649,
+ -37.8843684762, 2.3280971615, 58.8027265021, 39.6103768351, 45.9231885572, -21.2457868614, -56.1950724310, 93.8767608958,
+ -20.5075317720, 81.2860077414, -82.0982682957, -17.2313104276, -36.3367685204, 146.3298759474, 83.5645188769, -95.7871128855,
+ -41.4691805243, -4.4610514276, 76.4605569574, -18.7164073238, 60.5960801248, -55.1266248358, -49.3982202577, 163.4790300050,
+ 138.0264616472, -15.2636421738, 36.7895684788, 83.0702148363, -93.3437893057, 32.5989066039, -49.2049731278, 117.1479217209,
+ -35.4644848480, -44.5015630679, 31.3859706395, 5.8693717755, 17.3746859058, 9.9311131323, 6.1022018377, -121.9841205723,
+ 48.0645606148, -103.1127755426, 20.0433058006, -134.2922130039, 28.5016581997, 101.8535712259, 76.4518488086, -9.2802004844,
+ 78.1358057662, 3.3099138954, 69.8587685844, 110.6444273503, -59.6931547724, -51.7268303246, 64.0193271761, -15.1660919639,
+ 78.7207187414, -51.4776928138, 30.8703273062, 67.4488362333, -95.4561768870, -100.0161430296, 198.1825455394, 131.1359211305,
+ 3.8645077188, -19.1178912788, 30.3260202103, -19.7430200798, 12.7734912557, 74.1885333495, -67.8364659684, -80.8926661663,
+ 12.2720397333, -22.8440467871, -42.1377912025, 22.2591508655, -94.9559790816, 116.4053256024, 52.9759527067, 108.1630429012,
+ -82.6415576638, 107.0506710689, -32.4925050747, -134.7178668343, 125.0907581204, -33.0460380391, -37.8115604172, 13.4036941541,
+ 27.9798939995, -59.6965877877, 54.1339455110, 32.0538788400, 24.4020907468, -74.2815166253, 8.4464964158, -20.3601523468,
+ 28.5216426135, 54.3051140070, 91.5671757124, 44.5687804478, -50.8430812549, -15.1985800847, 72.6230011188, -63.3817304557,
+ 31.1651064018, 50.5057736622, -111.8897385947, -2.9491865484, 80.1135762676, -14.0696654619, 52.3521392147, 88.3353740728,
+ 87.0542702718, 44.9528879964, 24.2675410208, -47.3556425676, 23.6195853690, 61.7358141399, -39.8446197794, -28.6054825449,
+ -36.0836012134, -73.9089369029, 95.5989535672, 7.9458092374, 21.8693430561, -10.5751898940, -16.1045252653, 44.4127909167,
+ 18.0851707496, -46.7345019239, -92.6347568314, -15.6603448228, 39.6519674060, 29.9629332247, -24.9622443586, -47.2975561701,
+ -17.7780218654, 71.7346558516, 1.8999680118, -98.4624329314, 98.2614298645, 15.6787428700, 45.4912030123, 28.2495734475,
+ 65.7419427030, -99.5295634165, 27.2786047010, 77.8875001753, 16.3977450032, 10.2037888065, 60.8912178592, 82.1708628016,
+ 48.2506800969, -26.2756011209, -57.2019501999, -91.8180165526, -47.2336309942, -42.1121454516, 68.7279348832, 92.7832491188,
+ 17.6280339107, 6.7251426316, 25.0819097881, -59.7146158445, -65.8513175770, -41.0602910259, 4.5838916831, 38.8846775235,
+ 19.3473841098, -105.1434354654, -13.7765844991, 24.1616037866, 93.0893862826, -107.6082978084, -58.7977319447, 58.0759414185,
+ -89.7901093790, 16.1918835625, -37.2172665357, 123.6960140670, 114.2205895053, 8.7980887529, 22.1354877733, 52.2713979482,
+ 22.2246402930, 36.6257130653, 74.2884386832, 39.9288008601, 113.0416245079, 26.8047584467, 58.7266876251, -6.4680422666,
+ -26.7509331673, -38.6312732122, -145.0208923168, -35.9684264419, -117.5381191845, 29.8488196638, -51.1247043830, 112.6915937071,
+ 31.5277658506, -24.1454178026, 24.0572867542, -15.3632719912, -44.2556311042, 58.2449714174, -76.1363396817, 46.3749067777,
+ 3.4852275006, -104.6231553696, 30.1977700745, 7.0441446610, -10.0102536523, 120.6615291011, 188.0249410917, 44.3295887206,
+ -39.4106227621, -42.4924838463, -28.9316859978, 103.0113316106, 51.7061135184, -18.2169052015, 21.6066648209, 50.1453569033,
+ 12.7421867528, -8.1356008640, 75.2454422748, 64.8694058804, -161.7997182567, -17.1915039219, -41.2383269408, 0.8946812357,
+ 55.0533498639, 46.8242610223, -5.3780848566, -46.8156157192, 64.2205137708, -25.1479872711, -54.8298550608, 73.6823422266,
+ 41.9888520352, -83.9419623261, -41.0305214865, -47.4087035362, 33.2268582543, -38.7414663450, -104.9255474057, 38.2157988361,
+ -22.3790617016, -31.5426215850, 14.8891733573, -64.9019662116, -44.3044057867, -92.3281371013, 63.6669819235, -18.2425819417,
+ -49.5109487403, -64.0201431562, -70.3061633619, -147.3930233046, 128.8254864954, 7.6978217230, -56.3987238261, 95.5962971177,
+ 24.9319849141, -1.8305826630, 63.7414243665, -49.9852779582, -25.7389331291, 25.2700519583, 170.5603890165, 9.5266276922,
+ 13.5399442827, 0.7663023156, 144.5140143737, 75.6602313295, 44.5345480965, 35.8927901197, 59.9952333199, 64.3016125781,
+ 59.7518716703, 15.8739554628, 57.5686758914, 58.5866845774, 43.8356058096, 7.1335337346, 27.6439212874, -30.0398764928,
+ 6.2065364457, -79.6476847939, -80.1779260414, -52.2408711631, 9.9023027662, 10.3789070887, -46.6717275791, 57.2822267955,
+ 73.5763019279, -71.4639042142, -52.0323289026, -80.3692311543, 8.8431925427, -40.3750957204, 12.8573997402, -112.0129690473,
+ -67.5403575455, -4.9929337525, 131.9313839610, -108.2934624601, 17.2672219445, 48.9942839871, -90.7089806183, 114.9850344553,
+ 31.5988734490, 59.7636253519, -33.9764105756, 20.7915341567, 94.3558278877, 4.9570378129, 75.5601876581, 33.8799007373,
+ -90.7302419365, 1.0494275291, -33.5814817284, -50.4328011162, -52.6438122254, 10.3630633870, -90.7790260582, -60.4947106306,
+ 56.5127910083, 32.1019449106, -8.8885657127, 22.6481300860, -74.6992587301, -137.1086103933, -35.3402671515, 52.0032440119,
+ 14.9769109018, -23.0406615521, -41.8971596726, -77.3413472134, -46.9910623823, -107.4957490524, -86.8794002198, 52.2329975546,
+ 72.9424340427, -74.3244971184, 85.7023745145, 60.8778950641, -31.5903542844, -78.0533202133, -73.1733800101, 53.2034137779,
+ 83.0498994257, 30.2580271740, -56.1035163750, 16.6579677161, 0.2073439761, -5.7906867906, -66.8711603748, 74.0261467640,
+ -62.2989478643, 107.8399681550, 160.1626153730, -27.1263316346, -79.7784413411, -10.8403444789, -37.3887634955, 5.9808867714,
+ -10.1978150670, -53.9468869673, -38.2970373675, 16.3168988370, -1.0483342304, -63.6173233903, 87.0866029730, 26.3862156999,
+ -21.4053546455, -7.8216446996, 90.5994689064, 44.6928873902, -146.7075228500, -62.8122471300, -121.7119840134, -32.8992273432,
+ -11.9106565965, -104.6076313473, 127.3823687195, 2.4852952522, 8.9975686284, 45.5738431227, 16.8209391951, 26.7216521497,
+ -54.8776022226, -68.4194899925, 20.3925320149, 4.3453071650, 49.9988757708, -8.6636385971, 0.1191776713, -64.1528259747,
+ 16.0849193094, -24.1120788064, 40.7655203071, -23.7853262362, 91.6933164270, -54.3376676772, 69.7309190298, 113.1324293560,
+ 16.9278536871, 123.2439408123, 5.9934209089, -45.6409119369, 17.1842607385, 83.6522464227, -174.5484916836, -4.9414325022,
+ 52.8768375216, 15.6132102239, 41.1192572000, -81.3594721245, 28.8255333085, -2.0603766865, 6.4061712949, 82.1547586637,
+ -36.3679383103, -1.0390408940, -13.8483417281, 37.2231178393, -2.5777964710, -157.8382079085, -60.7910508762, 48.7258486830,
+ 33.1256641954, -54.6346845809, 88.2192196002, 39.9956402036, 3.2010617529, 88.1693658284, 11.7277451767, 32.7636165636,
+ -68.1591305748, 43.2699890762, 107.2828531104, -36.8225650893, 1.4407313695, 53.5742622795, 103.7597203839, -96.8481119045,
+ -70.2987605549, -55.2783713624, -6.9864094662, -40.3280834509, 16.8072891922, 24.3756993403, -84.6501745052, -45.3961429485,
+ -53.9237387431, 29.1708008262, 1.0498758638, 34.2610169651, -9.7905112911, -35.2443111357, 99.4574100554, -82.7243314274,
+ -12.3112078341, -13.4935295204, -65.0441169373, -1.5707942158, -8.0237289199, 49.5507868185, -13.4811149250, -3.9030733772,
+ -75.6220602476, -74.1596322041, -5.7789561939, 73.6177769297, -98.9485291892, 117.7192585235, -79.3791252579, 11.3447373614,
+ -24.5743979438, 33.7169431880, 39.8633765496, -149.5617929692, 141.9104918620, -55.0577810810, 37.2052313138, 6.4852281207,
+ -51.9122252169, -31.2592720321, -69.3547398856, -78.1122747852, 66.6338044220, 8.6865150501, -67.8354186666, -202.1226264943,
+ -31.1645341579, 18.2037364021, -64.8577486822, 32.5502423750, 26.0251882844, 5.0986012605, -47.2026094332, -13.9009556603,
+ 59.4152148554, 101.0702523560, -35.6013874662, 22.1677959258, -26.0857605492, 14.4754773923, -0.6780897798, -25.6530120006,
+ -25.4546641639, 35.7707567857, 24.5314489446, 20.0344481593, -18.3207572649, -9.7912924757, -11.9552594910, 106.8966283008,
+ 80.2653334386, -3.6056009570, 77.5441202535, 37.7136483336, -2.3165569778, -15.1111584239, -21.3047579337, 63.3629898072,
+ 15.4217847395, -48.6546027271, 33.3996963722, -87.5423526700, -18.8955709453, -85.0736444599, -55.2290313813, 37.6993014695,
+ -1.9420172920, 143.1251237972, -55.5771775185, -41.0289639463, -82.6515627688, 48.5420105013, 10.2288031648, -56.3379070490,
+ 20.0143954586, -84.8968512309, 127.0283241701, -79.6996444881, -52.6134879057, 22.0561680431, 60.7355377150, 15.4017379435,
+ -103.3924328801, 54.8459420743, -75.9157921311, -18.5478645340, -120.2337715192, 19.3119533190, 14.2354651926, 49.2411155276,
+ 178.0946722971, -75.1044338856, -17.7857687140, -44.5847020456, -90.1973261616, 21.4416495288, 51.9825060227, -66.7420817203,
+ 7.5764658958, -70.5144035274, -58.0645913437, -108.7601823595, 11.3207059592, -71.0204300166, -71.9141786835, -41.1119761277,
+ -63.1487461134, -7.1948924612, 37.4257273157, -0.3096640281, 22.3859391424, 37.4791977942, 4.7298794262, -33.2974745191,
+ 31.2867641674, -32.5753321154, 66.5419169580, -60.5202504180, 17.4192217276, -50.5317834280, 95.8748766870, -31.5464032969,
+ 44.7045552306, 64.5521928874, -23.1461700992, 118.1095509083, 35.1065388893, -27.9857316442, 8.2912382315, 39.7446781812,
+ 3.3485245256, 56.6810611812, -22.8994983441, 80.3970810489, 22.3086957726, 128.6454657339, 22.4798757743, 49.8362059423,
+ 22.4019441476, 27.1059712406, 11.4540686475, -10.0764491110, 28.4803668412, 94.7776130875, -36.8737987939, -88.8666428850,
+ 141.5495956917, -46.9343244046, -58.9586661150, 23.3890221338, 72.3692845286, -27.6356117882, -41.8318324842, 70.9559999727,
+ -8.0897813375, -78.2950183802, 87.8658917396, -70.5715383399, 22.1972033651, 47.8069266963, 131.7707915958, -23.8938128672,
+ -33.2047798206, -40.7583820499, 27.0405050078, 19.6445061622, -19.3891108700, -136.1942182249, 8.5255159178, -42.8234719503,
+ -70.4814202849, -41.0662321022, -9.3910777305, 136.7254609331, -6.7391967243, -68.4796734994, -27.6933664361, 118.5680907562,
+ 7.1623426945, 6.8386734240, 75.2481710418, 33.2280590090, 50.6011222647, -2.6551190091, -54.6429379954, -15.6441827245,
+ 34.8192824650, 41.1519964665, -95.5213521044, -7.1466152035, -23.1705143065, 21.8243235569, -26.6493944983, 44.3948925119,
+ -0.2695887637, -115.9753822388, 10.0551835964, 41.6343978371, 17.7354401036, 3.3862359071, -107.5692389700, 110.8538665943,
+ -77.0898864044, -18.5513096154, 87.7377015326, -89.7201205553, -21.4828890020, 12.6716787713, 71.2019960218, 37.7530110511,
+ -111.0886809644, 28.0083327042, 11.6412229475, -14.9061811373, 78.9633564364, -17.2424064978, 78.6411356878, 31.5888916445,
+ -52.2057754767, -51.8187552856, 12.8069170133, -44.4192811197, -29.6758641711, -39.2862559158, 90.7444415817, 9.9897923810,
+ -33.0089291278, -79.7506824464, 51.5840713006, -15.3414477161, 55.8773639416, 10.4014931469, -12.0825624913, 30.2487218486,
+ 13.4626458507, -41.6078761320, -99.0036616160, 97.2413199943, 16.2571104823, -106.6994082721, -42.5507290539, -30.6273488892,
+ -65.9180047092, -61.6996048814, 57.0455325157, 103.2653865169, 116.3758447306, -74.5041275207, -0.1164162789, -14.3978018054,
+ 38.0218224919, 127.8971402721, 5.4463615012, 78.8192543895, -25.6140607422, -9.2485898035, -48.8769533605, 34.5460968716,
+ -75.8820751325, 93.8969485430, -38.5976860109, 7.9177115766, -80.5122708885, 21.2658351542, 67.4252739338, 2.3783155124,
+ 83.9115322121, -75.0252790111, 37.9405478207, 14.4346316538, -109.9157163206, 108.9078208323, 15.7162891141, -82.1261022291,
+ -76.1782289525, 74.4747265412, -46.6029184986, -41.2456137340, -80.3895294383, -8.4118305522, -0.1933892651, -145.1576077775,
+ -15.4312649597, 39.2200199533, -13.6364330998, -25.8182203562, 48.1591475229, 125.4840761759, 15.9990051973, 76.3197750584,
+ -191.2988456723, 38.9117045838, -115.8653769258, 81.9245653626, -10.1602378212, 54.8635932256, -62.0258658391, 83.1033610875,
+ -4.8490223558, -54.6097329099, -10.9477363598, 33.0862207616, 52.7148056029, 35.4875411655, 49.1104822038, 55.9764111036,
+ 19.3458408685, 89.0606670761, -85.0457542002, -78.1726308870, 93.6580344148, -26.7125037520, 15.0835782513, 45.3860435621,
+ 12.4384130680, 70.5409358400, 9.8929034782, -23.4934005067, 40.6776169075, -65.7911681154, -167.1217168499, -19.4434798044,
+ 12.5047333259, -106.4886582913, -22.0096224479, -51.4306080664, 70.4101816964, 0.0684774882, -76.2887185579, 75.2064469835,
+ -63.0584107912, 78.4585282303, -20.2508456707, -55.6679838569, 27.4321350947, 84.1834097135, -10.3659243385, -48.4070302399,
+ 92.8062051508, -25.5124355326, -84.0473681678, 71.0714983360, 25.6083325312, -45.0808082818, -155.1967735998, 10.6420814804,
+ 151.0278845436, -44.2955308501, 29.5425559978, -113.6663161729, -36.5169042517, -72.3071551232, -26.8471044056, 15.6848246843,
+ -34.5750914935, -198.1775254215, 25.4131251136, -21.2604011481, -1.0414028296, -46.7191360308, 2.7446655943, 54.9295292750,
+ 92.4228624473, 54.8526054625, -58.0708705172, -17.5872514429, -107.1263606314, 3.8705217560, 8.9778481619, -6.0018700075,
+ 93.9938778953, 20.8072064757, 24.1862680085, -36.6869801034, 80.8573435056, 5.0571862502, 4.9644714449, 47.8862765669,
+ 35.1164783949, -43.2306708209, -70.4784884015, -22.9691864018, -13.9209248410, -47.9058355842, 69.2014224885, 36.4205028832,
+ -41.7969907806, 19.3910242176, 46.8411651043, -101.1964790621, 1.7651827600, 2.7058301870, -23.9427647032, -29.9388425668,
+ -85.3458953742, -28.9877302845, -56.3025916174, -20.8442568667, 52.2658233674, 16.2060641337, 4.4319659648, 114.0813888914,
+ -28.7002125175, 49.5308227691, -30.0766397744, -61.6828255791, -49.3247835301, -26.4413883089, 5.0971297500, -28.0554103014,
+ 42.0857897882, -47.9552784036, -42.7903198462, 87.8376670399, -140.5238322306, 101.5731331285, 52.2212327660, -22.4010751415,
+ 14.4300378085, -51.6886150508, 6.6829221172, 115.9640673493, 0.8066647921, 79.2442610587, -18.0322597688, -93.1043520771,
+ -72.1150120989, 87.2886742511, -25.4133998112, -7.4831361426, 33.0287073819, -23.1984191566, -23.8078728472, 59.7504642008,
+ -0.6923320155, -12.4892802407, 38.4436035475, 100.2867176437, -99.6305730687, -108.5810851604, 9.7451186318, -43.0333845061,
+ -101.8397764566, -50.5229450341, -23.5177624889, -64.5537003712, 174.8259413987, 80.6820828046, 156.0492701171, -28.0432391315,
+ 54.5458337882, -9.7039186394, 0.3967891057, 37.2171179706, 53.0918819026, 95.5734474731, -0.1572821866, 35.9295265728,
+ 52.6110638216, 65.4681244336, -58.8893064188, 33.3094740223, 23.7248112965, -86.1001662411, -124.2990486005, -53.0143407367,
+ 60.7137702328, 16.7099000008, -16.8984625777, 92.9154007512, 19.0020902188, -60.8943449371, 19.8803437206, -45.4933609435,
+ -37.9759751454, 38.9546342412, 112.6564725638, -20.6282048911, -82.6461566213, 33.1634895891, -14.6466202774, 70.8258934983,
+ 22.7763755890, -23.8551537513, 38.0027621248, 13.1891619540, -0.2512849813, -22.0294650280, -3.6017925014, -80.9408522816,
+ 2.1581228675, 35.0316749727, 1.4313916959, 7.6662501879, 95.6789578890, -25.3147779279, -11.1001968711, 133.3263412000,
+ 57.3919237887, -114.5247973399, 97.7159374781, -25.1589170064, -28.2795559691, -78.0626694271, -25.2625001068, 59.6669532190,
+ -24.8854138846, 15.9627092698, 52.0951356726, -49.4931272094, 32.2981549802, -45.2155042278, -117.7954359551, 71.9214384433,
+ -12.0100960200, -85.8922139632, 44.5277402755, 45.7283733108, 153.5133743833, -12.2908386291, -16.7857892861, -34.6184196532,
+ -56.8327470259, -5.4780874150, -38.8725168650, 4.6060525978, 20.3207039309, -3.0993047411, 10.1132085358, -37.8257661018,
+ -5.5665784625, -69.5263241776, -38.3990002707, 55.5634953442, 34.1515898646, 25.6046582443, 49.9096070185, 23.8082590350,
+ -59.5259871997, 53.0128767406, -14.6534382681, 25.3901141454, -20.2689398092, 112.6721308068, -44.3928586231, -46.9200544069,
+ -102.6597110918, -35.1087345365, -16.4476118027, -56.5493022087, -19.8752899545, 112.5790185345, 13.1594262867, -98.3712667207,
+ 84.7454129819, -32.0001239970, 33.2615003229, -70.2186017880, 129.5580075545, 14.3022334321, 53.5329352657, 165.1115533783,
+ 42.9337492453, 3.3467665656, 5.6916538476, 30.9878624742, 43.0083773411, 83.1082949362, -68.6733601131, 129.7158774740,
+ 0.9829430504, -73.5779156249, -0.2190628113, -66.4832285128, -18.1621332482, 59.5591274811, -47.9030207223, -33.0134331016,
+ 8.2663047608, 13.5843595697, -124.6750162116, -119.5553229429, 6.7914845141, 17.7380901732, -133.7630184698, 33.7185572623,
+ -31.1975924142, -55.1798482215, -72.6025491416, -65.3245960982, -8.7224630378, 27.6488501343, -79.6246723592, -12.1515699989,
+ 84.6626846949, -53.8044373764, -47.3237819756, 58.7153917563, 23.8284036126, 18.5922606945, -41.5094930442, 7.4798082503,
+ -117.3348631592, 28.0374584580, 17.7205965437, 37.6075060837, 10.5295050958, -10.2113391455, -25.4289536763, 80.7158011723,
+ 134.2497737713, 107.8649950212, -8.7918461736, -99.0628159937, -28.4975407702, -2.4658161692, -1.0354059017, 3.5152634039,
+ 34.3665501560, -87.6859371958, 33.3653060530, -45.7175591636, -65.4175088722, -39.9650581770, -57.8964432706, -74.5229831900,
+ 38.4192570282, -93.0015200930, 102.6189889638, -15.2156059788, 8.6020521359, -40.6649198594, 19.2140495475, 68.7122869639,
+ 43.8544891050, 31.8559705108, -56.5147934081, -76.4182242061, -20.7528009745, 122.9729619714, 19.3412487106, 119.2231188878,
+ -61.6916564137, 19.7466881922, 1.9628648319, -30.1476626231, 26.0368611826, -25.8750640673, 126.2461067518, -38.3759348959,
+ -21.1488548859, 9.5896772329, 60.6570721102, -27.1555851824, -82.6629073502, 104.2859535395, -17.1669088713, -104.6106452933,
+ -45.0398334945, 43.2080892320, -87.3425077484, 0.2033770682, -25.6876572199, 79.3659499889, 29.0973624285, -23.8554325099,
+ 25.8594825320, -65.7761031112, -3.5831773610, -7.5912426740, 98.1472561219, 13.1498139916, -13.6564623410, 56.9471294530,
+ 3.7663518315, -75.6123083481, 44.5806865445, -17.4609911479, -55.6387091480, 44.2177387420, 34.3752520512, 91.9930112408,
+ -102.4716789145, -40.4480770016, -14.7542706842, 80.9321121716, -67.9012532377, 74.2022584642, -39.2995936367, 95.8528505885,
+ 107.5716319470, 8.1259867727, 114.9534060173, 96.1080490303, -30.6405288182, 27.3131447051, -22.5066083621, -7.9447818944,
+ 25.6505787602, -67.1523588791, 65.7872616460, -3.3285011027, -1.1041085569, 74.8921702514, -25.1084011697, -9.7589516985,
+ 126.3993857146, -70.7299876677, -22.4069284847, 15.4150555050, 6.0494312782, 14.7172132463, -36.2348351724, -63.4858079910,
+ 8.2207526905, -101.4967633400, 12.1832438786, 49.7125534112, -99.3127122046, 49.9528617888, -7.3125598688, -22.6006580462,
+ -31.8424104370, 18.8121241410, -89.2005207726, -89.5613310067, 37.7746014303, -33.8940703850, 98.1050260145, 132.6754622940,
+ 91.4832076657, 48.9724771421, -52.3241324047, 73.9850811745, -139.5294058433, -14.1985477071, 10.6320943394, 32.9842589505,
+ -117.2355637537, -149.0942826923, 118.8257377105, 78.6561766800, 1.8467003036, 76.7457523519, 35.0575934280, 35.0405067972,
+ 46.3433191288, 51.5391456892, 43.1210412216, 21.6828221089, -24.7058117089, -83.9863281328, 7.1502359525, -66.4432335170,
+ -11.8942947461, 27.6420249691, 101.5285396899, -168.7093966612, 38.1892453170, 55.9668521894, 64.4854368465, -32.3167099392,
+ -37.5824582463, -25.5064561372, 107.2513163415, 9.6344685960, -44.9269370404, 10.4288908869, 46.7640176210, 33.7300219820,
+ 19.9212664361, 70.0213390428, -62.5237740415, -81.5465118244, -44.0793815204, 92.2566857417, -51.2000490212, 6.0091571611,
+ 30.8037109068, -44.7595662927, -69.6108606342, 64.6862483343, 33.1742048387, 55.9059849044, 66.4985799238, -48.2816133661,
+ -22.7185185172, -114.1511261421, 147.5147842854, 9.9781895463, 8.0732325157, -35.8047978931, 75.9079000901, -6.3144641143,
+ 13.1307658403, 17.7593379387, -68.0746602967, 81.4962779846, -21.2130737883, 4.1881456029, -53.3976620104, 73.0143978370,
+ -131.1048524173, -34.4396004841, -48.7367342675, 97.0896245872, -153.8743591626, 146.4347629539, -23.2984615872, 62.8412359714,
+ 12.5390587557, -3.5600971161, -6.8863206565, -43.5270424219, 32.9707655033, -103.0889331877, -64.0535042805, 106.9215904598,
+ -46.9078727795, -18.2192480137, -8.6225312780, -75.0230233110, 33.5402016456, 63.6373276750, -35.3286634556, -9.7322691960,
+ -104.9070709198, -44.8063768563, -10.2396474262, -141.5682333490, -41.9856066191, -64.5568181205, -105.7644577258, -34.3266130311,
+ 18.7442551407, -6.1736131415, -25.1300038952, 45.1470563965, 74.1676313724, -21.5064254542, 70.6267797692, 54.4904113618,
+ -35.0016926163, -36.8626539144, -36.1085281705, 126.4456731006, -53.4352000664, -42.3833008015, 80.0205785607, -5.8395042605,
+ -3.7163929006, 99.0418697430, 67.5450923850, -71.2740732169, -57.7639750215, 28.3495782004, -14.9114371149, 68.2395578146,
+ 19.9391412722, 0.3981730821, -67.6429500835, 99.3355729015, 16.5267218873, -63.2226829304, -18.9357631878, -2.8614372915,
+ 181.1332468568, 34.7347222636, -16.1060495743, -2.8148621786, -45.8170675798, 43.3943251920, 28.6117124005, -33.2361768688,
+ -38.5248849741, 49.6677439095, -220.2210251040, 39.4305879349, 66.5483442468, -53.8217192052, 67.6757901350, 33.4240885070,
+ 85.1809128375, 14.6803329701, -35.7116442076, -45.9462851452, 142.0722968061, 7.3538820438, -74.1993826074, -47.7693348567,
+ -3.3338017336, 41.8589920225, -27.7802513358, 81.0798842587, -35.2219569758, -22.2714108513, 20.5772883573, 68.4758687172,
+ 51.7089964364, 25.7997568352, -75.1742154071, 50.1290455164, 14.2169709710, 115.3455403147, 3.0734091132, -24.0080167664,
+ -30.0430862767, -85.1846499745, 19.4251899965, 66.7660313085, 10.4964191964, 191.8810766140, 44.1684279713, 75.7858859863,
+ 19.2241630741, -16.1074277656, 30.9051369625, -103.4147225746, -9.9194221597, -13.0669809072, -14.3302540445, 49.1519159556,
+ -27.2523237365, 127.6868804216, -85.5747904513, -40.1209192492, 178.0522707351, -73.6864713410, -36.6342055327, -99.8126854419,
+ -41.0696248653, 42.1245867015, -4.3161823048, -13.2747008746, 119.6002869940, -17.1335931288, 62.5993425061, 28.9992320778,
+ -4.5368180858, 1.2779053761, 27.7084888678, 34.8899603537, -30.6048794059, -93.8465401416, 3.3778313360, 13.8864217937,
+ -62.3784185879, 27.6165516418, 6.1885364328, -45.2772604479, -56.8928574665, -7.8629078173, 47.5072063672, -47.7279779449,
+ 116.3659358841, -108.7063603401, 6.8435296791, -4.2310899521, -48.8520623760, -42.6788172675, 28.7598264712, -45.5725981159,
+ 5.3364646966, -8.8259790870, 53.5478850699, -93.0251963014, 37.5833785601, -5.7207089841, -36.3899380994, 21.9593949993,
+ 27.8919793663, 50.0242670536, 38.7060750441, 13.4383538753, 24.3284938604, -66.6706972814, -75.0556788531, 46.8080800007,
+ -76.7685518979, -110.1823907916, 117.3556114385, -11.8794346783, -100.5931552045, -81.1814329321, -11.1946927034, 65.9117165560,
+ -35.0871947675, 68.9890931402, -10.8170265109, -76.6397320929, 40.0628004769, -13.8876229441, -47.6413458333, -82.9301597006,
+ 35.3601089866, -27.9439892787, 93.1557477015, -43.0973522277, -28.5635146727, -12.8419650369, -19.2552737753, -104.4730738934,
+ 51.2133027222, -80.4713372457, 82.8904666296, -32.8693411980, -55.1514350588, -32.3215790447, 15.3586714150, 56.6281953096,
+ -4.1845768663, -21.6039139687, 37.2300232632, 41.1966104813, -18.1197213904, -43.3281929812, -39.4358705806, -68.0037577582,
+ 102.7052778200, 1.1074295163, 148.3224324741, -139.1640107475, -33.1782275394, -49.4813361135, 33.6935341991, 57.7540768190,
+ -50.1484966873, 25.5452659987, -58.4535765464, -124.3028152080, 46.5749355946, 88.3984919306, 18.6343901041, 27.7237147347,
+ 7.4621558601, -45.2696342528, 6.2181991419, -124.4793150492, -34.3600196858, -17.2893599431, 10.3880081085, -34.6584762030,
+ 80.4621681009, 42.6698890316, 41.0028635312, 40.4584805162, 12.2993857558, -2.3438124814, -49.4434262439, 67.7382058590,
+ -172.5728037457, 78.5681808033, 93.0200717559, -34.3893038739, 25.4332764674, -0.3084790746, -47.0942986345, 67.8054627172,
+ 122.2738316110, -84.4716788862, -15.1596922578, 73.4104827953, -26.5231401219, 53.5433793756, 121.1802722337, -24.9087077008,
+ 65.6955157778, -100.0325133938, -5.4645525511, 38.8338919462, 38.6764256003, 7.4857563167, -84.0517801108, -38.0837770598,
+ -35.8795970303, 42.8800471728, 166.4026567891, -45.2596493921, 88.1539836076, -84.1569136898, -44.8705239205, -112.3135915515,
+ 76.9816499152, 53.5768624176, -106.3408650991, -17.9979586956, 81.7718580719, 144.1648782825, 45.2239065385, -50.2094826104,
+ -14.6605194110, 57.1970152560, -23.4826391767, -27.1562674435, 110.9001894435, 20.1915788307, 12.1467090660, 16.7983072789,
+ -34.1257273005, 129.1575417206, 71.4391384766, 32.9596044485, -41.1052127849, -48.0458686558, 0.8731114023, -34.4439480200,
+ 29.9076993320, 68.5240097999, 78.8047480081, 10.3252970915, 0.3515809390, 73.8823954039, 44.2008862678, 72.6737200450,
+ -13.3069689810, -25.8971947295, 16.9120909673, 53.2843809510, 49.1074875555, -68.1235965933, 13.6903318056, -14.7046510890,
+ 1.6746416299, -108.5007545621, -83.0295464360, -3.7524687555, -14.4088682542, -138.1935697707, -19.3679003715, 38.9142288940,
+ 15.4764570005, -2.9192486908, 43.9598275111, -34.5312517096, 35.8385011650, 4.4981476232, -1.4454488029, 71.1184852411,
+ 41.7476890934, 37.3368072067, 57.4916368307, -32.2735282446, -27.5080391474, 95.6899861001, 3.3351685514, -111.9822940053,
+ -12.5463248694, 39.8668835259, -14.9822708781, 66.9305141224, -197.7731587893, 27.4387742251, -25.6710982597, 13.5207634746,
+ 50.2848552534, -30.0418256053, -14.1615451430, 68.0658302876, -62.0642327357, 4.6615575342, -26.7572433532, 11.5079596851,
+ -57.9473530742, -26.1405191819, 70.4111692091, -95.7407842078, 11.2517762488, 100.2275069926, 85.3653529140, -24.6494053691,
+ 123.2413542720, 21.3040690490, -192.3747625981, 215.7057282840, -29.9835524152, -44.6302014167, -66.7559203920, 25.3479943282,
+ 126.6443711753, -36.7355336011, 29.0095532019, -73.2298015066, -5.8223869363, 11.9451128557, -17.3486371102, 50.0400958000,
+ 74.7145985867, -5.6976135921, -73.1829497279, -41.0455578170, -3.6001825808, 87.1662509692, -39.1602156793, -41.5727119025,
+ -18.2071856447, -3.5383471563, 28.3732842092, -39.9931298054, -100.6902365532, 130.2869328357, 3.2473773399, 16.8387727072,
+ 62.0055283576, 97.3165730637, -40.8530624130, -12.0491532592, 88.5164060609, 71.9344891420, -69.7440181255, -51.2866033193,
+ -18.4687017548, 55.7346964760, 4.4872782938, -6.8942183136, 8.4263132246, 18.9149616636, 58.8710265459, -17.7415034047,
+ 5.2927869482, -20.1947447871, -36.6005304743, -67.2193634013, -72.8315856033, 139.7216799221, -2.1966369437, 83.5189402317,
+ 56.0625496338, 57.0100118287, -9.0542670182, 58.3126231383, -27.9316577822, -125.8146267036, 77.1179593561, 99.1690581411,
+ 7.9703321651, 77.3501770612, 32.2815633360, -22.9643212257, -19.8653554993, 55.4837678464, 10.8929872542, -1.2452363726,
+ 83.8477026208, -88.9116003335, -44.6537617432, 11.0099195187, -33.7736999447, 44.2766753802, -27.9436876110, 16.3088473703,
+ 45.6564921145, 18.9199921114, 77.9125802822, 11.2795611793, 42.8571148149, 32.4846418196, -2.4014655924, 38.0598657284,
+ 86.5222537258, -3.1333316838, 11.9141807475, -2.4712869557, 47.8938116812, 35.4899843246, 42.7527497689, -31.3225362175,
+ -6.6842304948, -133.5691427053, -58.7043550030, 73.3503470631, -21.8739658759, 70.3809855428, 54.6113598087, 9.7384709498,
+ -141.2343505501, 27.9788413890, -11.7574685128, 43.1029141674, -52.0045609619, -83.4803133516, -57.2548505744, 52.8114424452,
+ -30.3458066567, 39.2081027670, -49.8609769923, 68.8871987820, 45.2005862545, 21.6377482234, -9.7576398020, 6.4878505019,
+ 32.1853134925, -25.1448500950, -67.2234044003, 103.2446765175, 80.2584971166, -68.8710032588, -4.2141933840, 23.7223935599,
+ -35.1939439880, 63.5237841071, -34.7833780059, 74.4175406287, 83.0373073374, -28.9674699605, -55.2233708526, 64.2239365944,
+ 6.0025041292, -22.2149197781, 29.1954442931, -35.5058495139, -76.9452133862, 34.6912996871, -51.1833830895, -49.5201882461,
+ -7.6144484864, 116.8549382108, -51.5005710672, -20.6783396225, -97.1232859994, -6.8466290384, 59.0410141864, -58.4613374526,
+ 74.8248237895, 75.2714612487, 23.1797286361, -2.7866665487, 56.4240759131, 60.2417537402, -73.0762506733, -136.8520754748,
+ 27.3836498800, -29.4294016791, 58.2863141991, -15.7937240880, 12.9792729458, -28.5369095369, -179.3559659693, -99.4879434608,
+ -61.2402838269, -24.4763496292, -22.6643525306, 24.4590321501, 98.4299041736, -4.5624798871, -59.3191765161, 139.6951240672,
+ 27.1672202072, -70.9192843433, -18.1408458038, -71.0174628677, -94.0725395768, 36.1985844031, -3.4636448040, -39.1453082944,
+ 40.5244522827, -70.0489070024, -63.9181488122, -4.7099187837, -33.0844286599, 31.8161456785, 10.7843286816, 10.6387816259,
+ -76.2043252282, 57.0254136124, 151.4166547223, -50.6728456416, -82.4408455004, -55.4932097322, 15.9101565878, 15.2777050730,
+ 25.0235583008, 44.4425994137, 36.1343164402, -24.3058262644, 17.6630395266, -62.6364549232, -40.1045046999, -3.8451609954,
+ -107.1141779059, -50.7347331775, 90.5704587068, -59.5674315899, -23.9371281478, -59.3738147851, -29.5056040676, 26.2990433281,
+ -33.2953407976, -92.2663237623, -25.5442696217, -81.4532880743, 42.7268859073, 75.7986045911, -31.6772573595, 86.8684653590,
+ -61.5786934151, 32.6176822340, -23.2321244436, 64.9301578846, -6.9691761031, -51.6553861957, -35.7877314260, -41.7444743167,
+ 108.3757802905, -29.4164640263, -18.4714648512, -82.4131988957, -52.9499171074, -35.7687451877, -80.5212521683, 40.1558185933,
+ 80.9139882507, 0.4170638335, -52.4487435334, -69.0227900586, 55.0806458770, 120.0318572894, -11.5435935376, -19.2791170530,
+ -3.0257623065, 99.3958103659, -19.4539047939, -54.6600691116, 0.3603986276, 9.7863628822, -6.2358897021, -17.1143829423,
+ 7.9650683489, -27.0465697723, -45.9436029022, -36.3352947671, 138.6511673472, 47.8115852675, -10.9612291181, 3.6500932948,
+ -19.3477824988, 28.7386285394, 36.0065971791, -43.0822654618, -43.9342369010, -32.1210042559, -70.4441432492, -94.9421856551,
+ -120.0449164046, -65.9803176675, -55.4329926958, -19.2914305328, -89.4078846739, -30.1962221428, 61.2293835442, 93.7229961578,
+ -8.3020564344, -6.8386266801, 21.4975406760, -15.0903918291, 94.1044891682, -57.6380884034, 16.2327931770, 1.7957525957,
+ 74.7073719610, 26.8908104028, 76.5155513347, -9.6822139478, -8.0655893270, -48.1277441855, 9.8408952157, -58.8121626519,
+ -80.9751650730, -48.3302191201, -27.8207839032, -46.1625778067, -33.5567739103, -109.4477338693, -168.5366005131, 156.7874587017,
+ 8.5940307118, -21.7826451231, 12.4113841726, 86.7850811554, -77.1019195511, 32.3109085681, 86.8849726762, -41.2571797820,
+ 19.6006773321, 31.2507123002, 41.8106047980, 101.5445768198, 51.5335715773, -185.1354355374, -11.0825031251, -20.9631685642,
+ 111.1640505949, 162.0618916128, 3.4498453592, 44.3198102843, 0.3505982148, 21.3783009799, 24.6853218910, -20.3399016930,
+ 59.5923416012, 79.4334110932, -78.7723219668, -47.0670061218, -128.3114982420, 92.4340029556, 69.1584534808, 114.9437583487,
+ -64.6124706594, -10.2486262273, -1.6622261589, 50.9747480555, -8.1203432808, 32.4414442459, 84.9091411511, -17.9846748341,
+ -14.7172591486, -27.4203006303, 167.1594042893, -25.3372000386, -27.9888042652, -3.6956600039, 117.9111608126, -25.4132038904,
+ -42.2923300579, -95.1602974120, 19.2625367900, -15.8766055664, -8.8117613783, 1.1964763941, -111.4791843369, 81.5745053342,
+ 8.7527287102, 34.5972180603, 83.9461794412, 50.2350993915, -19.7720255327, 53.8516694944, -104.4119088056, 30.4513918056,
+ -62.7649123620, -29.9513577664, 7.5719075796, 61.4944149393, 70.5737863978, -40.0358428522, -17.3629194898, -10.7304848224,
+ -60.1358805635, 46.5402792333, -77.1330673251, -86.7606311649, 22.2000151841, -33.7006112473, -139.9917432329, 138.1567785372,
+ 18.7396823616, 28.7669927272, 28.4680008506, 7.6199316893, 121.9175024680, 32.1111318802, -58.2808504609, -30.6563801124,
+ 44.2365370915, -83.4728239003, 64.0531120026, 128.0019381122, -40.3205961091, -62.8035436979, -15.6689887241, -6.6975189783,
+ -46.1591606362, -42.4253060115, -71.6473279718, -75.5337463898, 87.5058573621, -66.6145644703, 87.4635891068, 123.2852237793,
+ -0.9887550633, -9.6307226422, -67.4478350330, -86.5892204275, -79.0537798176, -107.7863332665, -8.8330234138, 38.9605563706,
+ 15.3133829507, -54.4231514572, 26.7406100788, 48.7962706395, 27.1443310148, -2.7894277223, 7.1469114703, -57.1657209995,
+ -90.4215183139, 76.7797176290, -19.2239853483, -26.6041739391, 139.0298606143, -36.8837362822, -57.7952841108, -135.9897057237,
+ 4.3453829113, -5.1660378716, -58.7046205842, 58.4176557979, -120.5866252228, 34.2409281832, 105.6219016158, -28.5323871865,
+ 11.0598518159, -26.3069115094, 87.6681723683, 70.9393661419, 54.7982850455, 4.0477327154, -89.5568838538, -32.8993562613,
+ -45.6708773935, -52.9428269719, 14.4126898406, 39.2142079784, -92.9447367684, -23.6977408094, 8.2507547267, 77.1071852874,
+ 24.1675316234, -159.7349628761, -13.9551749672, -67.9761692092, -30.0410317845, -24.6060572570, 52.6662467162, 53.1957816963,
+ 16.7992222346, 51.7621999618, -9.2959681635, -22.0395789118, 63.9887836127, -15.4794522124, -59.9041019732, 0.5489176194,
+ 78.6395685166, 134.5366929272, -6.8712023878, -25.4182816023, -94.3014920612, -120.7349462621, 15.0267811895, 64.1156824538,
+ 72.0730568718, 36.1969392849, 37.8409183719, 23.2904067106, -65.2310984397, -174.2644489990, -19.2228520790, 27.4717232382,
+ -59.1645079992, -37.9473607579, 49.8799507321, -79.0510884528, -28.3803465367, 20.3721781567, -0.4261835910, -35.8489167205,
+ 105.4583901558, 59.5722685004, -61.0197468314, 31.9348090719, -71.9443219028, 58.1935525762, 24.2368907755, 11.3281193558,
+ 73.7442066031, -58.2463274873, 62.2364089748, -22.1662416753, 80.8054311590, 1.1123457543, 65.0742762981, 34.9247990206,
+ 104.0897515469, -17.1726872127, -55.1967923359, -17.3070263921, -113.2466807440, -34.0273063199, 6.0065175641, -73.2050951521,
+ -46.9298900117, 42.5522795079, 89.6038769626, -13.3758161339, 20.0379230047, 44.3053936382, 38.7871513797, -96.5643124661,
+ -164.2750976118, -37.6742328774, -20.7444978754, -57.5075374112, -82.3747950875, -148.0525559565, 23.1385046849, 6.3810748790,
+ 26.2079771260, -76.0359611120, 49.8590173195, -55.6975098542, 63.1577456002, 131.5982420723, 46.7778921481, -60.9806982634,
+ 71.7495044841, 4.3127212188, -17.6552774593, -32.8038637189, -77.8751385740, -38.0621029989, -10.6340276560, 16.6596173712,
+ -67.3032141305, -8.7994716202, 50.9412272541, 49.9717453353, -43.5703597564, -49.6853674924, -95.7205166501, 40.8765465419,
+ 14.2287448407, -27.0614166095, 38.0714114583, -35.8412172130, -78.5197707657, -25.6825367235, -0.3120778923, -13.1591053910,
+ -13.3423425539, -88.8689993653, -141.9490353220, 15.3348435554, -1.2351271212, -12.5689032236, 63.2692606259, 92.6940600989,
+ 30.9761753348, -14.6354581107, 50.0664499041, 22.2230304376, -128.4011635209, 26.1869851104, 8.3304256738, -46.1344839419,
+ 68.3461812478, 143.4759863425, 163.6742650341, 55.1856555010, -60.1365810845, 74.3895957960, 40.2227984754, -11.7394255168,
+ 55.5453683738, 15.9202002202, -113.1213822368, -85.7280046039, -39.7263088573, -2.5339105246, 41.0492866970, 45.3079876954,
+ -99.6701239491, -29.6980232319, 18.5340063985, 51.1922973890, -79.7372970167, -13.2393250851, 14.7419728226, -4.8211133780,
+ -35.5172595564, 99.3966537203, 20.0590181900, -12.1081446475, -61.9594867060, -72.2256752476, -13.2936631274, 128.5345002108,
+ -71.9401693778, 31.6533870911, 50.8594991278, 25.1808453324, -33.5538293275, -42.3935228996, -20.8053274690, 16.2131527996,
+ 118.9172555234, 89.5930952748, -65.8274795934, 47.3384633282, 122.5406901256, -66.7549348343, -54.9185037426, -68.6601805746,
+ 34.4675543582, 104.9323617738, -57.0880010038, -43.1248502597, -2.0601370211, 44.1682882967, -89.1023577428, -35.5506312941,
+ -10.5170036504, 9.6779403375, 78.9291026934, -31.5855420521, 92.7949646880, 31.3559964123, 12.3617000392, 69.2326522660,
+ 3.9119449943, -36.5330788106, -44.5936841393, 45.7052258609, 10.6224387668, -24.1159570162, -21.0651270325, -84.0415379963,
+ -130.5857682422, 13.6064059568, -33.6699927959, -26.0082360265, 29.6219265142, -47.8318612795, 19.0742065634, -52.3410098996,
+ 32.2488186667, 8.7112925773, 68.7336792115, 23.7944448682, 99.9050365463, 8.6093548114, 59.7174217811, 23.0796589837,
+ -113.0722961466, 3.5971633707, -6.7890993972, 30.6764504710, -41.1295367209, -24.9164165484, 99.2386401122, 113.8333026527,
+ -38.9562599796, -55.4108562109, -94.4601804558, -31.7511549793, 200.3462283262, 12.7517487160, -42.3353937717, -51.1991446233,
+ 78.8520856510, 20.4131030912, 21.8102532347, -51.7944815361, -21.2191019005, 33.8300001131, 135.8377663961, -31.0221091170,
+ 65.7730407411, 82.5117419278, 27.7816244812, -10.6724454248, 26.6179164033, 64.9214169340, 44.6475686302, -29.0683019634,
+ 2.0965746914, -10.0085359932, -29.9021362947, -38.5046703557, -23.5486473509, -44.4560504617, 7.4417079380, 47.2393973843,
+ 37.7344798725, -13.6323296763, -28.2713540400, -12.2494841889, -113.6616109440, -4.4061813255, -84.4155850685, 18.2000114801,
+ -37.4375420019, -15.0025190330, 33.1826857536, -7.7672966949, -41.8570537108, -61.9447815201, -20.5430470077, 42.1225812423,
+ -4.9372231166, 80.1718433860, -21.7502429381, -107.1994683407, 39.0450370860, -13.9605768571, 57.8271065756, 100.7288025395,
+ 106.0257089013, -94.5099462535, -52.2425831475, 3.4251117300, 37.1163293092, 20.3088713026, 27.9957748777, 55.5881357120,
+ -49.9425573612, -74.3122437274, -45.4384442770, 28.0519415044, -57.3995353506, -34.0343398092, 39.4842857378, -29.4934441942,
+ -42.2931922612, 75.5085698437, -9.1579964746, -88.0001960638, 32.2921191297, 130.2295801645, -77.3690707106, -26.5699179687,
+ -98.7746128367, 15.1111986863, 84.2856839075, -91.3321816766, 75.0539365102, -22.9577135979, -58.2687890669, -16.4158023440,
+ -143.1190919220, 45.6864012367, -148.7549620241, -87.1075640764, -26.5968533502, -69.7944158144, -34.2978456494, 35.0769663698,
+ 4.1465107386, 69.0864439105, 22.4789950234, -48.0182401768, -14.5783104039, -61.0550243844, -4.2380948973, -194.8804104528,
+ 123.0819765947, 48.2017401505, 78.9508457466, -99.9736614294, 32.8340209984, -1.0245301508, -17.0041736706, 35.4641249127,
+ -33.3575407148, 192.9072183682, -42.9604868802, -51.0374996711, 77.1464797096, 66.0548981845, -61.4282764621, -114.3126571027,
+ 21.1118181552, 85.5335633765, 27.8488718530, -62.6421354515, -57.3557048619, 41.6670106942, 16.8928119140, -40.2432649132,
+ 0.6390713008, -10.1237727904, 52.7534146685, 2.9801643945, -11.3804175086, 119.2039503951, 46.6809821778, 84.8768259311,
+ 29.9865105951, 57.8288066379, 107.2625212828, 28.1456885969, -120.3755566725, -17.3802551503, -40.0564653651, 56.8407045846,
+ 1.6793816918, -109.5072716396, -52.8897837730, 85.9453300669, -20.0298903469, 52.5871200627, 13.0362762617, 92.2325099999,
+ -6.5198193020, -83.9036654607, 58.5211535567, 81.1131330707, 57.7324249784, 126.0368845782, -79.8586002513, -127.7584493863,
+ 64.8736188900, -10.6521288269, -0.9851623286, -92.3945133485, 7.5244215841, 40.5886593287, 18.6445609457, 19.1117310556,
+ 26.5640714899, 22.8091685027, 94.3470412324, 61.6764800801, 10.8760679684, -7.9240673383, 12.5919458396, 85.0254983280,
+ -15.7186492832, 30.3331627482, -136.2555384486, 14.2342767573, -52.2232864172, -49.0105238845, 16.4028777072, 13.1934114315,
+ 67.2005286948, -11.5431941527, -126.8761059118, 28.4325197274, -5.2730565073, -154.2913406142, 83.8362133106, -13.0557850235,
+ -24.0425722731, -9.3049739156, -91.4408491189, 38.7967852392, -54.4364475655, -50.1728478153, -91.7628978624, -92.4046791871,
+ 72.6594194204, 36.9149973552, -89.5520370642, -73.4541912166, -83.1026853287, 55.8083893384, -11.3360468605, 8.0892870502,
+ 21.3963536134, -27.2804196146, -86.1680209134, 11.1581691823, -68.2490961721, 63.5960852067, -40.1782672381, -50.7929323122,
+ 2.4820154810, 35.6921504427, -75.6795637705, 8.6054661804, -31.1168448045, 109.0955889455, -76.2488069978, 5.0199927782,
+ 37.8749455521, 5.6982241556, 27.3294929004, -120.2473221866, 7.8826650171, 111.0369524326, -43.8497436507, -66.7312430666,
+ 97.7440071817, 49.1570048378, -117.8025876335, 168.0477524482, -55.9600221068, 11.1068434425, 14.0513599858, -47.4087780504,
+ 100.4504374216, 6.1074714956, 53.7678384486, 24.4635321166, -6.0835375669, -64.3592936645, -25.7780083698, -83.3530662624,
+ -124.9544432106, 37.5615380015, -19.2986773913, -110.0015552689, 121.7589202263, 4.3256928319, -101.6571157133, 85.6785418597,
+ 16.0474362836, -31.9024530060, -52.6323741801, -3.4440544641, 77.7351607744, -10.1741553840, 48.3997106271, 1.5020725442,
+ -0.2257709330, 68.9623795901, 9.4286729097, -27.6379770488, -3.9912724152, 44.9954087833, -18.7057514605, -14.7638693232,
+ -1.7397189655, 68.2217569488, 63.3439223434, 38.9512814941, -25.6642624084, 54.1881119719, -92.4999870174, -11.5788876807,
+ 69.0279357511, 55.8205676574, -101.8852049100, 30.7429453237, -58.7382928803, 89.3969596003, -44.8903243228, 2.0422419096,
+ 41.1330103123, -88.6692130110, 25.4298182542, 0.8899898304, -53.5428328048, -11.5755725623, -28.6132997670, -13.0337245663,
+ 52.8092078154, 0.0517964686, -138.4959804685, 31.6788581756, -16.6154597478, 156.3340569922, 93.3010192905, 32.6407669098,
+ 112.1297440517, -35.7144834638, 6.5534121327, 128.2382195529, 56.9609192462, -52.8328776011, -65.7950928061, -13.3541979410,
+ 34.2814367341, 26.0764152312, 52.6477198183, -121.6672795964, 53.8959085384, -64.8464505733, -6.6989481273, -164.9991018529,
+ -12.9977296783, 92.2198340788, -58.9488062177, -17.3136354080, -15.0065268104, 82.2346850297, -52.0081326057, -31.8754548129,
+ -36.3987954967, 53.0154983421, 27.4015508471, 32.8268124997, 113.6916804444, 27.8095494681, -55.1665416696, -16.4156645469,
+ -42.1439424759, 38.5634363918, -64.9312441199, 8.3884871895, 32.9516167667, -0.9395063314, 58.4852381959, 101.7397916741,
+ -104.2729685077, -14.9331020781, 64.4379817410, -5.6149495442, -69.4590669042, 128.5957740501, 61.9917796337, 0.5819416032,
+ -69.7790071374, -1.0381159167, 20.1469541660, 13.3351412916, -104.5227876095, 77.5294242919, 38.0641940199, -56.7585742367,
+ -9.1765854459, 40.3713276531, 72.6358559436, -14.4449566608, 40.7675499413, -93.5568526062, 55.8238199978, -57.5895140577,
+ -82.1737195067, 14.7561780278, -155.1331660454, -3.4741158421, -90.9790829737, -67.6576031648, 58.4505812875, -127.2647404391,
+ -52.6551154593, 21.5600272148, 77.4232312163, -100.1093952602, 50.2042564606, 11.9885332900, 34.2641380301, -51.6644779651,
+ -14.4960161445, 67.8496081597, 25.8195812544, -38.8690931971, -116.1556251224, -68.6610388123, 64.4060064748, -4.5039590319,
+ 45.4866635009, 60.6472857766, 121.0539185194, 4.8340889914, -37.3668396220, -52.4747123096, 7.6362446201, -39.8862759852,
+ 8.0139163506, -19.7768070929, 55.9705429761, -77.6639159836, -9.0747973730, 87.1299271010, -56.0307413158, 22.0261066362,
+ -21.4877846313, 73.7508019333, 90.2727567859, -31.8064851485, 35.5698971534, -123.1337229178, -115.6888113061, 40.8859379019,
+ -45.9826093754, -55.6481101801, -131.3553753176, 30.0527360996, 21.6632646479, 98.0105924807, -39.4117175619, -101.5958309784,
+ 2.4560883180, 47.0714688572, -30.5516644873, -123.2193558202, -81.2276105808, -35.2333787774, 131.7553150138, 74.1337100485,
+ -111.0162621392, -50.1520236082, -176.7180780270, 43.6099370000, -99.0730647751, 100.6783161314, 1.5420581129, 2.5889162904,
+ 97.2407277690, 5.5204254866, 72.0939017458, -100.0077732933, 30.1572971400, 19.1994437619, -83.8095901131, -67.5983524523,
+ 75.2270686194, 80.9252084407, 42.4611462166, -75.6376932185, -7.5820680566, -47.2137370820, 13.3547714942, -49.2227272764,
+ -101.2311839023, -89.9953284490, -59.5627585772, 3.5045401284, 87.8927289585, -45.7826497344, 10.7894222301, -34.2218214372,
+ 19.0101005894, -79.7412295513, -40.7129535835, 34.9745871635, 98.5275860299, -16.5088968676, 66.3460699225, -133.5365249144,
+ -41.4407293928, -15.3419046733, 88.7195803357, 5.1871004832, -98.0467809656, -14.1239743026, -1.3510821103, -38.6189020004,
+ 114.8822422747, 65.5094003215, 88.0532368083, -59.2540330178, 92.9429540023, 21.9133947331, -50.7728654894, -36.7011682133,
+ -16.9217654808, -110.7749962658, 16.6126865137, 116.3641432033, 51.7192473353, 9.8619033750, 57.3047648863, -21.0275512361,
+ 66.8618463429, 68.4016463402, 13.1978892272, 36.9294559769, 79.3415169994, -74.4235076906, -105.9928928366, 3.5485737877,
+ 35.3701917014, 11.0155135724, -42.5279468110, 57.9138782373, 32.4492657117, -2.5260836533, 8.2835364235, -45.2229140182,
+ 29.4655763679, 20.5830184405, -92.7731928028, -88.2155574314, -13.0181590718, -67.4752432987, 12.2964799268, -134.7795554776,
+ 132.5177768161, 86.4796490878, -170.6768976365, -53.7059277336, 23.6295211743, 100.0865623366, 134.6726479190, -17.6813528616,
+ -67.3925719582, -12.1986138778, -58.6920640259, -46.1769630250, 14.0012237071, 105.2386807000, 47.5923010830, -13.0446195549,
+ 21.4905427079, 89.4924853541, -1.6294776664, 7.0507819885, 88.9962812504, -14.3836298512, -14.5755536250, -158.3719830729,
+ -71.0421641105, 9.1510759791, 3.8541666430, 46.8853635172, -115.4505016964, 112.1915084832, 60.0579773251, -19.3568210670,
+ 134.6457467896, -127.7704101409, 96.1687814173, 139.4223376055, -16.4889074247, 8.7407981479, -31.8653460842, -86.1989364296,
+ 6.3138143769, 29.9691806857, 10.0215115097, 21.7539979367, -10.0119096873, -32.7662562735, -46.7114278488, -32.0468371287,
+ -104.9863919627, 164.6868132811, 14.2837511902, 103.8122395985, -38.3195610630, -66.2071289114, -42.7348265210, 8.1247796770,
+ -44.7642634909, -99.5977533202, -62.5669299697, -154.4713244845, -54.2004565831, -21.0505396466, -7.2304668445, -63.1457522254,
+ 121.1292664630, -41.2451342849, -100.3661302819, -79.7893865863, 2.9782522632, 28.1233518579, -45.4712133921, 102.1080223649,
+ 64.1668281113, -103.7410276784, 106.7427715753, 79.6231477604, 20.5960195618, 42.6351844699, -8.0432553021, -20.9274320455,
+ 44.7322739383, -58.6239231825, 21.5430765926, -32.7159508398, 56.5825012360, -99.4275633192, -102.9101109727, -83.9315736318,
+ 25.8630456141, -52.7504372152, 29.5673565938, 48.9111232224, 41.5578130085, -14.3606917295, -2.2040972437, 94.4661907548,
+ 132.7457583187, 55.3945646514, -16.7731026022, -46.5710214158, -29.3542289267, -14.2923094674, 23.0425873685, -15.5814746488,
+ 22.3570974017, -42.0180359242, -20.3430155274, -68.6338886669, -64.8088612108, -24.2988048174, -23.5299375491, 98.0364255786,
+ 3.9778504115, 65.6849914578, -1.5168129555, -4.8287346639, 142.1453945317, 78.2378704371, -57.3720730586, -19.4585389336,
+ 76.2735042603, -43.9459949675, 6.9426433355, -43.1451402122, -18.0751403348, -34.1054109171, 55.1204864738, 115.4516445351,
+ 6.5333541873, 62.4906581904, 29.9692177776, -33.2287635647, -18.9268908378, -63.0926292852, -111.6323734820, -10.8864814281,
+ 14.4649132510, -25.6871888082, -33.4308400890, 23.9756688469, 52.4567038054, 12.8701945894, -20.5116135858, -17.4241576687,
+ -11.8606594870, 16.8816614097, -18.7270784248, -6.2425768906, 48.5175154819, 1.7426978337, -99.3023967479, 38.5650914417,
+ -61.0127172140, 42.7784858845, -7.2257854969, 2.2847466905, -99.0066793854, 60.4060120207, 48.8064141188, -72.4258965295,
+ -50.7390478551, 95.1299230407, 56.4763356354, 35.4471698843, 60.4632441624, -95.6600449901, 55.9445226564, -28.1942324306,
+ 26.9826142327, -71.4404566440, 15.9270065277, -86.7110877229, -80.6677402549, 0.5529947734, -39.4989884635, 35.7914768080,
+ -22.6398243670, -33.2598314085, -25.7467291233, 16.6863716736, 80.3468995127, -22.5068845945, 23.6096621616, -99.4288845571,
+ 29.0662266127, 3.1265642936, 133.4725188269, 10.5889496669, 78.4289320034, 46.4143031925, 97.1026760967, -60.1768585008,
+ 75.4045199491, 14.1399143092, -87.6608741602, 96.8571208381, 36.1952990642, 119.9462706822, 51.7941617293, -10.8814477399,
+ 66.0010885597, 68.6769630212, 70.6032262575, -78.6614013388, -52.6711668148, 29.9772317807, -67.0938602216, -42.3207515671,
+ -0.0486165038, -15.4758823937, 56.6129710458, -54.2575866392, 111.9253009797, -47.5236184222, -95.6434531533, 24.9411667600,
+ 35.5636297407, -11.3487509511, 99.6377899302, 16.0125061627, -35.8881400079, 111.1220549938, -2.9395719970, -41.6388550114,
+ -33.4638181727, 109.8808145106, 28.1021441950, 118.2701610217, 51.8151816796, -19.5803207598, -89.9262515893, -26.6044307189,
+ 40.7320823989, -19.2602062235, 62.2560193625, 85.9346547334, 49.7871555519, -20.0313162309, -8.1831982988, 69.5820284092,
+ 49.2993116756, 34.9185452172, 74.7523126024, 145.1939754190, 7.4232669832, -4.5344572697, 34.0472547752, 41.4294110612,
+ -123.0758971920, -43.7705297332, 121.2820069260, 0.5435048718, 77.7764299214, 59.6928983371, -27.6522675298, -7.1273383508,
+ 26.7210269180, 4.4630452796, -81.8607570684, -26.3402136551, -95.7197230242, -7.3219091557, -82.4289458596, 77.4381232638,
+ 65.4006110025, 36.5844708644, 66.3796224839, -11.0118557858, 61.4481921771, 8.0694380153, 59.4652425227, -24.3765004167,
+ 4.9649042432, -28.5624154309, -78.5623599502, 17.8514494843, -20.9756518143, -10.1916814040, 11.5732283207, 57.9552418906,
+ -45.7612949110, -20.9482951666, 36.8160063004, -45.0567155877, 63.7098701462, 6.5938197429, 46.9692949757, -83.3299455774,
+ -88.7653437148, 118.8655843800, 93.1921951705, -18.1354337452, -40.1074391033, 44.0852297241, -41.1588703642, -105.1428083912,
+ -7.1420535313, 66.5491789931, 28.7643638361, -71.3690563573, 50.9039393300, 93.8257368698, 22.3478174946, -109.6001863096,
+ 64.0649017243, -29.4574274496, -44.5473845748, -132.8280128599, -52.8587533053, 80.0084510351, 21.4678106815, 48.4383573310,
+ 56.6158184924, -72.0365616804, 12.9911383411, 162.8295288963, 55.8780535954, 73.1821757559, -100.6826313435, 23.4262138290,
+ -0.5753332881, -21.5175209047, -138.1106268547, -80.7925993001, -28.1663114958, 0.9831816192, 30.7923417673, -51.9827613979,
+ -10.8794388756, 54.1022652480, 11.1686073161, -44.0592484786, 21.6987012718, -42.2412255611, -3.4936004646, -51.6421714543,
+ 15.8711886614, -40.0043968804, -6.1590232957, -65.9457642489, 59.0569838977, 7.4295907490, -12.6833895574, -72.2928299923,
+ -199.7835511043, -71.1580901042, -12.8895530614, 13.8448156167, 27.4808788351, -46.2542221592, -3.5153348434, -176.2019445127,
+ -48.6783165219, 70.2296726615, 111.7340160335, -60.7655899218, -138.1081385724, -35.3974788626, -65.7355628000, 57.9555341829,
+ 13.4670930872, -79.3318328665, 36.5016341422, 27.5574278118, -35.4004898428, -79.3903940148, 243.2421421265, -8.0268453199,
+ 44.0174931524, 68.8734465340, -80.7502038529, 1.3409036386, -86.0777878831, 37.1475406267, 18.1068167023, -56.9153447361,
+ -19.5224115764, -78.8474074897, -20.0747255852, 4.5850719720, -191.0686482737, 23.5318026769, -32.6675253287, 27.3087304829,
+ 31.4351407465, 19.6192337929, -11.8866458644, -48.4661089981, -3.1226120347, 20.0138411382, 29.8813799560, 67.9558437137,
+ 38.7174108080, -13.3022284820, 27.1121047281, -26.2954327750, 120.9542179193, 11.0555865630, -34.5895364072, 73.4542523467,
+ -26.6956937208, -108.0235037857, -35.7355716826, -69.8443555160, 33.3578766421, 26.3683815560, 97.2883332520, 133.5510498515,
+ 35.5415284008, -16.0495119378, -19.5483270675, 93.9985201088, 27.7795159179, -13.1059263368, 34.2311271533, 47.1466381795,
+ -36.4147469783, 10.4833119779, -5.2292656110, -25.0113244760, -14.0549947152, 199.8348526048, -43.2547698686, 98.4817969474,
+ 37.0586206693, 33.2121561269, -24.7170470026, -37.1349105091, -30.9578044903, -7.4114930133, -34.4807046142, -27.7773696385,
+ 29.2740921831, -61.0686554741, -32.4612619459, 6.7160769792, 3.1089599122, 12.2545595923, 62.6999428463, 30.5969686709,
+ 11.1423411573, -57.6502489731, 60.2408835918, -67.7203861906, -44.4518971003, -5.1109945114, 5.6528645074, -43.3456968092,
+ 117.8609487802, -24.2034537544, -78.4496201847, 44.5294780988, 85.1475013837, 15.5247701555, 89.7512668950, 54.3013774517,
+ -186.8510627600, -51.0482727175, -9.0267702018, 48.0681416363, -32.9759681266, -42.4456615266, 36.2738833817, 14.1610476535,
+ -99.8207994579, -11.5142692827, 50.1825860327, 0.3917737329, 63.3500370315, 111.2878444719, 91.6392406660, 17.6584451589,
+ -50.7899615175, 12.4221556654, -86.5413087906, 48.0563389410, 29.1384649619, 83.5027000186, 7.5729436929, 22.2136423571,
+ -60.2741473997, -170.4857658702, 17.0186844162, 136.3581532664, 31.5065683845, -96.2326886411, 72.4014182257, 26.1414887396,
+ -57.2844089463, -43.9781986370, -95.6611720182, -133.8830434822, 33.4938269182, -23.9156927559, 35.5520154186, -93.2468099373,
+ -6.2162527113, 4.5642492223, -57.5722591446, 71.8064120226, 45.1768685505, -9.5130102236, 110.5798720279, -41.5641619544,
+ 0.1835509076, -49.9128593949, 98.0154257393, -46.9365276597, -66.0935141873, 73.1727792846, 41.3353795661, -27.9960128980,
+ -44.2412816343, 46.9707404231, 12.3575979804, -122.9770710291, -11.9552135499, 31.4591712664, -14.1931325058, -6.8614191170,
+ -16.9763787814, 36.1520894392, 75.7352320923, -99.5121191729, 17.8024156510, 72.7923924404, 38.2259409765, 1.9325379601,
+ -11.1978607868, 98.2703853998, -38.0288299607, -41.7008273041, 80.4517499854, -116.8258848759, 30.7289872645, -101.9012423077,
+ 93.9831977796, 101.4530665010, 9.2763209169, 116.4425755502, 2.9739225298, 45.5019124654, -64.2956140887, 105.7408745662,
+ -11.3657606620, 6.3069096678, 122.8709609828, -6.3248578668, -60.1760116205, -35.9544630869, -68.0834090495, -34.8224305999,
+ -31.5069839788, 21.2614258718, -23.5546199906, -128.0293305211, -182.3893947839, -120.7110714918, -65.8822590864, -63.8215221762,
+ 56.7670203795, -61.2037205962, 3.8122259155, 1.0275735300, -64.6391642695, 75.8652993596, 115.4068637021, 46.8849792653,
+ -39.5505124775, 33.1187321149, 25.3372286880, -18.5375942960, 30.3953994229, 21.8836680766, 13.9924166006, -109.7038947262,
+ -24.2899011732, -52.7497505668, 35.3698361783, 34.1056231420, -13.8686663216, -1.7062295227, -97.5362177027, 74.6544677369,
+ -78.3935767846, 35.6517853160, 51.3830818724, -93.7778131463, 81.6700292143, 126.8070312922, -28.4470816468, -71.2638167545,
+ -55.2884800428, 9.0861240716, -128.9083303383, -16.3800803508, 34.5467745617, 28.9315662137, 84.3386694814, -1.7523953786,
+ 69.7727914393, 44.6546611575, 90.9897326057, 121.8059195607, 28.9429876729, -14.8591127934, 29.2818722570, -84.6318423838,
+ 11.3290830564, 40.7084140001, -50.5878424847, 68.2992258419, -24.7150040711, 41.8365599450, 104.0111319954, 70.6981835472,
+ 56.4709262168, -20.5343182666, -16.1886023808, 101.3482649415, 108.5356887852, 24.5240870510, -146.5152615985, -24.0194234128,
+ 18.0331846295, -5.1522407439, 4.9573388243, -34.7877468646, 39.3333900199, 31.8580232326, 111.7915751739, 15.3919610203,
+ 17.5179415363, -22.2065299595, 31.9496951848, -18.7368015481, -78.3621490938, 45.9954796476, 77.7231064126, 21.7258618723,
+ 23.3527631711, -136.8686653828, -22.5773174812, 33.6615614603, 4.8540113479, 3.9088571058, -54.7099788715, 85.8089519875,
+ -86.1460475251, -0.1247811474, -146.1793416666, 124.6659345147, -60.7858975441, 10.3154193265, -29.5514280889, 9.4667237048,
+ -7.9550953683, 37.5451209024, -27.1735194003, 46.8842847809, 41.9179936640, -23.3158010522, 157.3009890625, 113.2843306932,
+ -104.1727731788, 123.3854503767, -5.2055501860, 27.9879059133, -13.4163698144, 52.2833141248, -129.0969704337, 46.8881212895,
+ 131.1080768010, -19.0213767099, 155.5021671973, 20.3698150937, 37.2314029160, 40.8492644144, -35.6880906860, -31.7697839101,
+ -24.3255617048, -26.5610341544, 11.6187963194, -51.4990517524, 39.7825587179, -54.6696763219, -3.8497258220, -70.2342476864,
+ 4.9081928390, -71.4654689380, 30.7344594349, 32.7496322701, -90.9126087838, -38.3652430128, 92.4042844207, 47.8082836295,
+ 145.6802813070, -18.7426859824, 17.6059584845, 36.4864322344, -18.7252161480, 0.9615718128, -100.1282552629, -42.4349083923,
+ -14.3562238984, -46.8134065357, 39.6360915881, 22.7361846189, -3.2257803075, 37.2350125538, 115.6400099866, -12.7275184486,
+ -96.1855573652, -10.0276483356, 57.6455407419, 77.4560348751, -22.1178137498, -35.6022362191, -68.4831367839, 2.8390215747,
+ -52.0573070842, -93.4720169324, -28.9154032611, -76.6074307649, -9.9420438435, -6.1893105222, 29.9369590932, 74.7852614650,
+ -1.6201087045, -17.3703711090, -98.9790496449, 26.7869734481, 17.1602014711, -15.6928367417, -7.8035969135, 89.7887008279,
+ -70.6197502665, -8.2854282454, 59.3778733341, 73.2639493915, 25.8370203675, 59.1628124401, -24.8471900591, -25.8194366580,
+ -6.0751044137, -57.7489484697, 88.6706386657, -84.8771863224, -89.4840617668, 10.9763517990, -54.8378810910, 41.3410088555,
+ 66.6125927808, -14.1311991812, 29.3005546497, 96.5047091289, -3.3614374997, -25.8108903749, 206.5074424684, -61.4084159691,
+ -62.4923495769, -13.1959183651, -59.3730978039, -12.7173171637, 16.2427076425, 43.4296534191, -21.7657996669, -28.1531280594,
+ -69.0302418588, -86.4107750374, 17.1949881709, -41.3078350297, -57.6504646238, -5.0909583836, -8.1631298822, 1.3096980446,
+ -2.2508953688, 35.1942051704, -3.9027768036, -91.2713667132, 63.6694073039, 41.4248931898, 9.8384382954, -96.0978983961,
+ 66.1755919288, -36.7372549691, 10.2307178666, 80.7031291631, -38.2719834734, 39.2035878064, -43.1259903655, 93.4819414373,
+ 89.7247077937, 78.9891448344, 95.0983537363, 36.5774514331, 8.9972120390, -8.5755002664, -102.1337133375, 76.9830915294,
+ -46.7790015335, 51.0714648600, 29.5170917782, 23.9334813635, 5.2749838346, -15.9842728433, -1.3574532545, -70.2729088611,
+ -15.8039920242, 15.5313565190, -18.1312003682, -8.0084433716, -27.8087982433, 51.7334750530, 19.3370491919, 29.2520159480,
+ -68.6735151718, 8.0558008798, -40.2210320066, -40.9920576136, 7.8678303082, -72.3041306508, -10.2175986624, -35.1356797035,
+ 201.1586117629, 56.4352966867, 46.7221688254, -11.9012413099, -18.9833303926, -86.5023414408, -23.4675063576, -55.5806400666,
+ 153.4955981228, -10.1092363214, 88.4029573110, -65.9117133686, -5.4919562765, 24.5837979674, -33.5408574701, -4.0004157187,
+ 56.9848893304, -105.2177018084, 3.4948685307, -19.8452050090, -7.2453079498, 102.6389582052, -8.3246123264, -73.0861922381,
+ 0.9626940760, -28.3612950785, -11.1533678981, 44.2899763978, -62.6677448146, 22.3906970985, -13.3484872677, 67.0703918899,
+ 42.4772156970, -18.5244182335, 37.4759091463, 31.3496965213, -61.4436264287, 52.0955155439, 59.1486887940, 170.4906735140,
+ 46.0617455116, 40.1470772024, -107.3976903570, -105.4116725861, 56.8825181023, 58.5916397550, -58.1729962485, -60.5270235223,
+ -39.2885519005, 9.5965348817, -25.4354894441, -14.0981625889, -52.7234757042, -83.9105208881, 72.1797338834, -134.9219073856,
+ 9.6103094318, 9.6768962656, 26.7360474274, 41.7881752284, -15.3952839007, -0.1363655901, -47.0864221556, -8.2427253205,
+ -57.7373834528, -55.9508702650, -78.5284244100, 0.1655492302, 62.9160705153, 64.1068291282, -2.9136214436, -105.7842253662,
+ -45.8767944713, -51.7074257000, -98.8568902926, 64.1232083599, 71.1116077196, -30.6630666091, -58.6840707262, -15.9383894413,
+ -78.6620829271, 60.7529890099, 154.2357488637, 41.3625348402, 120.2872442705, -51.3125389772, 16.7881412988, -70.4938171347,
+ -79.4147805796, 23.5182282020, -81.0963234264, -59.2244948022, 28.9135530940, 92.5951342446, -96.6396527065, -26.4777264554,
+ 121.3094449527, -34.5951012470, -127.8255512216, -92.7699064191, -58.4398020189, -117.7542292595, 31.0434596629, 21.5299289765,
+ -99.9447239591, -16.0626333679, 6.0199864189, 82.4757175357, 22.5970205481, 73.5485760950, 35.7980568403, 72.6857884103,
+ 28.8479981590, -67.5538339177, 43.4071338656, -25.1893024527, 4.6130159403, -65.2605921685, -91.8752363625, 22.5520067301,
+ -109.9093500045, 33.9399454761, -13.9115156368, -3.1879928935, 1.3920042271, 43.3324348308, -33.3718525809, -15.9282931008,
+ 0.7677944075, 78.1072718708, -1.1063828562, -10.5413152425, 37.1290958861, 13.6823396336, -3.4014039018, 89.5388534365,
+ 37.7089705536, 64.0323076524, 44.7808982777, -13.5604762388, 7.5118173888, 115.2300447558, -9.1561273300, -41.5332100116,
+ -17.0088418256, 71.2713927804, 68.0422816650, 54.9551164038, 106.8830646917, -6.8316822423, -66.7609967606, -23.3894825625,
+ -67.4182747661, -28.3219951260, -15.9451114055, -29.7266619746, 16.7419712545, -20.5565859019, -165.5656221846, 116.3242135199,
+ 64.2626611081, -8.1360214710, -94.2273608282, -62.9983557391, 64.1759043922, 36.5449254036, -51.5697599431, -5.0466305585,
+ -73.2700815931, 48.7300029897, -35.5929303432, -90.4816448914, 16.8187764590, -27.9347950060, 80.7045416696, -83.6514663068,
+ -58.4556594913, 3.2348973759, 52.8657910284, 85.7278577109, 37.4138218732, 82.0512145755, 76.4606241856, -109.2162517858,
+ 96.6683439683, 90.7633843052, -53.1586977972, 34.4033331064, 44.2090456506, 80.1151111552, 2.7514790758, -64.2623287852,
+ 126.1409018754, -30.2423240636, -156.0079941574, -2.8027393737, 64.2513542782, 69.8534581189, -73.4708875363, 20.2217494242,
+ 0.5864357659, -104.6195300646, -42.8322649072, 26.3037603855, -40.7129474708, -33.9844594811, -26.3521525879, 109.6645932255,
+ -106.9356716414, 49.2118962107, 11.7512591870, 68.8969247665, 113.4583578600, -83.3347276867, -36.2485402256, 85.9855241461,
+ 104.0814868325, 33.5770186573, -1.9661285608, -132.5696804701, 27.6753215958, 21.1243350017, -28.0882593661, 35.2778527631,
+ 18.9175154387, 83.6190957901, -71.4962755318, 138.3285404575, 97.9134306607, -56.8042150595, -143.3089544841, -2.7340225658,
+ 17.5776154385, -148.2352087417, 124.9211804787, 59.4231271286, 10.5947124378, 68.5288310273, -67.2703544731, -23.7935515786,
+ 38.8787769309, 34.5294359419, -73.4536038751, 2.7126504728, 49.6972438051, 62.7223593643, 49.8175933904, -110.1534126143,
+ -14.6702420578, -84.0773525862, -92.6188033620, -5.5698102323, -47.9128909478, 46.7196485027, -53.6444016449, 98.5014752828,
+ -94.7519348776, 14.1323076055, -89.2719075396, 47.0296071172, 41.3919626390, -39.1489616034, -135.6499693540, -10.9475781700,
+ 92.7496269052, 37.4205820588, -51.7237524182, 49.9460461012, 87.5396720347, 32.8710569742, -32.8731769330, -83.4249720632,
+ 34.5762125072, 13.6808877416, -26.3766683600, -67.8728489559, -29.6073750328, -47.8030427727, -149.0587954245, -119.5774481626,
+ 35.2806694964, -24.3695409777, 48.7160766560, 8.8288204812, -89.3855803242, 3.1835611015, 51.9474587643, -41.8502161006,
+ -34.1035165420, 94.0854499359, -84.2224914514, 59.1627371631, -103.1905795588, -18.6082417651, 36.3103092592, 63.1937125568,
+ -111.1986222065, -32.0863426915, -56.7330383564, 32.5073363806, -7.1087996309, -68.2226145792, -157.6532604957, 45.2078386315,
+ -2.8603211008, 33.3371110420, 37.7846637198, -18.6405663742, -91.0982111740, 23.2221097945, -24.3522827840, 78.9413600618,
+ 62.8360928143, -19.9242767252, 56.5032728402, -5.5496240010, 8.6994906960, 83.5527376759, -21.2346885874, 64.0836232315,
+ 22.9623722574, -87.9578765280, 1.3523030640, 176.4067098705, 67.9036978634, 7.2537723049, -122.2309062335, -63.8632909466,
+ -38.4903796734, -16.2974411834, 2.3970826418, 64.3700072918, -67.9197915888, -116.4026668750, 67.5231031500, 34.6374455493,
+ 4.1311157296, -2.9105015532, 70.8086558293, 39.2725441796, 33.8256743917, -3.5843642097, 116.7643833804, 20.1092238787,
+ -25.9766854190, -51.9950492522, 3.5926636209, -58.7583611171, 3.2768807331, -83.5901878329, 68.7090363388, 31.4832422043,
+ 72.9380572718, -165.9742811160, 33.9362033271, -10.9519428632, 13.0808211304, 15.6672709051, 31.7224492437, -24.1934977704,
+ -111.0830116867, 11.6282084172, -66.2259706857, -1.9963673172, 30.0622960183, 53.3456859503, -37.0919419160, 67.5944964290,
+ 18.5935153812, 48.9664966150, 67.3157768914, -160.7111991618, -25.1223842933, -47.4479071245, -16.7582679230, -13.6039270052,
+ 1.7293472100, -24.1741877419, -76.9727398203, -56.3783736939, -66.9556303947, -54.3511473684, 30.2542211582, -66.8893229449,
+ -73.2990092912, 239.3981985262, -64.2850340511, 89.9092075497, -15.3525489059, 53.3827372899, -14.3319916122, -115.0721596412,
+ -50.4530123160, 44.0976786926, 52.2019557554, 72.6630207131, 27.5803572747, 33.4737730840, -170.7640086205, 152.9204474548,
+ -44.5872734278, -41.0667502536, 26.6175854758, -13.0179143239, 40.8518134705, 23.2781614140, 22.8861340709, 165.4158655103,
+ 45.0461105030, -17.0077443894, -2.3871329828, -86.8854944700, -38.5465304439, 51.8040803063, -92.8924802068, -113.2325293603,
+ 51.3604041632, -18.3429725256, -42.5989033884, -38.9445115750, -85.8273183104, -56.4224331649, 17.4997720376, 89.3766578841,
+ 23.9239370283, 82.3838988229, 47.4013397563, -28.0666334287, 77.6218433875, -52.2133433307, 89.2938264737, 43.2058195424,
+ 49.4518987655, -5.6570623864, 19.8577713391, -33.2615393471, 73.6654400011, 27.5602339563, -47.1471825605, -34.0693505588,
+ 111.0944675938, 57.0173259682, -63.4190502251, 46.5969999331, 49.3458328432, -41.3853156260, 39.2494112424, 40.7148228670,
+ -20.3911372187, 31.8352000294, -0.9980198147, 22.2804091174, 54.0978218332, -82.3683192993, 85.9892355872, -58.3154306688,
+ -104.2068911293, 91.0603181519, 32.9518095573, 20.8407188930, 34.7499759595, 81.9688480501, -63.1013763435, 0.0064684915,
+ -24.5056101811, 69.9306176471, -27.5369930597, -39.0144381716, -14.4923929902, -54.3182594365, -130.3292318388, -48.8158919788,
+ 53.2734036714, -104.1048090944, -70.0965204183, 3.6382745923, 83.6579656965, 23.1622465812, 126.4691310854, 102.9799547579,
+ 70.8617976147, -8.1455978101, -28.4590640876, 108.1156467676, -1.9738076313, -75.4909376542, 57.5780163484, 45.3155422582,
+ -38.1742907476, -52.1803902400, -59.7016262432, -23.3823853194, -45.5457749841, -10.5523915014, -110.6271933849, -32.0113288878,
+ -86.9215548382, 87.4068451718, 70.9885834348, 25.1206930472, 30.7108505789, 115.6076847444, -40.5697084903, -56.6781054555,
+ -31.4854227803, -31.9552555012, 25.7938108182, 25.4540472201, 76.7058033375, 2.3905659773, -5.9779298940, -152.8056710400,
+ -51.7485397077, 28.1462240336, 33.9693389366, -71.9881317816, -105.0496130632, 64.2276458511, 96.2519735406, 48.6822690044,
+ -19.6594071488, 24.8884631741, -33.0716823639, -69.5612618256, -25.2898319495, 98.8036926982, -24.3703282453, 53.1789051370,
+ 86.5743876344, 18.0109802577, 68.3663740236, 112.3369755598, -45.4492280850, -151.6437874688, -38.2167192413, 24.2163999975,
+ -66.3294468430, -150.1009914497, -29.4992082835, -92.1308610284, -1.2762556067, 23.1500238372, 69.3063510487, -69.0471660018,
+ 42.5150200276, 120.6653379806, -152.6729845687, 48.9591377076, 2.7191539126, 0.2888762146, -3.0784673164, 32.5853754582,
+ -81.3351116851, 25.2072127071, -36.3659441163, -28.6250561447, 95.3073017008, -75.7486406052, 65.1012680265, -64.6031857772,
+ 56.1240652498, -10.8517181129, -3.7575141784, 42.9554134355, 32.9784965739, -25.0327158003, -147.2361479829, -122.4898965848,
+ -64.6526214445, 57.1527521244, 25.3983254376, -74.5887309421, 105.2278400890, 118.4451948788, -10.9195498541, -45.2849091353,
+ 79.1200975888, -60.8806018590, -12.2957628012, -10.2289743666, 77.2465842566, -19.1618580885, -50.3947630673, 130.5843172047,
+ 20.1829697245, -24.4247513916, 71.3800655588, -30.9467657000, 1.5373397590, 53.9054414421, -87.7905799212, 58.1774557931,
+ -154.0660955458, 119.2331706772, 7.0800339615, -83.0564977313, -99.0630549412, 64.4241699198, 27.5103964537, 36.9348345670,
+ -10.4954521840, -23.2759360131, -167.1583158447, -50.1929188975, -17.1065117999, -86.3978192131, 8.3733101608, -19.6093068970,
+ 37.0486109491, 45.4922144870, 176.0647013511, -14.1950922727, 16.7968812286, -84.3138225875, -53.2207464331, -14.8171496969,
+ 65.2824157581, 93.3387940939, -46.2740703075, 92.8129768305, -57.1890439907, 27.2969064938, -67.1547095718, 132.0520323271,
+ -80.7686358272, 31.4140691769, -52.8148627904, -54.8739580131, -149.8514804755, 56.0153122854, -71.3742949563, 36.6095599948,
+ 42.3294500451, 1.2055515804, -109.4906983981, -71.9482696076, -21.4390953534, 98.8949510272, 74.3069855376, -35.1569830360,
+ -34.9626381657, 64.2761847423, 64.7596378221, -28.4775450749, 20.1459803277, -26.5247867780, -32.4734659348, -27.8310906478,
+ 50.7956581065, 36.0746451268, 22.7531905225, -13.9681530928, 49.5451440618, -13.8510794385, 19.4999565108, 56.8774616945,
+ -11.9205397259, -71.7174333027, 138.8034243907, -37.8252215401, -38.5743154556, -22.5072374207, 12.6209402643, 69.3207345010,
+ 70.3534390616, 71.5844311614, 4.0715727994, 25.4390606947, -51.0777668722, 138.3617611366, -34.2478029347, -58.8492260984,
+ -108.6623124843, 58.3034938571, -36.9304647333, 116.5902412201, -24.4020501110, -74.7544840602, 67.7889120207, -9.1455389450,
+ -46.4456521441, 83.2551857934, -113.9346066504, 46.2851467498, -17.4102217179, 41.6989724702, -23.8829078702, 76.1395799790,
+ -27.1608730178, -133.8787483532, -59.9242635982, 120.5266415560, 124.9797395465, 35.5722660007, -20.2412573812, 20.5492611902,
+ -111.8745990845, 41.7389321101, 44.5758622786, 54.2189628306, -44.4745944890, -75.9761098966, 104.0472151578, 113.7219003284,
+ 33.0330354214, -6.0923562541, -14.8744671800, 62.5024055272, 3.7922184446, 1.1256712478, -30.2126827228, -83.4988699637,
+ -103.7060854897, -65.4982917403, 30.8897494352, 66.1124672663, 65.0983461952, -52.5486436649, -4.5556524541, -26.5924272500,
+ -94.1546367179, -0.3559369287, -45.0649519841, -68.1274094478, -7.0521865275, -5.6612786174, -12.5790011432, 51.2524661231,
+ -3.6515125298, 92.9598974936, -21.0468658542, -40.8243392179, -7.4342227950, 11.1119231703, 37.3371820746, 21.3179018153,
+ 50.2932980480, -24.1611515405, -41.7851721122, -24.8691439055, -28.3180388219, 121.1894536511, 15.7968116384, 17.9498027226,
+ -55.3386005430, -80.6689826830, 31.9394747713, -28.1978017432, -1.5538441529, -4.0360096323, 73.9611531119, 17.7253526010,
+ -24.8578563772, 18.4583438017, 75.2580204243, -13.6139802015, 24.6918362443, -63.0552815767, -4.0312608443, -14.8879121339,
+ -2.8237511683, -81.5024576341, -4.2344562157, 107.1587476255, -131.2910041645, -25.6467586377, 0.4733397655, 62.8634326464,
+ 63.1852609425, 16.5913941858, -96.6896044528, 81.2969911064, 18.2956425408, -81.6677471269, -39.2708721333, -34.3080597347,
+ 22.5610412882, 57.2574226391, 77.9308780964, -39.9342842346, 58.5581960994, -5.7939281526, 104.9927182940, -99.3837066580,
+ 25.9917768621, -32.1605915683, -30.4589523848, 64.8295771021, -28.2183758982, -37.9771330859, -178.0772548046, 84.2925125233,
+ 45.4981954662, 49.2815212900, -45.1224250038, -5.9322404186, -6.1309915876, 76.9070873365, -11.5475730308, 18.2569564924,
+ -124.4953563688, 53.8646820493, -40.0231506068, -74.3908746450, -63.2011642999, -18.9826189881, 69.7917580387, -34.8403308318,
+ -36.4625632706, 17.1934091336, -20.8063613141, -1.9067935434, 5.2259139474, 60.8368210348, 81.3087550974, -42.6679999668,
+ -95.5963552311, -115.2609753741, 11.1809831183, -48.3640194531, 75.1073797772, 30.8228127170, -15.0904157375, 11.0538529673,
+ 107.4505154927, -66.3486660110, -32.0311111189, 38.4346222125, 8.9422998706, -57.6098106212, 15.9132097612, -132.1845158340,
+ 36.1916704283, -10.5055186124, -87.5658217149, 107.8931306399, 96.0334082800, 53.7264664477, -72.0623965686, -1.9038197721,
+ 26.1152808779, 119.6235796272, 48.3325601149, 117.6457486801, 28.0275495741, -11.7030018715, 52.9236279862, 100.1176831736,
+ -83.2423151898, 7.5280868233, -15.3686195277, -5.3432329923, -27.9181052724, -64.4492860287, 129.7502751613, -82.3246020383,
+ 37.3256155504, 34.7298938660, -57.0561320806, -44.9581455455, 93.3481469867, -54.3803550243, 26.4501204966, 18.8116878139,
+ -74.4902220818, 15.4659232518, -49.1948332727, 34.0006040345, 56.7177639954, -28.8367897421, 83.8692564278, 35.6745892475,
+ -45.7509262432, 30.3970223242, 106.1786129556, -35.7843870107, 7.1339227808, 13.0894885560, 56.4666438735, -23.8687514544,
+ -111.5694112759, -58.7858061292, -61.2783887765, 44.1738302093, 54.7407844064, 14.3538652267, 108.5956394164, -22.3846808158,
+ 2.5449431771, 70.3512724427, 29.5403015688, -0.7212818796, 143.3497258886, -17.2553350633, -99.7681623907, 42.6913312311,
+ 35.7338157369, -54.6728371746, -38.0299088541, 10.1471440532, -124.7095236710, -190.8743243033, 139.7543496645, -42.2528776639,
+ 39.0975372290, 27.8686903911, 22.7337255980, 42.7990612235, -41.6771094483, -23.0843729437, 49.7020046877, 11.0018909876,
+ -16.5079644797, -158.2821637063, 42.1950179525, -30.4282660128, 67.9797563487, -53.8121334664, 52.8306609341, -5.2861803454,
+ 59.3808475761, 158.1836295178, -26.8953096767, 78.8646320997, -113.9365510474, -37.1949934282, 53.6970193167, -9.6523467804,
+ 7.7358952669, -74.6220593088, 107.4394203873, 17.2364088475, -36.5357935724, -23.9301386540, 17.8174243490, 14.1204969615,
+ -8.2599377000, 4.2743586584, -46.4363395746, -63.5670279031, 9.6872641411, 21.0630349930, 108.9834586896, -124.7597975398,
+ 29.4251821664, 23.8313097730, -40.8359610210, 91.9520219869, 95.7936525792, -109.5783337883, -60.1100153384, -19.9591228893,
+};
+
+/*--------------------------------------------------------------------------------*/
+/* FFT Lengths */
+/*--------------------------------------------------------------------------------*/
+
+/*
+ To change test parameter values add/remove values inside CURLY and update
+ the preceeding parameter to reflect the number of values inside CURLY.
+*/
+
+ARR_DESC_DEFINE(uint16_t,
+ transform_radix2_fftlens,
+ 7,
+ CURLY(
+ 16, 32, 64, 128, 256,
+ 512, 1024/*, 2048 , 4096 */));
+
+ARR_DESC_DEFINE(uint16_t,
+ transform_radix4_fftlens,
+ 4,
+ CURLY(
+ 16, 64, 256, 1024/* , 4096 */));
+
+ARR_DESC_DEFINE(uint16_t,
+ transform_rfft_fftlens,
+ 6,
+ CURLY(
+ 32, 64, 128, 256,
+ 512, 1024/*, 2048 , 4096, 8192*/));
+
+ARR_DESC_DEFINE(uint16_t,
+ transform_dct_fftlens,
+ 3,
+ CURLY(
+ 128, 512, 2048/*, 8192*/));
+
+ARR_DESC_DEFINE(uint16_t,
+ transform_rfft_fast_fftlens,
+ 7,
+ CURLY(
+ 32, 64, 128, 256,
+ 512, 1024, 2048));
+
+/*--------------------------------------------------------------------------------*/
+/* CFFT_F32 Structs */
+/*--------------------------------------------------------------------------------*/
+
+/* Uses radix2 lengths */
+ARR_DESC_DEFINE(const arm_cfft_instance_f32 *,
+ transform_cfft_f32_structs,
+ 5,
+ CURLY(
+ &arm_cfft_sR_f32_len16,
+ &arm_cfft_sR_f32_len32,
+ &arm_cfft_sR_f32_len64,
+ &arm_cfft_sR_f32_len128,
+ &arm_cfft_sR_f32_len256/*,
+ &arm_cfft_sR_f32_len512, */
+ /* &arm_cfft_sR_f32_len1024, */
+ /* &arm_cfft_sR_f32_len2048, */
+ /* &arm_cfft_sR_f32_len4096 */
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* CFFT_Q31 Structs */
+/*--------------------------------------------------------------------------------*/
+
+/* Uses radix2 lengths */
+ARR_DESC_DEFINE(const arm_cfft_instance_q31 *,
+ transform_cfft_q31_structs,
+ 5,
+ CURLY(
+ &arm_cfft_sR_q31_len16,
+ &arm_cfft_sR_q31_len32,
+ &arm_cfft_sR_q31_len64,
+ &arm_cfft_sR_q31_len128,
+ &arm_cfft_sR_q31_len256/*,
+ &arm_cfft_sR_q31_len512, */
+ /* &arm_cfft_sR_q31_len1024, */
+ /* &arm_cfft_sR_q31_len2048, */
+ /* &arm_cfft_sR_q31_len4096 */
+ ));
+
+/*--------------------------------------------------------------------------------*/
+/* CFFT_q15 Structs */
+/*--------------------------------------------------------------------------------*/
+
+/* Uses radix2 lengths */
+ARR_DESC_DEFINE(const arm_cfft_instance_q15 *,
+ transform_cfft_q15_structs,
+ 5,
+ CURLY(
+ &arm_cfft_sR_q15_len16,
+ &arm_cfft_sR_q15_len32,
+ &arm_cfft_sR_q15_len64,
+ &arm_cfft_sR_q15_len128,
+ &arm_cfft_sR_q15_len256/*,
+ &arm_cfft_sR_q15_len512, */
+ /* &arm_cfft_sR_q15_len1024, */
+ /* &arm_cfft_sR_q15_len2048, */
+ /* &arm_cfft_sR_q15_len4096 */
+ ));
|