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