]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Add sequence tests
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 21 Jun 2010 16:45:04 +0000 (18:45 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 21 Jun 2010 16:45:04 +0000 (18:45 +0200)
src/tests/Makefile.omk
src/tests/sequence.c [new file with mode: 0644]
src/tests/sequence.idl [new file with mode: 0644]

index e079c1448a244ca591da8d09475d384ff236bfd1..a81f8844dfe8240bc5d76f02ed25066feec568ee 100644 (file)
@@ -6,7 +6,13 @@ ifeq ($(CONFIG_FORB_PROTO_UNIX),y)
 test_PROGRAMS += test_proto_unix
 endif
 
-CFLAGS += -DTEST
+wvtest_PROGRAMS += sequence
+sequence_SOURCES = sequence.c
+sequence_CLIENT_IDL = sequence.idl
+sequence_LIBS = wvtest
+
+CFLAGS += -DTEST -DWVTEST_CONFIGURED
+INCLUDES += -I.
 
 lib_LOADLIBES = forb ulut fosa rt
 
diff --git a/src/tests/sequence.c b/src/tests/sequence.c
new file mode 100644 (file)
index 0000000..5bf48a3
--- /dev/null
@@ -0,0 +1,50 @@
+#include <forb.h>
+#include <wvtest.h>
+#include "sequence.h"
+
+int destructor_called;
+int sum_of_destructed;
+
+void destructor(int *elem)
+{
+       destructor_called++;
+       sum_of_destructed += *elem;
+}
+
+WVTEST_MAIN("sequence manipulation")
+{
+       CORBA_sequence_long *s;
+       int i, *e, foreach_retuned_sum = 0;
+       forb_sequence_alloc(s, 10);
+       WVPASS(s);
+       CORBA_sequence_set_release(s, 1);
+       WVPASS(forb_sequence_length(*s) == 0);
+       forb_sequence_free(s, destructor);
+       WVPASS(destructor_called == 0);
+
+       forb_sequence_alloc(s, 10);
+       WVPASS(s);
+       for (i=0; i<10; i++)
+               forb_sequence_elem(*s, i) = i;
+       forb_sequence_length(*s) = 10;
+       WVPASS(forb_sequence_length(*s) == 10);
+       forb_sequence_free(s, destructor);
+       WVPASS(destructor_called == 0);
+
+       forb_sequence_alloc(s, 10);
+       WVPASS(s);
+       CORBA_sequence_set_release(s, 1);
+       for (i=0; i<10; i++)
+               forb_sequence_elem(*s, i) = i;
+       forb_sequence_length(*s) = 10;
+       WVPASS(forb_sequence_length(*s) == 10);
+
+       forb_sequence_foreach(*s, e) {
+               foreach_retuned_sum += *e;
+       }
+       WVPASS(foreach_retuned_sum == 45);
+       
+       forb_sequence_free(s, destructor);
+       WVPASS(destructor_called == 10);
+       WVPASS(sum_of_destructed == 45);
+}
diff --git a/src/tests/sequence.idl b/src/tests/sequence.idl
new file mode 100644 (file)
index 0000000..8ab9d63
--- /dev/null
@@ -0,0 +1,12 @@
+interface MyIface {
+       void MyOp();
+};
+
+struct SeqStruct {
+       sequence<long,10> MyLongs;
+       sequence<octet> MyOctets;
+//     sequence<MyIface> Interfaces; FIXME: This is bugy: sequence-common.c:124: undefined reference to `CORBA_sequence_Object_deserialize
+       sequence<sequence<short> > SeqSeq;
+};
+
+typedef sequence<string> MyStrings;