forked from PAWPAW-Mirror/lib_xua
Unit tests for fifo
This commit is contained in:
35
examples/xua_lite_example/test/Makefile
Normal file
35
examples/xua_lite_example/test/Makefile
Normal file
@@ -0,0 +1,35 @@
|
||||
# Copyright (c) 2018, XMOS Ltd, All rights reserved
|
||||
|
||||
#Note no xcommon included - we are going bareback here because xcommon not good
|
||||
#at dealing excluding/including source directories out of normal structure.
|
||||
#We want to have a test app here using some source files from sw_vocalfusion (delay estimator)
|
||||
|
||||
|
||||
BUILD_FLAGS = -O3 -g
|
||||
XCC_FLAGS = $(BUILD_FLAGS)
|
||||
|
||||
INCLUDE_DIRS = \
|
||||
-I ../src/ \
|
||||
-I . \
|
||||
|
||||
COMMON = \
|
||||
-O2 -g -report \
|
||||
-target=XCORE-200-EXPLORER \
|
||||
|
||||
SOURCES = \
|
||||
./test_fifo.xc \
|
||||
|
||||
BINARY=bin/test_fifo.xe \
|
||||
|
||||
|
||||
all:
|
||||
mkdir -p bin; \
|
||||
mv test_fifoxc test_fifo.xc; \
|
||||
xcc $(SOURCES) $(COMMON) $(INCLUDE_DIRS) -D AUDIO_DELAY_SAMPLES=$$DELAY -o $(BINARY); \
|
||||
mv test_fifo.xc test_fifoxc; \
|
||||
|
||||
sim:
|
||||
xsim $(BINARY)
|
||||
|
||||
clean:
|
||||
rm -rf bin/*
|
||||
139
examples/xua_lite_example/test/test_fifoxc
Normal file
139
examples/xua_lite_example/test/test_fifoxc
Normal file
@@ -0,0 +1,139 @@
|
||||
#include <stdio.h>
|
||||
#include "fifo_impl.h"
|
||||
|
||||
typedef enum test_t{
|
||||
FAIL=0,
|
||||
PASS=1
|
||||
}test_t;
|
||||
|
||||
#define FIFO_SIZE 4
|
||||
|
||||
unsafe test_t test_is_empty(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill = fifo_get_fill_short(fifo);
|
||||
short data[1];
|
||||
fifo_ret_t ret = fifo_block_pop_short(fifo, data, 1);
|
||||
if (fill == 0 && ret == FIFO_EMPTY) return PASS;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
unsafe test_t test_push_one(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[] = {123};
|
||||
fifo_ret_t ret = fifo_block_push_short(fifo, data, 1);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
|
||||
if (ret != FIFO_SUCCESS || fill_0 + 1 != fill_1) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_partial_fill(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[] = {80, 90, 100};
|
||||
fifo_ret_t ret = fifo_block_push_short(fifo, data, 3);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
|
||||
if (ret != FIFO_SUCCESS || fill_0 != 0 || fill_1 != 3) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_fill_level(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill = fifo_get_fill_short(fifo);
|
||||
if (fill != 3) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_pop_one(mem_fifo_short_t * unsafe fifo, short expect){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[1] = {0xffff};
|
||||
fifo_ret_t ret = fifo_block_pop_short(fifo, data, 1);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
if (ret != FIFO_SUCCESS || fill_0 != fill_1 + 1 || data[0] != expect) {
|
||||
printf("grr %d\n", data[0]);
|
||||
return FAIL;
|
||||
}
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_pop_three_fail(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[3] = {0xffff, 0xffff, 0xffff};
|
||||
fifo_ret_t ret = fifo_block_pop_short(fifo, data, 3);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
if (ret == FIFO_SUCCESS || fill_0 != 2 || fill_1 != 2) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_partial_fill_fast(mem_fifo_short_t * unsafe fifo){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[] = {20, 30, 40};
|
||||
fifo_ret_t ret = fifo_block_push_short_fast(fifo, data, 3);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
|
||||
if (ret != FIFO_SUCCESS || fill_0 != 0 || fill_1 != 3) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe test_t test_pop_block_fast(mem_fifo_short_t * unsafe fifo, short expect[], unsigned n){
|
||||
unsigned fill_0 = fifo_get_fill_short(fifo);
|
||||
short data[10] = {0xffff};
|
||||
fifo_ret_t ret = fifo_block_pop_short_fast(fifo, data, n);
|
||||
unsigned fill_1 = fifo_get_fill_short(fifo);
|
||||
unsigned data_ok = memcmp(data, expect, n * sizeof(short)) == 0;
|
||||
if (ret != FIFO_SUCCESS || fill_0 != fill_1 + n || !data_ok) return FAIL;
|
||||
return PASS;
|
||||
}
|
||||
|
||||
unsafe void print_fifo(mem_fifo_short_t * unsafe fifo){
|
||||
for (int i = fifo->size - 1; i >= 0; i--){
|
||||
printf("FIFO[%d]: %hd %s %s\n", i, fifo->data_base_ptr[i], fifo->read_idx == i ? "RD" : "", fifo->write_idx == i ? "WR" : "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(void){
|
||||
unsafe{
|
||||
short test_fifo_storage[FIFO_SIZE];
|
||||
mem_fifo_short_t test_fifo = {sizeof(test_fifo_storage)/sizeof(test_fifo_storage[0]), test_fifo_storage, 0, 0};
|
||||
volatile mem_fifo_short_t * unsafe test_fifo_ptr = &test_fifo;
|
||||
|
||||
// print_fifo(test_fifo_ptr);
|
||||
printf("test_is_empty: %d\n", test_is_empty(test_fifo_ptr));
|
||||
printf("test_partial_fill: %d\n", test_partial_fill(test_fifo_ptr));
|
||||
// print_fifo(test_fifo_ptr);
|
||||
|
||||
printf("test_fill_level: %d\n", test_fill_level(test_fifo_ptr));
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 80));
|
||||
printf("test_pop_three_fail: %d\n", test_pop_three_fail(test_fifo_ptr));
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 90));
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 100));
|
||||
printf("test_is_empty: %d\n", test_is_empty(test_fifo_ptr));
|
||||
|
||||
printf("test_partial_fill_fast: %d\n", test_partial_fill_fast(test_fifo_ptr));
|
||||
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 20));
|
||||
// print_fifo(test_fifo_ptr);
|
||||
|
||||
short td[] = {30, 40};
|
||||
|
||||
printf("test_pop_block_fast: %d\n", test_pop_block_fast(test_fifo_ptr, td, 2)); //no wrap
|
||||
|
||||
printf("test_is_empty: %d\n", test_is_empty(test_fifo_ptr));
|
||||
printf("test_push_one: %d\n", test_push_one(test_fifo_ptr));
|
||||
printf("test_push_one: %d\n", test_push_one(test_fifo_ptr));
|
||||
printf("test_pop_three_fail: %d\n", test_pop_three_fail(test_fifo_ptr));
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 123));
|
||||
printf("test_pop_one: %d\n", test_pop_one(test_fifo_ptr, 123));
|
||||
|
||||
printf("test_partial_fill_fast: %d\n", test_partial_fill_fast(test_fifo_ptr)); //no wrap
|
||||
short te[] = {20, 30, 40};
|
||||
printf("test_pop_block_fast: %d\n", test_pop_block_fast(test_fifo_ptr, te, 3));// no wrap
|
||||
printf("test_partial_fill_fast: %d\n", test_partial_fill_fast(test_fifo_ptr)); //wrap
|
||||
printf("test_pop_block_fast: %d\n", test_pop_block_fast(test_fifo_ptr, te, 3));// wrap
|
||||
// print_fifo(test_fifo_ptr);
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user