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
--- /dev/null
+#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);
+}
--- /dev/null
+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;