Add a new module implementing a queue data structure.

Since the functions are simple make them inline functions. This provides a
small code size saving.
This commit is contained in:
Richard Osborne
2013-11-29 18:36:35 +00:00
parent 93590833cf
commit a695e58524
10 changed files with 164 additions and 126 deletions

View File

@@ -0,0 +1,32 @@
# The TARGET variable determines what target system the application is
# compiled for. It either refers to an XN file in the source directories
# or a valid argument for the --target option when compiling
TARGET = XP-SKC-SU1
# The APP_NAME variable determines the name of the final .xe file. It should
# not include the .xe postfix. If left blank the name will default to
# the project name
APP_NAME = app_queue_test
# The USED_MODULES variable lists other module used by the application.
USED_MODULES = module_queue
# The flags passed to xcc when building the application
# You can also set the following to override flags for a particular language:
# XCC_XC_FLAGS, XCC_C_FLAGS, XCC_ASM_FLAGS, XCC_CPP_FLAGS
# If the variable XCC_MAP_FLAGS is set it overrides the flags passed to
# xcc for the final link (mapping) stage.
XCC_FLAGS = -O0 -g
# The VERBOSE variable, if set to 1, enables verbose output from the make system.
VERBOSE = 0
# This change to the module path is so that this application can be in the
# tests sub-directory in it's git repo
ifeq ($(notdir $(abspath ..)),tests)
PATHSEP = $(if $(findstring Windows, $(OS))$(findstring WINDOWS,$(OS)),;,:)
XMOS_MODULE_PATH := $(XMOS_MODULE_PATH)$(PATHSEP)../../..
endif
XMOS_MAKE_PATH ?= ../..
-include $(XMOS_MAKE_PATH)/xcommon/module_xcommon/build/Makefile.common

View File

@@ -0,0 +1,32 @@
#include "queue.h"
#include <stdlib.h>
#define VERIFY(x) do { if (!(x)) _Exit(1); } while(0)
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
int main()
{
queue_t q;
unsigned array[4];
const unsigned size = ARRAY_SIZE(array);
queue_init(q, size);
VERIFY(queue_is_empty(q));
VERIFY(!queue_is_full(q));
VERIFY(queue_items(q) == 0);
VERIFY(queue_space(q) == size);
queue_push_word(q, array, 1);
VERIFY(!queue_is_empty(q));
VERIFY(queue_items(q) == 1);
VERIFY(queue_space(q) == size - 1);
for (unsigned i = 1; i < size; i++) {
queue_push_word(q, array, i + 1);
}
VERIFY(queue_is_full(q));
VERIFY(queue_items(q) == size);
VERIFY(queue_space(q) == 0);
for (unsigned i = 0; i < size; i++) {
VERIFY(queue_pop_word(q, array) == i + 1);
}
return 0;
}