Skip to content

Commit

Permalink
Merge pull request uwcms#2 from ekfriis/master
Browse files Browse the repository at this point in the history
Add tests of data exchange functionality
  • Loading branch information
dabelknap committed Aug 20, 2013
2 parents f8badf8 + feb7f8c commit 4b2a1bd
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
*.swp
*.o
bin/
lib/
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
SOFTDIR=/Users/austin/Documents/CMS/softipbus

CFLAGS:=-g -Wall -Iinclude -I$(SOFTDIR)/include
CFLAGS:=-g -Wall -Iinclude -I$(SOFTDIR)/include -std=c99
CC=gcc

SRC:=$(wildcard src/vmestream/*.c) \
Expand Down
62 changes: 52 additions & 10 deletions tests/VMEStream_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,67 @@

int main(int argc, char* argv[])
{
CircularBuffer *a1 = cbuffer_new();
CircularBuffer *b1 = cbuffer_new();
CircularBuffer *a2 = cbuffer_new();
CircularBuffer *b2 = cbuffer_new();
// local application buffers
CircularBuffer *tx1 = cbuffer_new();
CircularBuffer *rx1 = cbuffer_new();
CircularBuffer *tx2 = cbuffer_new();
CircularBuffer *rx2 = cbuffer_new();

VMEStream *test1 = vmestream_initialize(a1, b1);
VMEStream *test2 = vmestream_initialize(a2, b2);
VMEStream *test1 = vmestream_initialize(tx1, rx1);
VMEStream *test2 = vmestream_initialize(tx2, rx2);

test2->rx_size = test1->tx_size;
test2->tx_size = test1->rx_size;
test2->rx_data = test1->tx_data;
test2->tx_data = test1->rx_data;

cbuffer_push_back(a1, 0xDEADBEEF);
vmestream_transfer_data(test1);
for (unsigned int i = 0; i < 20; ++i) {
// put some output data on host #1
cbuffer_push_back(tx1, 0xDEADBEEF + i);
// put some output data on host #2
cbuffer_push_back(tx2, 0xBEEFCAFE + i);
}

// do a transfer
vmestream_transfer_data(test1); // step 1
vmestream_transfer_data(test2); // step 2

// host #2 has received data, since host #1 filled it's TX buffer in step 1
// and host #2 can read it out in step 2
assert(0xDEADBEEF == cbuffer_pop_front(rx2));

vmestream_transfer_data(test1); // step 3
// now host #1 can read the data loaded by host #2 in step 2
assert(0xBEEFCAFE == cbuffer_pop_front(rx1));

// do another transfer
vmestream_transfer_data(test2);
vmestream_transfer_data(test1);

assert(0xDEADBEEF == cbuffer_pop_front(a1));
assert(0 == cbuffer_size(a1));
assert(0xBEEFCAFE + 1 == cbuffer_pop_front(rx1));
assert(0xDEADBEEF + 1 == cbuffer_pop_front(rx2));

// We have consumed all received data (via pop). There is a word of
// data in limbo for host #1
assert(0 == cbuffer_size(rx1));
assert(0 == cbuffer_size(rx2));
assert(17 == cbuffer_size(tx1));
assert(18 == cbuffer_size(tx2));

// call transfer on #1 twice in a row. Since it's still waiting for
// #2 to read the data, nothing happens.
vmestream_transfer_data(test1);
assert(0 == cbuffer_size(rx1));
assert(0 == cbuffer_size(rx2));
assert(17 == cbuffer_size(tx1));
assert(18 == cbuffer_size(tx2));

// #2 receives limbo data, puts one of it's words in limbo.
vmestream_transfer_data(test2);
assert(0 == cbuffer_size(rx1));
assert(1 == cbuffer_size(rx2));
assert(17 == cbuffer_size(tx1));
assert(17 == cbuffer_size(tx2));

return 0;
}

0 comments on commit 4b2a1bd

Please sign in to comment.