#include <stdio.h>
#include <string.h>
#include "ta_test_priv.h"
#include "ta_memory.h"
#include "ta_defs.h"
#include "ta_common.h"
static ErrorNumber testCircularBuffer( void );
static TA_RetCode circBufferFillFrom0ToSize( int size, int *buffer );
ErrorNumber test_internals( void )
{
ErrorNumber retValue;
printf( "Testing utility functions\n" );
retValue = testCircularBuffer();
if( retValue != TA_TEST_PASS )
{
printf( "\nFailed: Circular buffer tests (%d)\n", retValue );
return retValue;
}
return TA_TEST_PASS;
}
static ErrorNumber testCircularBuffer( void )
{
TA_RetCode retCode;
int i;
int buffer[20];
ErrorNumber retValue;
retValue = allocLib();
if( retValue != TA_TEST_PASS )
{
printf( "\nFailed: Can't initialize the library\n" );
return retValue;
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 1, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (1+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_1;
}
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 2, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (2+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_2;
}
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 3, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (3+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_3;
}
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 4, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (4+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_4;
}
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 5, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (5+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_5;
}
}
memset( buffer, 0xFF, sizeof(buffer) );
retCode = circBufferFillFrom0ToSize( 6, buffer );
if( retCode != TA_SUCCESS )
{
printf( "\nFailed circular buffer test RetCode = %d\n", retCode );
return TA_INTERNAL_CIRC_BUFF_FAIL_0;
}
for( i=0; i < (6+3); i++ )
{
if( buffer[i] != i )
{
printf( "\nFailed circular buffer test (%d != %d)\n", buffer[i], i );
return TA_INTERNAL_CIRC_BUFF_FAIL_6;
}
}
retValue = freeLib();
if( retValue != TA_TEST_PASS )
return retValue;
return TA_TEST_PASS;
}
static TA_RetCode circBufferFillFrom0ToSize( int size, int *buffer )
{
CIRCBUF_PROLOG(MyBuf,int,4);
int i, value;
int outIdx;
CIRCBUF_INIT(MyBuf,int,size);
outIdx = 0;
value = 0;
for( i=0; i < size; i++ )
{
MyBuf[MyBuf_Idx] = value++;
CIRCBUF_NEXT(MyBuf);
}
for( i=0; i < 3; i++ )
{
buffer[outIdx++] = MyBuf[MyBuf_Idx];
MyBuf[MyBuf_Idx] = value++;
CIRCBUF_NEXT(MyBuf);
}
for( i=0; i < size; i++ )
{
buffer[outIdx++] = MyBuf[MyBuf_Idx];
CIRCBUF_NEXT(MyBuf);
}
CIRCBUF_DESTROY(MyBuf);
return TA_SUCCESS;
}