Files
templates/c/gas-logger/tests/test_gas_logger.c

55 lines
2.6 KiB
C

#include "gas_logger.h"
#include <assert.h>
#include <stdio.h>
typedef struct { uint32_t irq; uint16_t value; int fail; } board;
static uint32_t enter(void *u) { board *b=u; uint32_t old=b->irq; b->irq=1; return old; }
static void leave(void *u,uint32_t state) { board *b=u; assert(b->irq==1); b->irq=state; }
static int source(void *u,uint16_t a,uint16_t *v)
{ board *b=u; assert(b->irq==1); if(b->fail && a==11) return 0; *v=b->value+a; return 1; }
int main(void)
{
gl_channel channels[]={{10,100,200},{11,101,201}};
gl_config c={0x6000,2,3,0x12345678UL,channels};
board b={0,0,0};
gl_port p={&b,enter,leave,source};
gas_logger l;
uint16_t bank0[21],bank1[21],out[125],i;
assert(gl_init(&l,&c,&p,bank0,bank1,20)==GL_ARGUMENT);
assert(gl_init(&l,&c,&p,bank0,bank1,21)==GL_OK);
assert(gl_snapshot(&l)==GL_EMPTY);
assert(gl_capture(&l,0,0)==GL_BUSY);
assert(gl_write(&l,0x6012,GL_START)==GL_OK);
for(i=0;i<5;i++) { b.value=i; assert(gl_capture(&l,i,2)==GL_OK); }
assert(gl_snapshot(&l)==GL_OK && l.recording && l.count==0);
assert(gl_read(&l,0x6100,out,21)==GL_OK);
assert(out[0]==2 && out[7]==3 && out[14]==4 && out[5]==12);
for(i=5;i<15;i++) { b.value=i; assert(gl_capture(&l,i,3)==GL_OK); }
assert(gl_snapshot(&l)==GL_BUSY && l.missed==1 && l.recording);
assert(gl_read(&l,0x6100,out,21)==GL_OK && out[0]==2 && out[14]==4);
assert(gl_read(&l,0x6114,out,2)==GL_ADDRESS);
assert(gl_read(&l,65535,out,2)==GL_ARGUMENT);
assert(gl_write(&l,0x6012,GL_RELEASE)==GL_STALE);
assert(gl_write(&l,0x6013,1)==GL_OK);
assert(gl_write(&l,0x6014,0)==GL_OK);
assert(gl_write(&l,0x6012,GL_RELEASE)==GL_OK && l.recording);
assert(gl_read(&l,0x6100,out,1)==GL_ADDRESS);
assert(gl_snapshot(&l)==GL_OK);
assert(gl_read(&l,0x6100,out,21)==GL_OK && out[0]==12 && out[14]==14);
assert(gl_modbus_read(&l,100,out,2)==GL_OK && out[0]==24 && out[1]==25);
assert(gl_can_read(&l,200,out,2)==GL_OK && out[0]==24 && out[1]==25);
b.fail=1; out[0]=555;out[1]=666;
assert(gl_read(&l,10,out,2)==GL_SOURCE_ERROR && out[0]==555 && out[1]==666);
assert(gl_capture(&l,15,0)==GL_SOURCE_ERROR && l.count==0 && l.source_errors==1);
b.fail=0;b.irq=1;
assert(gl_capture(&l,16,0)==GL_OK && b.irq==1);
b.irq=0;l.sequence=0xffffffffUL;
assert(gl_capture(&l,0xffffffffUL,0)==GL_OK && l.sequence==0);
assert(gl_write(&l,0x6012,0)==GL_ARGUMENT && l.recording);
c.base=0xff00;
assert(gl_init(&l,&c,&p,bank0,bank1,21)==GL_ARGUMENT);
c.base=0x6000;channels[1].can=200;
assert(gl_init(&l,&c,&p,bank0,bank1,21)==GL_ARGUMENT);
assert(b.irq==0);
puts("GAS logger core: PASS");return 0;
}