r3930 - in trunk/sfi: . tests



Author: timj
Date: 2006-10-03 12:47:43 -0400 (Tue, 03 Oct 2006)
New Revision: 3930

Added:
   trunk/sfi/tests/misctests.c
   trunk/sfi/tests/testidl.idl
   trunk/sfi/tests/testsfidl.cc
Removed:
   trunk/sfi/testidl.idl
   trunk/sfi/testsfi.c
   trunk/sfi/testsfidl.cc
Modified:
   trunk/sfi/ChangeLog
   trunk/sfi/Makefile.am
   trunk/sfi/tests/Makefile.am
Log:
Tue Oct  3 18:44:43 2006  Tim Janik  <timj gtk org>

        * moved remaining sfi/ tests to sfi/tests.

        * tests/misctests.c: moved here from sfi/testsfi.c.

        * tests/testsfidl.cc:
        * tests/testidl.idl: moved here from sfi/.




Modified: trunk/sfi/ChangeLog
===================================================================
--- trunk/sfi/ChangeLog	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/ChangeLog	2006-10-03 16:47:43 UTC (rev 3930)
@@ -1,3 +1,12 @@
+Tue Oct  3 18:44:43 2006  Tim Janik  <timj gtk org>
+
+	* moved remaining sfi/ tests to sfi/tests.
+
+	* tests/misctests.c: moved here from sfi/testsfi.c.
+
+	* tests/testsfidl.cc:
+	* tests/testidl.idl: moved here from sfi/.
+
 Tue Oct  3 17:57:59 2006  Tim Janik  <timj gtk org>
 
 	* tests/testcxx.cc: moved here from sfi/.

Modified: trunk/sfi/Makefile.am
===================================================================
--- trunk/sfi/Makefile.am	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/Makefile.am	2006-10-03 16:47:43 UTC (rev 3930)
@@ -52,19 +52,6 @@
 CLEANFILES += libsfi.o libsfi.lo
 
 #
-# generated sources
-#
-SFIDL = $(top_builddir)/sfi/sfidl
-CLEANFILES += testidl.h testidl.c
-testidl.h: $(srcdir)/testidl.idl sfidl
-	$(SFIDL) --host-c --header $(srcdir)/testidl.idl > xgen-$(@F) \
-	&& mv xgen-$(@F) testidl.h
-testidl.c: $(srcdir)/testidl.idl sfidl
-	$(SFIDL) --host-c --source --init test_types_init $(srcdir)/testidl.idl > xgen-$(@F) \
-	&& mv xgen-$(@F) testidl.c
-EXTRA_DIST += testidl.idl
-
-#
 # programs to build
 #
 # source files
@@ -79,24 +66,7 @@
 EXTRA_DIST += sfidl-generator.hh sfidl-namespace.hh sfidl-options.hh sfidl-parser.hh sfidl-factory.hh sfidl-typelist.hh
 EXTRA_DIST += sfidl-cbase.hh sfidl-clientc.hh sfidl-clientcxx.hh sfidl-corec.hh sfidl-corecxx.hh sfidl-cxxbase.hh sfidl-hostc.hh
 
-noinst_PROGRAMS = testsfi testsfidl
-progs_nosfi_LDADD = $(top_builddir)/birnet/libbirnet.o $(SFI_LIBS) -lm
-progs_LDADD = $(top_builddir)/birnet/libbirnet.o libsfi.o $(SFI_LIBS) -lm
-$(srcdir)/testsfi.c: testidl.h testidl.c
-testsfi_SOURCES = testsfi.c dummy.cc
-testsfi_LDADD = $(progs_LDADD)
-testsfi_LDFLAGS =
-$(srcdir)/testsfidl.cc: testidl.h testidl.c
-testsfidl_SOURCES = testsfidl.cc $(common_idl_sources)
-testsfidl_CFLAGS = $(AM_CFLAGS) # hack to cause glib-extra.c to be compiled twice (work around automake)
-testsfidl_LDADD = $(progs_nosfi_LDADD)
-
 #
-# TESTS
-#
-TESTS = testsfi testsfidl
-
-#
 # TOYPROF: poor man's profiling toy
 #
 TOYPROF_H_SOURCES = toyprof.h toyprof-mem.h

Deleted: trunk/sfi/testidl.idl
===================================================================
--- trunk/sfi/testidl.idl	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/testidl.idl	2006-10-03 16:47:43 UTC (rev 3930)
@@ -1,58 +0,0 @@
-/*   -*-mode: c++;-*- */
-namespace Test  // this comment tests C++ style comments
-{
-/* test string stuff */
-Const ANSWER_A = "the answer to all questions";
-Const ANSWER_B = 42;
-Const ULTIMATE_ANSWER = (ANSWER_A " is " ANSWER_B);
-
-choice YesNoUndecided {
-  Undecided = (Neutral, "Undecided"),
-        Yes = (1, "Yes"),
-         No = (2, "No")
-};
-
-choice ExcessiveChoiceTest {
-  V0, 
-  V2  = 2,
-  V4  = "l4",
-  V6  = _("l6i"),
-  V8  = (8, "l8"),
-  V10 = (10, _("l10i")),
-  V12 = (12, "l12", _("b12")),
-  V14 = (14, _("l14i"), _("b14i")),
-};
-
-record Position {
-  Sfi::Real x = ("X", "", 2.0, -10.0, 10.0, 1, ":readwrite");
-  Sfi::Real y = ("Y", "", 3.0, -10.0, 10.0, 1, ":readwrite");
-  YesNoUndecided relevant = ("Relevant", "", "test-yes", ":readwrite");
-};
-
-record SickGenericThings {
-  // $GROUP = "foo";
-  Sfi::Rec   rec   = ("Rec", "", ":readwrite");
-};
-
-// no more Sfi:: prefixing beyond this line
-using namespace Sfi;
-
-class Blub {
-  property Real x;
-  // property "X-Group" Real y;
-  group "Other Properties" {
-    Num z;
-  };
-};
-
-sequence PositionSeq {
-  Position positions = ("Position", "", ":readwrite");
-};
-
-/* test that C++ style commments are properly ignored within strings */
-Const CXX_COMMENT_TEST_1 = "Foo // bar";
-Const CXX_COMMENT_TEST_2 = "Foo \" // bar";
-Const CXX_COMMENT_TEST_3 = "Foo \\";//bar
-
-};
-/* vim:set ts=8 sts=2 sw=2 syntax=cpp: */

Modified: trunk/sfi/tests/Makefile.am
===================================================================
--- trunk/sfi/tests/Makefile.am	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/tests/Makefile.am	2006-10-03 16:47:43 UTC (rev 3930)
@@ -7,17 +7,45 @@
 INCLUDES       += -I$(top_srcdir) -I$(top_builddir) -I. $(SFI_CFLAGS)
 DEFS	       += -DG_LOG_DOMAIN='"$(basename $(@F))"' -DPARANOID # -DG_DISABLE_CONST_RETURNS
 
-TESTS 		 =
-noinst_PROGRAMS  = $(TESTS)
-progs_ldadd 	 = $(top_builddir)/birnet/libbirnet.o $(top_builddir)/sfi/libsfi.o $(SFI_LIBS) -lm
+TESTS 		  =
+noinst_PROGRAMS   = $(TESTS)
+progs_nosfi_ldadd = $(top_builddir)/birnet/libbirnet.o $(SFI_LIBS) -lm
+progs_ldadd 	  = $(top_builddir)/birnet/libbirnet.o $(top_builddir)/sfi/libsfi.o $(SFI_LIBS) -lm
+SFIDL 		  = $(top_builddir)/sfi/sfidl
 
 # ring
 TESTS       += ring
 ring_SOURCES = ring.c dummy.cc
 ring_LDADD   = $(progs_ldadd)
 
+# misctests
+TESTS	          += misctests
+misctests_SOURCES  = misctests.c dummy.cc
+misctests_LDADD	   = $(progs_ldadd)
+$(srcdir)/misctests.c: testidl.h testidl.c
+
 # testcxx
 TESTS	       += testcxx
 testcxx_SOURCES = testcxx.cc
 testcxx_LDADD   = $(progs_ldadd)
-$(srcdir)/testcxx.cc: ../testidl.h ../testidl.c
+$(srcdir)/testcxx.cc: testidl.h testidl.c
+
+# testsfidl
+TESTS	         += testsfidl
+testsfidl_SOURCES = testsfidl.cc \
+			../sfidl-generator.cc ../sfidl-namespace.cc ../sfidl-options.cc ../sfidl-parser.cc \
+			../sfidl-factory.cc ../sfidl-typelist.cc ../sfidl-cbase.cc ../sfidl-clientc.cc \
+			../sfidl-clientcxx.cc ../sfidl-corec.cc ../sfidl-corecxx.cc ../sfidl-cxxbase.cc \
+			../sfidl-hostc.cc ../glib-extra.c
+testsfidl_LDADD   = $(progs_nosfi_ldadd)
+$(srcdir)/testsfidl.cc: testidl.h testidl.c
+
+# testidl (generation test)
+EXTRA_DIST += testidl.idl
+CLEANFILES += testidl.h testidl.c
+testidl.h: $(srcdir)/testidl.idl $(SFIDL)
+	$(SFIDL) --host-c --header $(srcdir)/testidl.idl > xgen-$(@F) \
+	&& mv xgen-$(@F) $@
+testidl.c: $(srcdir)/testidl.idl $(SFIDL)
+	$(SFIDL) --host-c --source --init test_types_init $(srcdir)/testidl.idl > xgen-$(@F) \
+	&& mv xgen-$(@F) $@

Copied: trunk/sfi/tests/misctests.c (from rev 3928, trunk/sfi/testsfi.c)
===================================================================
--- trunk/sfi/testsfi.c	2006-10-03 15:43:19 UTC (rev 3928)
+++ trunk/sfi/tests/misctests.c	2006-10-03 16:47:43 UTC (rev 3930)
@@ -0,0 +1,855 @@
+/* SFI - Synthesis Fusion Kit Interface
+ * Copyright (C) 2002 Tim Janik
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#undef G_LOG_DOMAIN
+#define  G_LOG_DOMAIN __FILE__
+// #define TEST_VERBOSE
+#include <birnet/birnettests.h>
+#include <sfi/sfi.h>
+#include <unistd.h>
+#include <string.h>
+#include <signal.h>	/* G_BREAKPOINT() */
+
+
+/* provide IDL type initializers */
+#define sfidl_pspec_Real(group, name, nick, blurb, dflt, min, max, step, hints)  \
+  sfi_pspec_real (name, nick, blurb, dflt, min, max, step, hints)
+#define sfidl_pspec_Record(group, name, nick, blurb, hints, fields)            \
+  sfi_pspec_rec (name, nick, blurb, fields, hints)
+#define sfidl_pspec_Choice(group, name, nick, blurb, default_value, hints, choices) \
+  sfi_pspec_choice (name, nick, blurb, default_value, choices, hints)
+
+/* FIXME: small hackery */
+#define sfidl_pspec_Rec(group, name, nick, blurb, hints)            \
+  sfi_pspec_int (name, nick, blurb, 0, 0, 0, 0, hints)
+#define sfidl_pspec_PSpec(group, name, nick, blurb, hints)            \
+  sfi_pspec_int (name, nick, blurb, 0, 0, 0, 0, hints)
+
+#include "testidl.h"
+
+static void
+test_misc (void)
+{
+  TSTART ("Misc");
+  TASSERT (0 == 0);
+  TDONE ();
+}
+
+static void
+test_time (void)
+{
+  SfiTime t;
+  gchar *error = NULL;
+  gchar *str;
+  const gchar *time_strings[] = {
+    "1990-01-01 00:00:00",
+    "1999-03-12 23:41:00",
+    "2037-12-31 23:59:59",
+  };
+  gint i;
+  TSTART ("Time");
+  TASSERT (SFI_USEC_FACTOR == 1000000);
+  TASSERT (SFI_MIN_TIME + 1000000 < SFI_MAX_TIME);
+  t = sfi_time_system ();
+  if (t < SFI_MIN_TIME || t > SFI_MAX_TIME)
+    {
+      TACK ();
+      t = SFI_MIN_TIME / 2 + SFI_MAX_TIME / 2;
+    }
+  else
+    TICK ();
+  t /= SFI_USEC_FACTOR;
+  t *= SFI_USEC_FACTOR;
+  str = sfi_time_to_string (t);
+  TASSERT (sfi_time_from_string_err (str, &error) == t);
+  TASSERT (error == NULL);
+  g_free (str);
+  /* test hard boundaries */
+  TASSERT (sfi_time_from_string ("1990-01-01 00:00:00") == SFI_MIN_TIME);
+  TASSERT (sfi_time_from_string ("2038-01-19 03:14:07") == SFI_MAX_TIME);
+  /* test error returns */
+  TASSERT (sfi_time_from_string_err ("foo 22", &error) == 0);
+  TASSERT (error != NULL);
+  // g_print ("{%s}", error);
+  g_free (error);
+  for (i = 0; i < G_N_ELEMENTS (time_strings); i++)
+    {
+      t = sfi_time_from_string_err (time_strings[i], &error);
+      if (!error)
+	TICK ();
+      else
+	g_print ("{failed to parse \"%s\": %s (got: %s)\n}", time_strings[i], error, sfi_time_to_string (t)); /* memleak */
+      g_free (error);
+      str = sfi_time_to_string (t);
+      TASSERT (sfi_time_from_string_err (str, &error) == t);
+      TASSERT (error == NULL);
+      g_free (str);
+    }
+  TDONE ();
+}
+
+static void
+test_com_ports (void)
+{
+  gint afds[2], pipe_error;
+  SfiComPort *port1, *port2;
+  GValue *value, *rvalue;
+  TSTART ("Communication Ports");
+  pipe_error = pipe (afds);
+  TASSERT (pipe_error == 0);
+  port1 = sfi_com_port_from_pipe ("portA", -1, afds[1]);
+  TASSERT (port1->connected == TRUE);
+  port2 = sfi_com_port_from_pipe ("portB", afds[0], -1);
+  TASSERT (port2->connected == TRUE);
+  /* transport a value */
+  {	/* create complex value */
+    GParamSpec *pspec = sfi_pspec_log_scale ("name", "Nick", "The Blurb", 440, 110, 1760, 0.03, 440, 2, 2, SFI_PARAM_GUI);
+    SfiRec *rec = sfi_pspec_to_rec (pspec);
+    g_param_spec_ref (pspec);
+    g_param_spec_sink (pspec);
+    g_param_spec_unref (pspec);
+    value = sfi_value_rec (rec);
+    sfi_rec_unref (rec);
+  }
+  sfi_com_port_send (port1, value);
+  rvalue = sfi_com_port_recv (port2);
+  TASSERT (rvalue != NULL);
+  {	/* assert equality of values */
+    GString *s1 = g_string_new (NULL), *s2 = g_string_new (NULL);
+    sfi_value_store_typed (value, s1);
+    sfi_value_store_typed (rvalue, s2);
+    TASSERT (strcmp (s1->str, s2->str) == 0);
+    g_string_free (s1, TRUE);
+    g_string_free (s2, TRUE);
+  }
+  sfi_value_free (value);
+  sfi_value_free (rvalue);
+  sfi_com_port_close_remote (port1, TRUE);
+  pipe_error = close (afds[1]);
+  TASSERT (pipe_error == -1);
+  sfi_com_port_close_remote (port2, TRUE);
+  pipe_error = close (afds[0]);
+  TASSERT (pipe_error == -1);
+  sfi_com_port_unref (port1);
+  sfi_com_port_unref (port2);
+  TDONE ();
+}
+
+static void
+test_thread (gpointer data)
+{
+  guint *tdata = data;
+  birnet_thread_sleep (-1);
+  *tdata += 1;
+  while (!birnet_thread_aborted ())
+    birnet_thread_sleep (-1);
+  TACK ();
+}
+
+static void
+test_threads (void)
+{
+  static BirnetMutex test_mutex;
+  guint thread_data = 0;
+  BirnetThread *thread;
+  gboolean locked;
+  TSTART ("Threading");
+  birnet_mutex_init (&test_mutex);
+  locked = birnet_mutex_trylock (&test_mutex);
+  TASSERT (locked);
+  birnet_mutex_unlock (&test_mutex);
+  birnet_mutex_destroy (&test_mutex);
+  thread = birnet_thread_run ("sfi-test-thread", test_thread, &thread_data);
+  TASSERT (thread != NULL);
+  TASSERT (thread_data == 0);
+  birnet_thread_wakeup (thread);
+  birnet_thread_abort (thread);
+  TASSERT (thread_data > 0);
+  birnet_thread_unref (thread);
+  TDONE ();
+}
+
+#define SCANNER_ASSERT64(scanner, printout, token, text, svalue) { \
+  g_scanner_input_text (scanner, text, strlen (text)); \
+  TASSERT (g_scanner_get_next_token (scanner) == token); \
+  if (printout) g_print ("{scanner.v_int64:%llu}", scanner->value.v_int64); \
+  TASSERT (scanner->value.v_int64 == svalue); \
+  TASSERT (g_scanner_get_next_token (scanner) == '#'); \
+}
+#define SCANNER_ASSERTf(scanner, printout, vtoken, text, svalue) { \
+  g_scanner_input_text (scanner, text, strlen (text)); \
+  if (g_scanner_get_next_token (scanner) != vtoken) \
+    g_scanner_unexp_token (scanner, vtoken, NULL, NULL, NULL, NULL, TRUE); \
+  TASSERT (scanner->token == vtoken); \
+  if (printout) g_print ("{scanner.v_float:%17g}", scanner->value.v_float); \
+  TASSERT (scanner->value.v_float == svalue); \
+  TASSERT (g_scanner_get_next_token (scanner) == '#'); \
+}
+
+static void
+test_scanner64 (void)
+{
+  GScanner *scanner = g_scanner_new64 (sfi_storage_scanner_config);
+  TSTART ("64Bit Scanner");
+  scanner->config->numbers_2_int = FALSE;
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b0 #", 0);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b10000000000000000 #", 65536);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b11111111111111111111111111111111 #", 4294967295U);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b1111111111111111111111111111111111111111111111111111111111111111 #", 18446744073709551615ULL);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 0 #", 0);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 0200000 #", 65536);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 037777777777 #", 4294967295U);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 01777777777777777777777 #", 18446744073709551615ULL);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0x0 #", 0);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0x10000 #", 65536);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0xffffffff #", 4294967295U);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0xffffffffffffffff #", 18446744073709551615ULL);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 65536 #", 65536);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 4294967295 #", 4294967295U);
+  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 18446744073709551615 #", 18446744073709551615ULL);
+  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 0.0 #", 0);
+  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 2.2250738585072014e-308 #", 2.2250738585072014e-308);
+  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 1.7976931348623157e+308 #", 1.7976931348623157e+308);
+  g_scanner_destroy (scanner);
+  TDONE ();
+}
+
+typedef enum /*< skip >*/
+{
+  SERIAL_TEST_TYPED = 1,
+  SERIAL_TEST_PARAM,
+  SERIAL_TEST_PSPEC
+} SerialTest;
+
+static SerialTest serial_test_type = 0;
+
+static void
+serial_pspec_check (GParamSpec *pspec,
+		    GScanner   *scanner)
+{
+  GValue *value = sfi_value_pspec (pspec), rvalue = { 0, };
+  GString *s1 = g_string_new (NULL);
+  GString *s2 = g_string_new (NULL);
+  GTokenType token;
+  sfi_value_store_typed (value, s1);
+  g_scanner_input_text (scanner, s1->str, s1->len);
+  token = sfi_value_parse_typed (&rvalue, scanner);
+  if (token != G_TOKEN_NONE)
+    {
+      g_print ("{while parsing pspec \"%s\":\n\t%s\n", pspec->name, s1->str);
+      g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
+			     g_strdup_printf ("failed to serialize pspec \"%s\"", pspec->name), TRUE);
+    }
+  TASSERT (token == G_TOKEN_NONE);
+  sfi_value_store_typed (&rvalue, s2);
+  if (strcmp (s1->str, s2->str))
+    g_print ("{while comparing pspecs \"%s\":\n\t%s\n\t%s\n", pspec->name, s1->str, s2->str);
+  TASSERT (strcmp (s1->str, s2->str) == 0);
+  g_value_unset (&rvalue);
+  sfi_value_free (value);
+  g_string_free (s1, TRUE);
+  g_string_free (s2, TRUE);
+}
+
+static void
+serialize_cmp (GValue     *value,
+	       GParamSpec *pspec)
+{
+  GScanner *scanner = g_scanner_new64 (sfi_storage_scanner_config);
+  GString *gstring = g_string_new (NULL);
+  GValue rvalue = { 0, };
+  GTokenType token;
+  gint cmp;
+  if (serial_test_type == SERIAL_TEST_PSPEC)
+    serial_pspec_check (pspec, scanner);
+  else
+    {
+      // if (pspec && strcmp (pspec->name, "real-max") == 0) G_BREAKPOINT ();
+      if (serial_test_type == SERIAL_TEST_TYPED)
+	sfi_value_store_typed (value, gstring);
+      else /* SERIAL_TEST_PARAM */
+	sfi_value_store_param (value, gstring, pspec, 2);
+      g_scanner_input_text (scanner, gstring->str, gstring->len);
+      if (serial_test_type == SERIAL_TEST_TYPED)
+	token = sfi_value_parse_typed (&rvalue, scanner);
+      else /* SERIAL_TEST_PARAM */
+	{
+	  if (g_scanner_get_next_token (scanner) == '(')
+	    if (g_scanner_get_next_token (scanner) == G_TOKEN_IDENTIFIER &&
+		strcmp (scanner->value.v_identifier, pspec->name) == 0)
+	      token = sfi_value_parse_param_rest (&rvalue, scanner, pspec);
+	    else
+	      token = G_TOKEN_IDENTIFIER;
+	  else
+	    token = '(';
+	}
+      if (0)
+	g_print ("{parsing:%s}", gstring->str);
+      if (token != G_TOKEN_NONE)
+	{
+	  g_print ("{while parsing \"%s\":\n\t%s\n", pspec->name, gstring->str);
+	  g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
+				 g_strdup_printf ("failed to serialize \"%s\"", pspec->name), TRUE);
+	}
+      TASSERT (token == G_TOKEN_NONE);
+      cmp = g_param_values_cmp (pspec, value, &rvalue);
+      if (cmp)
+	{
+	  g_print ("{after parsing:\n\t%s\n", gstring->str);
+	  g_print ("while comparing:\n\t%s\nwith:\n\t%s\nresult:\n\t%d\n",
+		   g_strdup_value_contents (value),
+		   g_strdup_value_contents (&rvalue),
+		   cmp);
+	  if (0)
+	    {
+	      G_BREAKPOINT ();
+	      g_value_unset (&rvalue);
+	      g_scanner_input_text (scanner, gstring->str, gstring->len);
+	      token = sfi_value_parse_typed (&rvalue, scanner);
+	    }
+	}
+      TASSERT (cmp == 0);
+      if (0) /* generate testoutput */
+	g_print ("OK=================(%s)=================:\n%s\n", pspec->name, gstring->str);
+    }
+  g_scanner_destroy (scanner);
+  g_string_free (gstring, TRUE);
+  if (G_VALUE_TYPE (&rvalue))
+    g_value_unset (&rvalue);
+  sfi_value_free (value);
+  sfi_pspec_sink (pspec);
+}
+
+static void
+test_typed_serialization (SerialTest test_type)
+{
+  static const SfiChoiceValue test_choices[] = {
+    { "ozo-foo", "Ozo-foo blurb", },
+    { "emptyblurb", "", },
+    { "noblurb", NULL, },
+  };
+  static const SfiChoiceValues choice_values = { G_N_ELEMENTS (test_choices), test_choices };
+  SfiRecFields rec_fields = { 0, NULL, };
+  GParamSpec *pspec_homo_seq;
+  SfiFBlock *fblock;
+  SfiBBlock *bblock;
+  SfiSeq *seq;
+  SfiRec *rec;
+  GValue *val;
+  gchar str256[257];
+  guint i;
+  serial_test_type = test_type;
+  switch (serial_test_type)
+    {
+    case SERIAL_TEST_TYPED:	TSTART ("Typed Serialization"); break;
+    case SERIAL_TEST_PARAM:	TSTART ("Param Serialization"); break;
+    case SERIAL_TEST_PSPEC:	TSTART ("Pspec Serialization"); break;
+    }
+  serialize_cmp (sfi_value_bool (FALSE),
+		 sfi_pspec_bool ("bool-false", NULL, NULL, FALSE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_bool (TRUE),
+		 sfi_pspec_bool ("bool-true", NULL, NULL, FALSE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_int (SFI_MAXINT),
+		 sfi_pspec_int ("int-max", NULL, NULL, 0, SFI_MININT, SFI_MAXINT, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_int (SFI_MININT),
+		 sfi_pspec_int ("int-min", NULL, NULL, 0, SFI_MININT, SFI_MAXINT, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_num (SFI_MAXNUM),
+		 sfi_pspec_num ("num-max", NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_num (SFI_MINNUM),
+		 sfi_pspec_num ("num-min", NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (SFI_MINREAL),
+		 sfi_pspec_real ("real-min", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (SFI_MAXREAL),
+		 sfi_pspec_real ("real-max", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (-SFI_MINREAL),
+		 sfi_pspec_real ("real-min-neg", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (-SFI_MAXREAL),
+		 sfi_pspec_real ("real-max-neg", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (SFI_MININT),
+		 sfi_pspec_real ("real-minint", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_real (SFI_MINNUM),
+		 sfi_pspec_real ("real-minnum", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_note (SFI_MIN_NOTE),
+		 sfi_pspec_note ("vnote-min", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_note (SFI_MAX_NOTE),
+		 sfi_pspec_note ("vnote-max", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_note (SFI_NOTE_VOID),
+		 sfi_pspec_note ("vnote-void", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_note (SFI_MIN_NOTE),
+		 sfi_pspec_note ("note-min", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_note (SFI_MAX_NOTE),
+		 sfi_pspec_note ("note-max", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_string (NULL),
+		 sfi_pspec_string ("string-nil", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_string ("test\"string'with\\character-?\007rubbish\177H"),
+		 sfi_pspec_string ("string", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_string (""),
+		 sfi_pspec_string ("string-empty", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  for (i = 0; i < 255; i++)
+    str256[i] = i + 1;
+  str256[i] = 0;
+  serialize_cmp (sfi_value_string (str256),
+		 sfi_pspec_string ("string-255", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_choice (NULL),
+		 sfi_pspec_choice ("choice-nil", NULL, NULL, NULL, choice_values, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_choice ("test-choice-with-valid-characters_9876543210"),
+		 sfi_pspec_choice ("choice", NULL, NULL, NULL, choice_values, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_proxy (SFI_MAXINT),
+		 sfi_pspec_proxy ("proxy-max", NULL, NULL, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_proxy (G_MAXUINT),
+		 sfi_pspec_proxy ("proxy-umax", NULL, NULL, SFI_PARAM_STANDARD));
+  serialize_cmp (sfi_value_bblock (NULL),
+		 sfi_pspec_bblock ("bblock-nil", NULL, NULL, SFI_PARAM_STANDARD));
+  bblock = sfi_bblock_new ();
+  serialize_cmp (sfi_value_bblock (bblock),
+		 sfi_pspec_bblock ("bblock-empty", NULL, NULL, SFI_PARAM_STANDARD));
+  for (i = 0; i < 256; i++)
+    sfi_bblock_append1 (bblock, i);
+  serialize_cmp (sfi_value_bblock (bblock),
+		 sfi_pspec_bblock ("bblock", NULL, NULL, SFI_PARAM_STANDARD));
+  sfi_bblock_unref (bblock);
+  serialize_cmp (sfi_value_fblock (NULL),
+		 sfi_pspec_fblock ("fblock-nil", NULL, NULL, SFI_PARAM_STANDARD));
+  fblock = sfi_fblock_new ();
+  serialize_cmp (sfi_value_fblock (fblock),
+		 sfi_pspec_fblock ("fblock-empty", NULL, NULL, SFI_PARAM_STANDARD));
+  sfi_fblock_append1 (fblock, -G_MINFLOAT);
+  sfi_fblock_append1 (fblock, G_MINFLOAT);
+  sfi_fblock_append1 (fblock, -G_MAXFLOAT);
+  sfi_fblock_append1 (fblock, G_MAXFLOAT);
+  sfi_fblock_append1 (fblock, SFI_MININT);
+  sfi_fblock_append1 (fblock, -SFI_MAXINT);
+  sfi_fblock_append1 (fblock, SFI_MAXINT);
+  sfi_fblock_append1 (fblock, SFI_MINNUM);
+  sfi_fblock_append1 (fblock, -SFI_MAXNUM);
+  sfi_fblock_append1 (fblock, SFI_MAXNUM);
+  serialize_cmp (sfi_value_fblock (fblock),
+		 sfi_pspec_fblock ("fblock", NULL, NULL, SFI_PARAM_STANDARD));
+  
+  serialize_cmp (sfi_value_seq (NULL),
+		 sfi_pspec_seq ("seq-nil", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  seq = sfi_seq_new ();
+  serialize_cmp (sfi_value_seq (seq),
+		 sfi_pspec_seq ("seq-empty", NULL, NULL, NULL, SFI_PARAM_STANDARD));
+  val = sfi_value_bool (TRUE);
+  sfi_seq_append (seq, val);
+  sfi_value_free (val);
+  val = sfi_value_int (42);
+  sfi_seq_append (seq, val);
+  sfi_value_free (val);
+  val = sfi_value_string ("huhu");
+  sfi_seq_append (seq, val);
+  sfi_value_free (val);
+  val = sfi_value_fblock (fblock);
+  sfi_seq_append (seq, val);
+  sfi_value_free (val);
+  if (serial_test_type != SERIAL_TEST_PARAM)
+    serialize_cmp (sfi_value_seq (seq),
+		   sfi_pspec_seq ("seq-heterogeneous", NULL, NULL,
+				  sfi_pspec_real ("dummy", NULL, NULL,
+						  0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD),
+				  SFI_PARAM_STANDARD));
+  sfi_seq_clear (seq);
+  for (i = 0; i < 12; i++)
+    {
+      val = sfi_value_int (2000 - 3 * i);
+      sfi_seq_append (seq, val);
+      sfi_value_free (val);
+    }
+  pspec_homo_seq = sfi_pspec_seq ("seq-homogeneous", NULL, NULL,
+				  sfi_pspec_int ("integer", NULL, NULL,
+						 1500, 1000, 2000, 1, SFI_PARAM_STANDARD),
+				  SFI_PARAM_STANDARD);
+  sfi_pspec_ref (pspec_homo_seq);
+  serialize_cmp (sfi_value_seq (seq),
+		 sfi_pspec_seq ("seq-homogeneous", NULL, NULL,
+				sfi_pspec_int ("integer", NULL, NULL,
+					       1500, 1000, 2000, 1, SFI_PARAM_STANDARD),
+				SFI_PARAM_STANDARD));
+  
+  if (serial_test_type == SERIAL_TEST_PSPEC)
+    {
+      serialize_cmp (sfi_value_pspec (NULL),
+		     sfi_pspec_pspec ("pspec-nil", NULL, NULL, SFI_PARAM_STANDARD));
+      serialize_cmp (sfi_value_pspec (pspec_homo_seq),
+		     sfi_pspec_pspec ("pspec-hseq", NULL, NULL, SFI_PARAM_STANDARD));
+    }
+
+  serialize_cmp (sfi_value_rec (NULL),
+		 sfi_pspec_rec ("rec-nil", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
+  rec = sfi_rec_new ();
+  serialize_cmp (sfi_value_rec (rec),
+		 sfi_pspec_rec ("rec-empty", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
+  val = sfi_value_string ("huhu");
+  sfi_rec_set (rec, "exo-string", val);
+  if (serial_test_type != SERIAL_TEST_PARAM)
+    sfi_rec_set (rec, "exo-string2", val);
+  sfi_value_free (val);
+  val = sfi_value_seq (seq);
+  sfi_rec_set (rec, "seq-homogeneous", val);
+  sfi_value_free (val);
+  val = sfi_value_proxy (102);
+  sfi_rec_set (rec, "baz-proxy", val);
+  sfi_value_free (val);
+  rec_fields.fields = g_new (GParamSpec*, 20); /* should be static mem */
+  rec_fields.fields[rec_fields.n_fields++] = sfi_pspec_proxy ("baz-proxy", NULL, NULL, SFI_PARAM_STANDARD);
+  rec_fields.fields[rec_fields.n_fields++] = sfi_pspec_string ("exo-string", NULL, NULL, NULL, SFI_PARAM_STANDARD);
+  rec_fields.fields[rec_fields.n_fields++] = pspec_homo_seq;
+  serialize_cmp (sfi_value_rec (rec),
+		 sfi_pspec_rec ("rec", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
+  
+  sfi_fblock_unref (fblock);
+  sfi_seq_unref (seq);
+  sfi_pspec_unref (pspec_homo_seq);
+  sfi_rec_unref (rec);
+  TDONE ();
+}
+
+static void
+test_notes (void)
+{
+  gchar *str, *error = NULL;
+  guint i;
+  TSTART ("Notes");
+  str = sfi_note_to_string (SFI_MIN_NOTE);
+  TASSERT (sfi_note_from_string_err (str, &error) == SFI_MIN_NOTE);
+  TASSERT (error == NULL);
+  g_free (str);
+  str = sfi_note_to_string (SFI_KAMMER_NOTE);
+  TASSERT (sfi_note_from_string_err (str, &error) == SFI_KAMMER_NOTE);
+  TASSERT (error == NULL);
+  g_free (str);
+  str = sfi_note_to_string (SFI_MAX_NOTE);
+  TASSERT (sfi_note_from_string_err (str, &error) == SFI_MAX_NOTE);
+  TASSERT (error == NULL);
+  g_free (str);
+  for (i = SFI_MIN_NOTE; i <= SFI_MAX_NOTE; i++)
+    {
+      gint octave;
+      guint semitone;
+      gboolean black_semitone;
+      gchar letter;
+      
+      sfi_note_examine (i, &octave, &semitone, &black_semitone, &letter);
+      TASSERT (octave == SFI_NOTE_OCTAVE (i));
+      TASSERT (semitone == SFI_NOTE_SEMITONE (i));
+      TASSERT (SFI_NOTE_GENERIC (octave, semitone) == i);
+    }
+  sfi_note_from_string_err ("NeverNote", &error);
+  TASSERT (error != NULL);
+  // g_print ("{%s}", error);
+  g_free (error);
+  TDONE ();
+}
+
+static void
+test_renames (void)
+{
+  gchar *str;
+  TSTART ("Renames");
+  str = g_type_name_to_cname ("PrefixTypeName");
+  TASSERT (strcmp (str, "prefix_type_name") == 0);
+  g_free (str);
+  str = g_type_name_to_sname ("PrefixTypeName");
+  TASSERT (strcmp (str, "prefix-type-name") == 0);
+  g_free (str);
+  str = g_type_name_to_cupper ("PrefixTypeName");
+  TASSERT (strcmp (str, "PREFIX_TYPE_NAME") == 0);
+  g_free (str);
+  str = g_type_name_to_type_macro ("PrefixTypeName");
+  TASSERT (strcmp (str, "PREFIX_TYPE_TYPE_NAME") == 0);
+  g_free (str);
+  str = g_type_name_to_sname ("prefix_type_name");
+  TASSERT (strcmp (str, "prefix-type-name") == 0);
+  g_free (str);
+  str = g_type_name_to_cname ("prefix-type-name");
+  TASSERT (strcmp (str, "prefix_type_name") == 0);
+  g_free (str);
+  TDONE ();
+}
+
+static gboolean vmarshal_switch = TRUE;
+static guint    vmarshal_count = 0;
+
+static void
+generate_vmarshal (guint sig)
+{
+  gchar *s, signame[32 * 4 + 1];
+  guint i;
+  vmarshal_count++;
+  s = signame + sizeof (signame);
+  *--s = 0;
+  for (i = sig; i; i >>= 2)
+    *--s = '0' + (i & 3);
+  if (!vmarshal_switch)
+    {
+      g_print ("static void /* %u */\nsfi_vmarshal_%s (gpointer func, gpointer arg0, Arg *alist)\n{\n",
+	       vmarshal_count, s);
+      g_print ("  void (*f) (gpointer");
+      for (i = 0; s[i]; i++)
+	switch (s[i] - '0')
+	  {
+	  case 1:	g_print (", guint32");		break;
+	  case 2:	g_print (", guint64");		break;
+	  case 3:	g_print (", double");		break;
+	  }
+      g_print (", gpointer) = func;\n");
+      g_print ("  f (arg0");
+      for (i = 0; s[i]; i++)
+	switch (s[i] - '0')
+	  {
+	  case 1:	g_print (", alist[%u].v32", i);		break;
+	  case 2:	g_print (", alist[%u].v64", i);		break;
+	  case 3:	g_print (", alist[%u].vdbl", i);	break;
+	  }
+      g_print (", alist[%u].vpt);\n}\n", i);
+    }
+  else
+    g_print ("    case 0x%03x: return sfi_vmarshal_%s; /* %u */\n", sig, s, vmarshal_count);
+}
+
+static void
+generate_vmarshal_loop (void)
+{
+  guint sig, i, ki[SFI_VMARSHAL_MAX_ARGS + 1];
+  vmarshal_count = 0;
+  /* initialize digits */
+  for (i = 0; i < SFI_VMARSHAL_MAX_ARGS; i++)
+    ki[i] = 1;
+  /* initialize overflow */
+  ki[SFI_VMARSHAL_MAX_ARGS] = 0;
+  while (ki[SFI_VMARSHAL_MAX_ARGS] == 0)	/* abort on overflow */
+    {
+      /* construct signature */
+      sig = 0;
+      for (i = SFI_VMARSHAL_MAX_ARGS; i > 0; i--)
+	{
+	  sig <<= 2;
+	  sig |= ki[i - 1];
+	}
+      /* generate */
+      generate_vmarshal (sig);
+      /* increase digit wise: 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, ... */
+      for (i = 0; ; i++)
+	{
+	  if (++ki[i] <= 3)
+	    break;
+	  ki[i] = 1;
+	}
+    }
+}
+
+static void
+generate_vmarshal_code (void)
+{
+  vmarshal_switch = FALSE;
+  generate_vmarshal_loop ();
+
+  vmarshal_switch = TRUE;
+  g_print ("static VMarshal\nsfi_vmarshal_switch (guint sig)\n{\n");
+  g_print ("  switch (sig)\n    {\n");
+  generate_vmarshal_loop ();
+  g_print ("    default: g_assert_not_reached (); return NULL;\n");
+  g_print ("    }\n}\n");
+}
+
+static gchar *pointer1 = "huhu";
+static gchar *pointer2 = "haha";
+static gchar *pointer3 = "zoot";
+
+static void
+test_vmarshal_func4 (gpointer o,
+		     SfiReal  r,
+		     SfiNum   n,
+		     gpointer data)
+{
+  TASSERT (o == pointer1);
+  TASSERT (r == -426.9112e-267);
+  TASSERT (n == -2598768763298128732LL);
+  TASSERT (data == pointer3);
+}
+
+static void
+test_vmarshal_func7 (gpointer o,
+		     SfiReal  r,
+		     SfiNum   n,
+		     SfiProxy p,
+		     SfiInt   i,
+		     SfiNum   self,
+		     gpointer data)
+{
+  TASSERT (o == pointer1);
+  TASSERT (r == -426.9112e-267);
+  TASSERT (n == -2598768763298128732LL);
+  TASSERT (p == (SfiProxy) pointer2);
+  TASSERT (i == -2134567);
+  TASSERT (self == (long) test_vmarshal_func7);
+  TASSERT (data == pointer3);
+}
+
+static void
+test_vmarshals (void)
+{
+  SfiSeq *seq = sfi_seq_new ();
+  TSTART ("Vmarshals");
+  sfi_seq_append_real (seq, -426.9112e-267);
+  sfi_seq_append_num (seq, -2598768763298128732LL);
+  sfi_vmarshal_void (test_vmarshal_func4, pointer1,
+		  seq->n_elements, seq->elements,
+		  pointer3);
+  sfi_seq_append_proxy (seq, (SfiProxy) pointer2);
+  sfi_seq_append_int (seq, -2134567);
+  sfi_seq_append_num (seq, (long) test_vmarshal_func7);
+  sfi_vmarshal_void (test_vmarshal_func7, pointer1,
+		  seq->n_elements, seq->elements,
+		  pointer3);
+  TDONE ();
+  sfi_seq_unref (seq);
+}
+
+static void
+test_sfidl_seq (void)
+{
+  TestPositionSeq* pseq;
+  TestPosition* pos;
+  TestPosition* pos2;
+  SfiRec* rec;
+  GValue* value;
+  TSTART ("Sfidl generated code");
+
+  /* test that types are registered properly */
+  // TASSERT (TEST_TYPE_POSITION != 0);
+  // TASSERT (TEST_TYPE_POSITION_SEQ != 0);
+  // TASSERT (TEST_TYPE_YES_NO_UNDECIDED != 0);
+
+  /* test sequences and structs generated for Position record */
+  pseq = test_position_seq_new ();
+  TASSERT (pseq != NULL);
+  TASSERT (pseq->n_positions == 0);
+
+  pos = test_position_new ();
+  TASSERT (pos != NULL);
+  pos->x = 1.0;
+  pos->y = -1.0;
+  pos->relevant = TEST_NO;
+
+  test_position_seq_append (pseq, pos);
+  TASSERT (pseq->n_positions == 1);
+
+  test_position_seq_resize (pseq, 4);
+  TASSERT (pseq->n_positions == 4);
+
+  test_position_seq_resize (pseq, 1);
+  TASSERT (pseq->n_positions == 1);
+
+  rec = test_position_to_rec (pos);
+  value = sfi_rec_get (rec, "relevant");
+
+  TASSERT (SFI_VALUE_HOLDS_CHOICE (value));
+  TASSERT (strcmp (sfi_value_get_choice (value), "test-no") == 0);
+
+  pos2 = test_position_from_rec (rec);
+
+  TASSERT (pos->x == pos2->x);
+  TASSERT (pos->y == pos2->y);
+  TASSERT (pos->relevant == pos2->relevant);
+
+  sfi_rec_unref (rec);
+  test_position_seq_free (pseq);
+  test_position_free (pos);
+  test_position_free (pos2);
+
+  /* test validation and defaulting */
+  {
+    GParamSpec *pspec;
+    GValue rec_value = { 0, };
+
+    /* create empty record */
+    g_value_init (&rec_value, SFI_TYPE_REC);
+    sfi_value_take_rec (&rec_value, sfi_rec_new ());
+
+    /* validate record against pspec */
+    pspec = sfi_pspec_rec ("foo", "bar", "bazz", test_position_fields, SFI_PARAM_STANDARD);
+    g_param_value_validate (pspec, &rec_value);
+    g_param_spec_unref (pspec);
+
+#if 0
+    GValue pos_value = { 0, };
+    /* transform record to boxed type */
+    g_value_init (&pos_value, TEST_TYPE_POSITION);
+    TASSERT (sfi_value_type_transformable (SFI_TYPE_REC, TEST_TYPE_POSITION));
+    sfi_value_transform (&rec_value, &pos_value);
+
+    /* get boxed type */
+    TASSERT (G_VALUE_HOLDS (&pos_value, TEST_TYPE_POSITION));
+    pos = g_value_get_boxed (&pos_value);
+    
+    /* check that values match defaults */
+    TASSERT (pos->x == 2.0);
+    TASSERT (pos->y == 3.0);
+    TASSERT (pos->relevant == TEST_YES);
+
+    /* cleanup */
+    g_value_unset (&rec_value);
+    g_value_unset (&pos_value);
+#endif
+  }
+
+  /* test constants */
+  // TASSERT (TEST_ANSWER_B == 42);
+  // TASSERT (strcmp(TEST_ULTIMATE_ANSWER, "the answer to all questions is 42") == 0);
+  TDONE ();
+}
+
+#include "testidl.c"
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
+  birnet_init (&argc, &argv, NULL);
+  
+  test_types_init ();
+
+  if (0)
+    {
+      generate_vmarshal_code ();
+      return 0;
+    }
+  
+  test_notes ();
+  test_time ();
+  test_renames ();
+  test_scanner64 ();
+  test_typed_serialization (SERIAL_TEST_PARAM);
+  test_typed_serialization (SERIAL_TEST_TYPED);
+  test_typed_serialization (SERIAL_TEST_PSPEC);
+  test_vmarshals ();
+  test_com_ports ();
+  test_threads ();
+  test_sfidl_seq ();
+  test_misc ();
+
+  return 0;
+}
+
+/* distcc preprocessing test */
+char *test_distcc_strings = "ÿÿÿÿ";
+
+/* vim:set ts=8 sts=2 sw=2: */

Copied: trunk/sfi/tests/testidl.idl (from rev 3925, trunk/sfi/testidl.idl)

Copied: trunk/sfi/tests/testsfidl.cc (from rev 3925, trunk/sfi/testsfidl.cc)
===================================================================
--- trunk/sfi/testsfidl.cc	2006-10-03 11:19:35 UTC (rev 3925)
+++ trunk/sfi/tests/testsfidl.cc	2006-10-03 16:47:43 UTC (rev 3930)
@@ -0,0 +1,164 @@
+/* SFI - Synthesis Fusion Kit Interface
+ * Copyright (C) 2004 Tim Janik, Stefan Westerfeld
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#undef G_LOG_DOMAIN
+#define  G_LOG_DOMAIN __FILE__
+// #define TEST_VERBOSE
+#include <birnet/birnettests.h>
+#include "../sfidl-generator.hh"
+#include "../sfidl-factory.hh"
+#include <stdio.h>
+
+using namespace Sfidl;
+using namespace std;
+
+
+#define ASSERT_EQ(got,expectedcstr) do {                                \
+  TPRINT ("{check equality: %s == %s}", expectedcstr, got.c_str());     \
+  TASSERT (expectedcstr == got);                                            \
+} while (0)
+
+class TestCG : public CodeGenerator
+{
+  string one, two, done;
+public:
+  TestCG(const Parser& parser) : CodeGenerator (parser)
+  {
+  }
+  OptionVector getOptions()
+  {
+    OptionVector opts;
+
+    opts.push_back (make_pair ("--one", true));
+    opts.push_back (make_pair ("--two", true));
+    opts.push_back (make_pair ("--done", false));
+
+    return opts;
+  }
+  void setOption (const string& option, const string& value)
+  {
+    if (option == "--one") one = value;
+    if (option == "--two") two = value;
+    if (option == "--done") done = value;
+  }
+  bool run()
+  {
+    TSTART ("Testing Option parser");
+    ASSERT_EQ (one, "1");
+    ASSERT_EQ (two, "2");
+    ASSERT_EQ (done, "1");
+    TDONE ();
+
+    TSTART ("Testing CodeGenerator::rename()");
+
+    vector<string> procedures;
+    vector<string> empty;
+    vector<string> type;
+    procedures.push_back("Procedures");
+    type.push_back("Type");
+
+    TASSERT (procedures.size() == 1);
+    TASSERT (type.size() == 1);
+    TASSERT (empty.size() == 0);
+
+    ASSERT_EQ (rename (ABSOLUTE, "A::B::processMessagesSlowly", Capitalized, "::",
+		       procedures, lower, "_"),
+               "::A::B::Procedures::process_messages_slowly");
+
+    ASSERT_EQ (rename (NONE, "A::B::processMessagesSlowly", Capitalized, "::",
+		       procedures, lower, "_"),
+	       "Procedures::process_messages_slowly");
+
+    ASSERT_EQ (rename (ABSOLUTE, "Bse::SNet", Capitalized, "",
+		       empty, Capitalized, ""),
+	       "BseSNet");
+
+    ASSERT_EQ (rename (ABSOLUTE, "Bse::AlphaSynth", UPPER, "_",
+		       type, UPPER, "_"),
+	       "BSE_TYPE_ALPHA_SYNTH");
+
+    ASSERT_EQ (rename (ABSOLUTE, "Bse::FFTSize", Capitalized, "",
+                       empty, Capitalized, ""),
+              "BseFFTSize");
+
+    ASSERT_EQ (rename (ABSOLUTE, "Bse::FFTSize", lower, "_",
+                       empty, lower, "_"),
+              "bse_fft_size");
+
+    ASSERT_EQ (rename (ABSOLUTE, "XWindows::WMHints", Capitalized, "",
+                       empty, Capitalized, ""),
+              "XWindowsWMHints");
+
+    ASSERT_EQ (rename (ABSOLUTE, "XWindows::WMHints", UPPER, "_",
+                       empty, UPPER, "_"),
+              "XWINDOWS_WM_HINTS");
+
+    ASSERT_EQ (rename (ABSOLUTE, "Bse::MIDI_SIGNAL_PROGRAM", UPPER, "_",
+                       empty, UPPER, "_"),
+              "BSE_MIDI_SIGNAL_PROGRAM");
+
+    TDONE();
+    return true;
+  }
+};
+
+class TestCGFactory : public Factory {
+public:
+  string option() const	      { return "--test"; }
+  string description() const  { return "test code generator"; }
+  
+  CodeGenerator *create (const Parser& parser) const
+  {
+    return new TestCG (parser);
+  }
+} static_factory;
+
+int
+main (int   argc,
+      char *argv[])
+{
+  Options options;
+  Parser parser;
+
+  int fake_argc = 6;
+  char **fake_argv = g_new0 (gchar*, fake_argc);
+  fake_argv[0] = "testsfidl";
+  fake_argv[1] = "--test";
+  fake_argv[2] = "--one";
+  fake_argv[3] = "1";
+  fake_argv[4] = "--two=2";
+  fake_argv[5] = "--done";
+  options.parse (&fake_argc, &fake_argv, parser);
+
+  TSTART ("Testing factory");
+  TASSERT (options.codeGenerator != 0);
+  TDONE();
+
+  if (options.codeGenerator->run())
+    {
+      delete options.codeGenerator;
+      return 0;
+    }
+  else
+    {
+      delete options.codeGenerator;
+      return 1;
+    }
+}
+
+/* vim:set ts=8 sts=2 sw=2: */

Deleted: trunk/sfi/testsfi.c
===================================================================
--- trunk/sfi/testsfi.c	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/testsfi.c	2006-10-03 16:47:43 UTC (rev 3930)
@@ -1,855 +0,0 @@
-/* SFI - Synthesis Fusion Kit Interface
- * Copyright (C) 2002 Tim Janik
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#undef G_LOG_DOMAIN
-#define  G_LOG_DOMAIN __FILE__
-// #define TEST_VERBOSE
-#include <birnet/birnettests.h>
-#include <sfi/sfi.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>	/* G_BREAKPOINT() */
-
-
-/* provide IDL type initializers */
-#define sfidl_pspec_Real(group, name, nick, blurb, dflt, min, max, step, hints)  \
-  sfi_pspec_real (name, nick, blurb, dflt, min, max, step, hints)
-#define sfidl_pspec_Record(group, name, nick, blurb, hints, fields)            \
-  sfi_pspec_rec (name, nick, blurb, fields, hints)
-#define sfidl_pspec_Choice(group, name, nick, blurb, default_value, hints, choices) \
-  sfi_pspec_choice (name, nick, blurb, default_value, choices, hints)
-
-/* FIXME: small hackery */
-#define sfidl_pspec_Rec(group, name, nick, blurb, hints)            \
-  sfi_pspec_int (name, nick, blurb, 0, 0, 0, 0, hints)
-#define sfidl_pspec_PSpec(group, name, nick, blurb, hints)            \
-  sfi_pspec_int (name, nick, blurb, 0, 0, 0, 0, hints)
-
-#include <sfi/testidl.h>
-
-static void
-test_misc (void)
-{
-  TSTART ("Misc");
-  TASSERT (0 == 0);
-  TDONE ();
-}
-
-static void
-test_time (void)
-{
-  SfiTime t;
-  gchar *error = NULL;
-  gchar *str;
-  const gchar *time_strings[] = {
-    "1990-01-01 00:00:00",
-    "1999-03-12 23:41:00",
-    "2037-12-31 23:59:59",
-  };
-  gint i;
-  TSTART ("Time");
-  TASSERT (SFI_USEC_FACTOR == 1000000);
-  TASSERT (SFI_MIN_TIME + 1000000 < SFI_MAX_TIME);
-  t = sfi_time_system ();
-  if (t < SFI_MIN_TIME || t > SFI_MAX_TIME)
-    {
-      TACK ();
-      t = SFI_MIN_TIME / 2 + SFI_MAX_TIME / 2;
-    }
-  else
-    TICK ();
-  t /= SFI_USEC_FACTOR;
-  t *= SFI_USEC_FACTOR;
-  str = sfi_time_to_string (t);
-  TASSERT (sfi_time_from_string_err (str, &error) == t);
-  TASSERT (error == NULL);
-  g_free (str);
-  /* test hard boundaries */
-  TASSERT (sfi_time_from_string ("1990-01-01 00:00:00") == SFI_MIN_TIME);
-  TASSERT (sfi_time_from_string ("2038-01-19 03:14:07") == SFI_MAX_TIME);
-  /* test error returns */
-  TASSERT (sfi_time_from_string_err ("foo 22", &error) == 0);
-  TASSERT (error != NULL);
-  // g_print ("{%s}", error);
-  g_free (error);
-  for (i = 0; i < G_N_ELEMENTS (time_strings); i++)
-    {
-      t = sfi_time_from_string_err (time_strings[i], &error);
-      if (!error)
-	TICK ();
-      else
-	g_print ("{failed to parse \"%s\": %s (got: %s)\n}", time_strings[i], error, sfi_time_to_string (t)); /* memleak */
-      g_free (error);
-      str = sfi_time_to_string (t);
-      TASSERT (sfi_time_from_string_err (str, &error) == t);
-      TASSERT (error == NULL);
-      g_free (str);
-    }
-  TDONE ();
-}
-
-static void
-test_com_ports (void)
-{
-  gint afds[2], pipe_error;
-  SfiComPort *port1, *port2;
-  GValue *value, *rvalue;
-  TSTART ("Communication Ports");
-  pipe_error = pipe (afds);
-  TASSERT (pipe_error == 0);
-  port1 = sfi_com_port_from_pipe ("portA", -1, afds[1]);
-  TASSERT (port1->connected == TRUE);
-  port2 = sfi_com_port_from_pipe ("portB", afds[0], -1);
-  TASSERT (port2->connected == TRUE);
-  /* transport a value */
-  {	/* create complex value */
-    GParamSpec *pspec = sfi_pspec_log_scale ("name", "Nick", "The Blurb", 440, 110, 1760, 0.03, 440, 2, 2, SFI_PARAM_GUI);
-    SfiRec *rec = sfi_pspec_to_rec (pspec);
-    g_param_spec_ref (pspec);
-    g_param_spec_sink (pspec);
-    g_param_spec_unref (pspec);
-    value = sfi_value_rec (rec);
-    sfi_rec_unref (rec);
-  }
-  sfi_com_port_send (port1, value);
-  rvalue = sfi_com_port_recv (port2);
-  TASSERT (rvalue != NULL);
-  {	/* assert equality of values */
-    GString *s1 = g_string_new (NULL), *s2 = g_string_new (NULL);
-    sfi_value_store_typed (value, s1);
-    sfi_value_store_typed (rvalue, s2);
-    TASSERT (strcmp (s1->str, s2->str) == 0);
-    g_string_free (s1, TRUE);
-    g_string_free (s2, TRUE);
-  }
-  sfi_value_free (value);
-  sfi_value_free (rvalue);
-  sfi_com_port_close_remote (port1, TRUE);
-  pipe_error = close (afds[1]);
-  TASSERT (pipe_error == -1);
-  sfi_com_port_close_remote (port2, TRUE);
-  pipe_error = close (afds[0]);
-  TASSERT (pipe_error == -1);
-  sfi_com_port_unref (port1);
-  sfi_com_port_unref (port2);
-  TDONE ();
-}
-
-static void
-test_thread (gpointer data)
-{
-  guint *tdata = data;
-  birnet_thread_sleep (-1);
-  *tdata += 1;
-  while (!birnet_thread_aborted ())
-    birnet_thread_sleep (-1);
-  TACK ();
-}
-
-static void
-test_threads (void)
-{
-  static BirnetMutex test_mutex;
-  guint thread_data = 0;
-  BirnetThread *thread;
-  gboolean locked;
-  TSTART ("Threading");
-  birnet_mutex_init (&test_mutex);
-  locked = birnet_mutex_trylock (&test_mutex);
-  TASSERT (locked);
-  birnet_mutex_unlock (&test_mutex);
-  birnet_mutex_destroy (&test_mutex);
-  thread = birnet_thread_run ("sfi-test-thread", test_thread, &thread_data);
-  TASSERT (thread != NULL);
-  TASSERT (thread_data == 0);
-  birnet_thread_wakeup (thread);
-  birnet_thread_abort (thread);
-  TASSERT (thread_data > 0);
-  birnet_thread_unref (thread);
-  TDONE ();
-}
-
-#define SCANNER_ASSERT64(scanner, printout, token, text, svalue) { \
-  g_scanner_input_text (scanner, text, strlen (text)); \
-  TASSERT (g_scanner_get_next_token (scanner) == token); \
-  if (printout) g_print ("{scanner.v_int64:%llu}", scanner->value.v_int64); \
-  TASSERT (scanner->value.v_int64 == svalue); \
-  TASSERT (g_scanner_get_next_token (scanner) == '#'); \
-}
-#define SCANNER_ASSERTf(scanner, printout, vtoken, text, svalue) { \
-  g_scanner_input_text (scanner, text, strlen (text)); \
-  if (g_scanner_get_next_token (scanner) != vtoken) \
-    g_scanner_unexp_token (scanner, vtoken, NULL, NULL, NULL, NULL, TRUE); \
-  TASSERT (scanner->token == vtoken); \
-  if (printout) g_print ("{scanner.v_float:%17g}", scanner->value.v_float); \
-  TASSERT (scanner->value.v_float == svalue); \
-  TASSERT (g_scanner_get_next_token (scanner) == '#'); \
-}
-
-static void
-test_scanner64 (void)
-{
-  GScanner *scanner = g_scanner_new64 (sfi_storage_scanner_config);
-  TSTART ("64Bit Scanner");
-  scanner->config->numbers_2_int = FALSE;
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b0 #", 0);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b10000000000000000 #", 65536);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b11111111111111111111111111111111 #", 4294967295U);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_BINARY, " 0b1111111111111111111111111111111111111111111111111111111111111111 #", 18446744073709551615ULL);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 0 #", 0);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 0200000 #", 65536);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 037777777777 #", 4294967295U);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_OCTAL, " 01777777777777777777777 #", 18446744073709551615ULL);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0x0 #", 0);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0x10000 #", 65536);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0xffffffff #", 4294967295U);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_HEX, " 0xffffffffffffffff #", 18446744073709551615ULL);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 65536 #", 65536);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 4294967295 #", 4294967295U);
-  SCANNER_ASSERT64 (scanner, FALSE, G_TOKEN_INT, " 18446744073709551615 #", 18446744073709551615ULL);
-  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 0.0 #", 0);
-  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 2.2250738585072014e-308 #", 2.2250738585072014e-308);
-  SCANNER_ASSERTf (scanner, FALSE, G_TOKEN_FLOAT, " 1.7976931348623157e+308 #", 1.7976931348623157e+308);
-  g_scanner_destroy (scanner);
-  TDONE ();
-}
-
-typedef enum /*< skip >*/
-{
-  SERIAL_TEST_TYPED = 1,
-  SERIAL_TEST_PARAM,
-  SERIAL_TEST_PSPEC
-} SerialTest;
-
-static SerialTest serial_test_type = 0;
-
-static void
-serial_pspec_check (GParamSpec *pspec,
-		    GScanner   *scanner)
-{
-  GValue *value = sfi_value_pspec (pspec), rvalue = { 0, };
-  GString *s1 = g_string_new (NULL);
-  GString *s2 = g_string_new (NULL);
-  GTokenType token;
-  sfi_value_store_typed (value, s1);
-  g_scanner_input_text (scanner, s1->str, s1->len);
-  token = sfi_value_parse_typed (&rvalue, scanner);
-  if (token != G_TOKEN_NONE)
-    {
-      g_print ("{while parsing pspec \"%s\":\n\t%s\n", pspec->name, s1->str);
-      g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
-			     g_strdup_printf ("failed to serialize pspec \"%s\"", pspec->name), TRUE);
-    }
-  TASSERT (token == G_TOKEN_NONE);
-  sfi_value_store_typed (&rvalue, s2);
-  if (strcmp (s1->str, s2->str))
-    g_print ("{while comparing pspecs \"%s\":\n\t%s\n\t%s\n", pspec->name, s1->str, s2->str);
-  TASSERT (strcmp (s1->str, s2->str) == 0);
-  g_value_unset (&rvalue);
-  sfi_value_free (value);
-  g_string_free (s1, TRUE);
-  g_string_free (s2, TRUE);
-}
-
-static void
-serialize_cmp (GValue     *value,
-	       GParamSpec *pspec)
-{
-  GScanner *scanner = g_scanner_new64 (sfi_storage_scanner_config);
-  GString *gstring = g_string_new (NULL);
-  GValue rvalue = { 0, };
-  GTokenType token;
-  gint cmp;
-  if (serial_test_type == SERIAL_TEST_PSPEC)
-    serial_pspec_check (pspec, scanner);
-  else
-    {
-      // if (pspec && strcmp (pspec->name, "real-max") == 0) G_BREAKPOINT ();
-      if (serial_test_type == SERIAL_TEST_TYPED)
-	sfi_value_store_typed (value, gstring);
-      else /* SERIAL_TEST_PARAM */
-	sfi_value_store_param (value, gstring, pspec, 2);
-      g_scanner_input_text (scanner, gstring->str, gstring->len);
-      if (serial_test_type == SERIAL_TEST_TYPED)
-	token = sfi_value_parse_typed (&rvalue, scanner);
-      else /* SERIAL_TEST_PARAM */
-	{
-	  if (g_scanner_get_next_token (scanner) == '(')
-	    if (g_scanner_get_next_token (scanner) == G_TOKEN_IDENTIFIER &&
-		strcmp (scanner->value.v_identifier, pspec->name) == 0)
-	      token = sfi_value_parse_param_rest (&rvalue, scanner, pspec);
-	    else
-	      token = G_TOKEN_IDENTIFIER;
-	  else
-	    token = '(';
-	}
-      if (0)
-	g_print ("{parsing:%s}", gstring->str);
-      if (token != G_TOKEN_NONE)
-	{
-	  g_print ("{while parsing \"%s\":\n\t%s\n", pspec->name, gstring->str);
-	  g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
-				 g_strdup_printf ("failed to serialize \"%s\"", pspec->name), TRUE);
-	}
-      TASSERT (token == G_TOKEN_NONE);
-      cmp = g_param_values_cmp (pspec, value, &rvalue);
-      if (cmp)
-	{
-	  g_print ("{after parsing:\n\t%s\n", gstring->str);
-	  g_print ("while comparing:\n\t%s\nwith:\n\t%s\nresult:\n\t%d\n",
-		   g_strdup_value_contents (value),
-		   g_strdup_value_contents (&rvalue),
-		   cmp);
-	  if (0)
-	    {
-	      G_BREAKPOINT ();
-	      g_value_unset (&rvalue);
-	      g_scanner_input_text (scanner, gstring->str, gstring->len);
-	      token = sfi_value_parse_typed (&rvalue, scanner);
-	    }
-	}
-      TASSERT (cmp == 0);
-      if (0) /* generate testoutput */
-	g_print ("OK=================(%s)=================:\n%s\n", pspec->name, gstring->str);
-    }
-  g_scanner_destroy (scanner);
-  g_string_free (gstring, TRUE);
-  if (G_VALUE_TYPE (&rvalue))
-    g_value_unset (&rvalue);
-  sfi_value_free (value);
-  sfi_pspec_sink (pspec);
-}
-
-static void
-test_typed_serialization (SerialTest test_type)
-{
-  static const SfiChoiceValue test_choices[] = {
-    { "ozo-foo", "Ozo-foo blurb", },
-    { "emptyblurb", "", },
-    { "noblurb", NULL, },
-  };
-  static const SfiChoiceValues choice_values = { G_N_ELEMENTS (test_choices), test_choices };
-  SfiRecFields rec_fields = { 0, NULL, };
-  GParamSpec *pspec_homo_seq;
-  SfiFBlock *fblock;
-  SfiBBlock *bblock;
-  SfiSeq *seq;
-  SfiRec *rec;
-  GValue *val;
-  gchar str256[257];
-  guint i;
-  serial_test_type = test_type;
-  switch (serial_test_type)
-    {
-    case SERIAL_TEST_TYPED:	TSTART ("Typed Serialization"); break;
-    case SERIAL_TEST_PARAM:	TSTART ("Param Serialization"); break;
-    case SERIAL_TEST_PSPEC:	TSTART ("Pspec Serialization"); break;
-    }
-  serialize_cmp (sfi_value_bool (FALSE),
-		 sfi_pspec_bool ("bool-false", NULL, NULL, FALSE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_bool (TRUE),
-		 sfi_pspec_bool ("bool-true", NULL, NULL, FALSE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_int (SFI_MAXINT),
-		 sfi_pspec_int ("int-max", NULL, NULL, 0, SFI_MININT, SFI_MAXINT, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_int (SFI_MININT),
-		 sfi_pspec_int ("int-min", NULL, NULL, 0, SFI_MININT, SFI_MAXINT, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_num (SFI_MAXNUM),
-		 sfi_pspec_num ("num-max", NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_num (SFI_MINNUM),
-		 sfi_pspec_num ("num-min", NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (SFI_MINREAL),
-		 sfi_pspec_real ("real-min", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (SFI_MAXREAL),
-		 sfi_pspec_real ("real-max", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (-SFI_MINREAL),
-		 sfi_pspec_real ("real-min-neg", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (-SFI_MAXREAL),
-		 sfi_pspec_real ("real-max-neg", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (SFI_MININT),
-		 sfi_pspec_real ("real-minint", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_real (SFI_MINNUM),
-		 sfi_pspec_real ("real-minnum", NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_note (SFI_MIN_NOTE),
-		 sfi_pspec_note ("vnote-min", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_note (SFI_MAX_NOTE),
-		 sfi_pspec_note ("vnote-max", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_note (SFI_NOTE_VOID),
-		 sfi_pspec_note ("vnote-void", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, TRUE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_note (SFI_MIN_NOTE),
-		 sfi_pspec_note ("note-min", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_note (SFI_MAX_NOTE),
-		 sfi_pspec_note ("note-max", NULL, NULL, SFI_KAMMER_NOTE, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_string (NULL),
-		 sfi_pspec_string ("string-nil", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_string ("test\"string'with\\character-?\007rubbish\177H"),
-		 sfi_pspec_string ("string", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_string (""),
-		 sfi_pspec_string ("string-empty", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  for (i = 0; i < 255; i++)
-    str256[i] = i + 1;
-  str256[i] = 0;
-  serialize_cmp (sfi_value_string (str256),
-		 sfi_pspec_string ("string-255", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_choice (NULL),
-		 sfi_pspec_choice ("choice-nil", NULL, NULL, NULL, choice_values, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_choice ("test-choice-with-valid-characters_9876543210"),
-		 sfi_pspec_choice ("choice", NULL, NULL, NULL, choice_values, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_proxy (SFI_MAXINT),
-		 sfi_pspec_proxy ("proxy-max", NULL, NULL, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_proxy (G_MAXUINT),
-		 sfi_pspec_proxy ("proxy-umax", NULL, NULL, SFI_PARAM_STANDARD));
-  serialize_cmp (sfi_value_bblock (NULL),
-		 sfi_pspec_bblock ("bblock-nil", NULL, NULL, SFI_PARAM_STANDARD));
-  bblock = sfi_bblock_new ();
-  serialize_cmp (sfi_value_bblock (bblock),
-		 sfi_pspec_bblock ("bblock-empty", NULL, NULL, SFI_PARAM_STANDARD));
-  for (i = 0; i < 256; i++)
-    sfi_bblock_append1 (bblock, i);
-  serialize_cmp (sfi_value_bblock (bblock),
-		 sfi_pspec_bblock ("bblock", NULL, NULL, SFI_PARAM_STANDARD));
-  sfi_bblock_unref (bblock);
-  serialize_cmp (sfi_value_fblock (NULL),
-		 sfi_pspec_fblock ("fblock-nil", NULL, NULL, SFI_PARAM_STANDARD));
-  fblock = sfi_fblock_new ();
-  serialize_cmp (sfi_value_fblock (fblock),
-		 sfi_pspec_fblock ("fblock-empty", NULL, NULL, SFI_PARAM_STANDARD));
-  sfi_fblock_append1 (fblock, -G_MINFLOAT);
-  sfi_fblock_append1 (fblock, G_MINFLOAT);
-  sfi_fblock_append1 (fblock, -G_MAXFLOAT);
-  sfi_fblock_append1 (fblock, G_MAXFLOAT);
-  sfi_fblock_append1 (fblock, SFI_MININT);
-  sfi_fblock_append1 (fblock, -SFI_MAXINT);
-  sfi_fblock_append1 (fblock, SFI_MAXINT);
-  sfi_fblock_append1 (fblock, SFI_MINNUM);
-  sfi_fblock_append1 (fblock, -SFI_MAXNUM);
-  sfi_fblock_append1 (fblock, SFI_MAXNUM);
-  serialize_cmp (sfi_value_fblock (fblock),
-		 sfi_pspec_fblock ("fblock", NULL, NULL, SFI_PARAM_STANDARD));
-  
-  serialize_cmp (sfi_value_seq (NULL),
-		 sfi_pspec_seq ("seq-nil", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  seq = sfi_seq_new ();
-  serialize_cmp (sfi_value_seq (seq),
-		 sfi_pspec_seq ("seq-empty", NULL, NULL, NULL, SFI_PARAM_STANDARD));
-  val = sfi_value_bool (TRUE);
-  sfi_seq_append (seq, val);
-  sfi_value_free (val);
-  val = sfi_value_int (42);
-  sfi_seq_append (seq, val);
-  sfi_value_free (val);
-  val = sfi_value_string ("huhu");
-  sfi_seq_append (seq, val);
-  sfi_value_free (val);
-  val = sfi_value_fblock (fblock);
-  sfi_seq_append (seq, val);
-  sfi_value_free (val);
-  if (serial_test_type != SERIAL_TEST_PARAM)
-    serialize_cmp (sfi_value_seq (seq),
-		   sfi_pspec_seq ("seq-heterogeneous", NULL, NULL,
-				  sfi_pspec_real ("dummy", NULL, NULL,
-						  0, -SFI_MAXREAL, SFI_MAXREAL, 1, SFI_PARAM_STANDARD),
-				  SFI_PARAM_STANDARD));
-  sfi_seq_clear (seq);
-  for (i = 0; i < 12; i++)
-    {
-      val = sfi_value_int (2000 - 3 * i);
-      sfi_seq_append (seq, val);
-      sfi_value_free (val);
-    }
-  pspec_homo_seq = sfi_pspec_seq ("seq-homogeneous", NULL, NULL,
-				  sfi_pspec_int ("integer", NULL, NULL,
-						 1500, 1000, 2000, 1, SFI_PARAM_STANDARD),
-				  SFI_PARAM_STANDARD);
-  sfi_pspec_ref (pspec_homo_seq);
-  serialize_cmp (sfi_value_seq (seq),
-		 sfi_pspec_seq ("seq-homogeneous", NULL, NULL,
-				sfi_pspec_int ("integer", NULL, NULL,
-					       1500, 1000, 2000, 1, SFI_PARAM_STANDARD),
-				SFI_PARAM_STANDARD));
-  
-  if (serial_test_type == SERIAL_TEST_PSPEC)
-    {
-      serialize_cmp (sfi_value_pspec (NULL),
-		     sfi_pspec_pspec ("pspec-nil", NULL, NULL, SFI_PARAM_STANDARD));
-      serialize_cmp (sfi_value_pspec (pspec_homo_seq),
-		     sfi_pspec_pspec ("pspec-hseq", NULL, NULL, SFI_PARAM_STANDARD));
-    }
-
-  serialize_cmp (sfi_value_rec (NULL),
-		 sfi_pspec_rec ("rec-nil", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
-  rec = sfi_rec_new ();
-  serialize_cmp (sfi_value_rec (rec),
-		 sfi_pspec_rec ("rec-empty", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
-  val = sfi_value_string ("huhu");
-  sfi_rec_set (rec, "exo-string", val);
-  if (serial_test_type != SERIAL_TEST_PARAM)
-    sfi_rec_set (rec, "exo-string2", val);
-  sfi_value_free (val);
-  val = sfi_value_seq (seq);
-  sfi_rec_set (rec, "seq-homogeneous", val);
-  sfi_value_free (val);
-  val = sfi_value_proxy (102);
-  sfi_rec_set (rec, "baz-proxy", val);
-  sfi_value_free (val);
-  rec_fields.fields = g_new (GParamSpec*, 20); /* should be static mem */
-  rec_fields.fields[rec_fields.n_fields++] = sfi_pspec_proxy ("baz-proxy", NULL, NULL, SFI_PARAM_STANDARD);
-  rec_fields.fields[rec_fields.n_fields++] = sfi_pspec_string ("exo-string", NULL, NULL, NULL, SFI_PARAM_STANDARD);
-  rec_fields.fields[rec_fields.n_fields++] = pspec_homo_seq;
-  serialize_cmp (sfi_value_rec (rec),
-		 sfi_pspec_rec ("rec", NULL, NULL, rec_fields, SFI_PARAM_STANDARD));
-  
-  sfi_fblock_unref (fblock);
-  sfi_seq_unref (seq);
-  sfi_pspec_unref (pspec_homo_seq);
-  sfi_rec_unref (rec);
-  TDONE ();
-}
-
-static void
-test_notes (void)
-{
-  gchar *str, *error = NULL;
-  guint i;
-  TSTART ("Notes");
-  str = sfi_note_to_string (SFI_MIN_NOTE);
-  TASSERT (sfi_note_from_string_err (str, &error) == SFI_MIN_NOTE);
-  TASSERT (error == NULL);
-  g_free (str);
-  str = sfi_note_to_string (SFI_KAMMER_NOTE);
-  TASSERT (sfi_note_from_string_err (str, &error) == SFI_KAMMER_NOTE);
-  TASSERT (error == NULL);
-  g_free (str);
-  str = sfi_note_to_string (SFI_MAX_NOTE);
-  TASSERT (sfi_note_from_string_err (str, &error) == SFI_MAX_NOTE);
-  TASSERT (error == NULL);
-  g_free (str);
-  for (i = SFI_MIN_NOTE; i <= SFI_MAX_NOTE; i++)
-    {
-      gint octave;
-      guint semitone;
-      gboolean black_semitone;
-      gchar letter;
-      
-      sfi_note_examine (i, &octave, &semitone, &black_semitone, &letter);
-      TASSERT (octave == SFI_NOTE_OCTAVE (i));
-      TASSERT (semitone == SFI_NOTE_SEMITONE (i));
-      TASSERT (SFI_NOTE_GENERIC (octave, semitone) == i);
-    }
-  sfi_note_from_string_err ("NeverNote", &error);
-  TASSERT (error != NULL);
-  // g_print ("{%s}", error);
-  g_free (error);
-  TDONE ();
-}
-
-static void
-test_renames (void)
-{
-  gchar *str;
-  TSTART ("Renames");
-  str = g_type_name_to_cname ("PrefixTypeName");
-  TASSERT (strcmp (str, "prefix_type_name") == 0);
-  g_free (str);
-  str = g_type_name_to_sname ("PrefixTypeName");
-  TASSERT (strcmp (str, "prefix-type-name") == 0);
-  g_free (str);
-  str = g_type_name_to_cupper ("PrefixTypeName");
-  TASSERT (strcmp (str, "PREFIX_TYPE_NAME") == 0);
-  g_free (str);
-  str = g_type_name_to_type_macro ("PrefixTypeName");
-  TASSERT (strcmp (str, "PREFIX_TYPE_TYPE_NAME") == 0);
-  g_free (str);
-  str = g_type_name_to_sname ("prefix_type_name");
-  TASSERT (strcmp (str, "prefix-type-name") == 0);
-  g_free (str);
-  str = g_type_name_to_cname ("prefix-type-name");
-  TASSERT (strcmp (str, "prefix_type_name") == 0);
-  g_free (str);
-  TDONE ();
-}
-
-static gboolean vmarshal_switch = TRUE;
-static guint    vmarshal_count = 0;
-
-static void
-generate_vmarshal (guint sig)
-{
-  gchar *s, signame[32 * 4 + 1];
-  guint i;
-  vmarshal_count++;
-  s = signame + sizeof (signame);
-  *--s = 0;
-  for (i = sig; i; i >>= 2)
-    *--s = '0' + (i & 3);
-  if (!vmarshal_switch)
-    {
-      g_print ("static void /* %u */\nsfi_vmarshal_%s (gpointer func, gpointer arg0, Arg *alist)\n{\n",
-	       vmarshal_count, s);
-      g_print ("  void (*f) (gpointer");
-      for (i = 0; s[i]; i++)
-	switch (s[i] - '0')
-	  {
-	  case 1:	g_print (", guint32");		break;
-	  case 2:	g_print (", guint64");		break;
-	  case 3:	g_print (", double");		break;
-	  }
-      g_print (", gpointer) = func;\n");
-      g_print ("  f (arg0");
-      for (i = 0; s[i]; i++)
-	switch (s[i] - '0')
-	  {
-	  case 1:	g_print (", alist[%u].v32", i);		break;
-	  case 2:	g_print (", alist[%u].v64", i);		break;
-	  case 3:	g_print (", alist[%u].vdbl", i);	break;
-	  }
-      g_print (", alist[%u].vpt);\n}\n", i);
-    }
-  else
-    g_print ("    case 0x%03x: return sfi_vmarshal_%s; /* %u */\n", sig, s, vmarshal_count);
-}
-
-static void
-generate_vmarshal_loop (void)
-{
-  guint sig, i, ki[SFI_VMARSHAL_MAX_ARGS + 1];
-  vmarshal_count = 0;
-  /* initialize digits */
-  for (i = 0; i < SFI_VMARSHAL_MAX_ARGS; i++)
-    ki[i] = 1;
-  /* initialize overflow */
-  ki[SFI_VMARSHAL_MAX_ARGS] = 0;
-  while (ki[SFI_VMARSHAL_MAX_ARGS] == 0)	/* abort on overflow */
-    {
-      /* construct signature */
-      sig = 0;
-      for (i = SFI_VMARSHAL_MAX_ARGS; i > 0; i--)
-	{
-	  sig <<= 2;
-	  sig |= ki[i - 1];
-	}
-      /* generate */
-      generate_vmarshal (sig);
-      /* increase digit wise: 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, ... */
-      for (i = 0; ; i++)
-	{
-	  if (++ki[i] <= 3)
-	    break;
-	  ki[i] = 1;
-	}
-    }
-}
-
-static void
-generate_vmarshal_code (void)
-{
-  vmarshal_switch = FALSE;
-  generate_vmarshal_loop ();
-
-  vmarshal_switch = TRUE;
-  g_print ("static VMarshal\nsfi_vmarshal_switch (guint sig)\n{\n");
-  g_print ("  switch (sig)\n    {\n");
-  generate_vmarshal_loop ();
-  g_print ("    default: g_assert_not_reached (); return NULL;\n");
-  g_print ("    }\n}\n");
-}
-
-static gchar *pointer1 = "huhu";
-static gchar *pointer2 = "haha";
-static gchar *pointer3 = "zoot";
-
-static void
-test_vmarshal_func4 (gpointer o,
-		     SfiReal  r,
-		     SfiNum   n,
-		     gpointer data)
-{
-  TASSERT (o == pointer1);
-  TASSERT (r == -426.9112e-267);
-  TASSERT (n == -2598768763298128732LL);
-  TASSERT (data == pointer3);
-}
-
-static void
-test_vmarshal_func7 (gpointer o,
-		     SfiReal  r,
-		     SfiNum   n,
-		     SfiProxy p,
-		     SfiInt   i,
-		     SfiNum   self,
-		     gpointer data)
-{
-  TASSERT (o == pointer1);
-  TASSERT (r == -426.9112e-267);
-  TASSERT (n == -2598768763298128732LL);
-  TASSERT (p == (SfiProxy) pointer2);
-  TASSERT (i == -2134567);
-  TASSERT (self == (long) test_vmarshal_func7);
-  TASSERT (data == pointer3);
-}
-
-static void
-test_vmarshals (void)
-{
-  SfiSeq *seq = sfi_seq_new ();
-  TSTART ("Vmarshals");
-  sfi_seq_append_real (seq, -426.9112e-267);
-  sfi_seq_append_num (seq, -2598768763298128732LL);
-  sfi_vmarshal_void (test_vmarshal_func4, pointer1,
-		  seq->n_elements, seq->elements,
-		  pointer3);
-  sfi_seq_append_proxy (seq, (SfiProxy) pointer2);
-  sfi_seq_append_int (seq, -2134567);
-  sfi_seq_append_num (seq, (long) test_vmarshal_func7);
-  sfi_vmarshal_void (test_vmarshal_func7, pointer1,
-		  seq->n_elements, seq->elements,
-		  pointer3);
-  TDONE ();
-  sfi_seq_unref (seq);
-}
-
-static void
-test_sfidl_seq (void)
-{
-  TestPositionSeq* pseq;
-  TestPosition* pos;
-  TestPosition* pos2;
-  SfiRec* rec;
-  GValue* value;
-  TSTART ("Sfidl generated code");
-
-  /* test that types are registered properly */
-  // TASSERT (TEST_TYPE_POSITION != 0);
-  // TASSERT (TEST_TYPE_POSITION_SEQ != 0);
-  // TASSERT (TEST_TYPE_YES_NO_UNDECIDED != 0);
-
-  /* test sequences and structs generated for Position record */
-  pseq = test_position_seq_new ();
-  TASSERT (pseq != NULL);
-  TASSERT (pseq->n_positions == 0);
-
-  pos = test_position_new ();
-  TASSERT (pos != NULL);
-  pos->x = 1.0;
-  pos->y = -1.0;
-  pos->relevant = TEST_NO;
-
-  test_position_seq_append (pseq, pos);
-  TASSERT (pseq->n_positions == 1);
-
-  test_position_seq_resize (pseq, 4);
-  TASSERT (pseq->n_positions == 4);
-
-  test_position_seq_resize (pseq, 1);
-  TASSERT (pseq->n_positions == 1);
-
-  rec = test_position_to_rec (pos);
-  value = sfi_rec_get (rec, "relevant");
-
-  TASSERT (SFI_VALUE_HOLDS_CHOICE (value));
-  TASSERT (strcmp (sfi_value_get_choice (value), "test-no") == 0);
-
-  pos2 = test_position_from_rec (rec);
-
-  TASSERT (pos->x == pos2->x);
-  TASSERT (pos->y == pos2->y);
-  TASSERT (pos->relevant == pos2->relevant);
-
-  sfi_rec_unref (rec);
-  test_position_seq_free (pseq);
-  test_position_free (pos);
-  test_position_free (pos2);
-
-  /* test validation and defaulting */
-  {
-    GParamSpec *pspec;
-    GValue rec_value = { 0, };
-
-    /* create empty record */
-    g_value_init (&rec_value, SFI_TYPE_REC);
-    sfi_value_take_rec (&rec_value, sfi_rec_new ());
-
-    /* validate record against pspec */
-    pspec = sfi_pspec_rec ("foo", "bar", "bazz", test_position_fields, SFI_PARAM_STANDARD);
-    g_param_value_validate (pspec, &rec_value);
-    g_param_spec_unref (pspec);
-
-#if 0
-    GValue pos_value = { 0, };
-    /* transform record to boxed type */
-    g_value_init (&pos_value, TEST_TYPE_POSITION);
-    TASSERT (sfi_value_type_transformable (SFI_TYPE_REC, TEST_TYPE_POSITION));
-    sfi_value_transform (&rec_value, &pos_value);
-
-    /* get boxed type */
-    TASSERT (G_VALUE_HOLDS (&pos_value, TEST_TYPE_POSITION));
-    pos = g_value_get_boxed (&pos_value);
-    
-    /* check that values match defaults */
-    TASSERT (pos->x == 2.0);
-    TASSERT (pos->y == 3.0);
-    TASSERT (pos->relevant == TEST_YES);
-
-    /* cleanup */
-    g_value_unset (&rec_value);
-    g_value_unset (&pos_value);
-#endif
-  }
-
-  /* test constants */
-  // TASSERT (TEST_ANSWER_B == 42);
-  // TASSERT (strcmp(TEST_ULTIMATE_ANSWER, "the answer to all questions is 42") == 0);
-  TDONE ();
-}
-
-#include <sfi/testidl.c>
-
-int
-main (int   argc,
-      char *argv[])
-{
-  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
-  birnet_init (&argc, &argv, NULL);
-  
-  test_types_init ();
-
-  if (0)
-    {
-      generate_vmarshal_code ();
-      return 0;
-    }
-  
-  test_notes ();
-  test_time ();
-  test_renames ();
-  test_scanner64 ();
-  test_typed_serialization (SERIAL_TEST_PARAM);
-  test_typed_serialization (SERIAL_TEST_TYPED);
-  test_typed_serialization (SERIAL_TEST_PSPEC);
-  test_vmarshals ();
-  test_com_ports ();
-  test_threads ();
-  test_sfidl_seq ();
-  test_misc ();
-
-  return 0;
-}
-
-/* distcc preprocessing test */
-char *test_distcc_strings = "ÿÿÿÿ";
-
-/* vim:set ts=8 sts=2 sw=2: */

Deleted: trunk/sfi/testsfidl.cc
===================================================================
--- trunk/sfi/testsfidl.cc	2006-10-03 15:59:10 UTC (rev 3929)
+++ trunk/sfi/testsfidl.cc	2006-10-03 16:47:43 UTC (rev 3930)
@@ -1,164 +0,0 @@
-/* SFI - Synthesis Fusion Kit Interface
- * Copyright (C) 2004 Tim Janik, Stefan Westerfeld
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#undef G_LOG_DOMAIN
-#define  G_LOG_DOMAIN __FILE__
-// #define TEST_VERBOSE
-#include <birnet/birnettests.h>
-#include "sfidl-generator.hh"
-#include "sfidl-factory.hh"
-#include <stdio.h>
-
-using namespace Sfidl;
-using namespace std;
-
-
-#define ASSERT_EQ(got,expectedcstr) do {                                \
-  TPRINT ("{check equality: %s == %s}", expectedcstr, got.c_str());     \
-  TASSERT (expectedcstr == got);                                            \
-} while (0)
-
-class TestCG : public CodeGenerator
-{
-  string one, two, done;
-public:
-  TestCG(const Parser& parser) : CodeGenerator (parser)
-  {
-  }
-  OptionVector getOptions()
-  {
-    OptionVector opts;
-
-    opts.push_back (make_pair ("--one", true));
-    opts.push_back (make_pair ("--two", true));
-    opts.push_back (make_pair ("--done", false));
-
-    return opts;
-  }
-  void setOption (const string& option, const string& value)
-  {
-    if (option == "--one") one = value;
-    if (option == "--two") two = value;
-    if (option == "--done") done = value;
-  }
-  bool run()
-  {
-    TSTART ("Testing Option parser");
-    ASSERT_EQ (one, "1");
-    ASSERT_EQ (two, "2");
-    ASSERT_EQ (done, "1");
-    TDONE ();
-
-    TSTART ("Testing CodeGenerator::rename()");
-
-    vector<string> procedures;
-    vector<string> empty;
-    vector<string> type;
-    procedures.push_back("Procedures");
-    type.push_back("Type");
-
-    TASSERT (procedures.size() == 1);
-    TASSERT (type.size() == 1);
-    TASSERT (empty.size() == 0);
-
-    ASSERT_EQ (rename (ABSOLUTE, "A::B::processMessagesSlowly", Capitalized, "::",
-		       procedures, lower, "_"),
-               "::A::B::Procedures::process_messages_slowly");
-
-    ASSERT_EQ (rename (NONE, "A::B::processMessagesSlowly", Capitalized, "::",
-		       procedures, lower, "_"),
-	       "Procedures::process_messages_slowly");
-
-    ASSERT_EQ (rename (ABSOLUTE, "Bse::SNet", Capitalized, "",
-		       empty, Capitalized, ""),
-	       "BseSNet");
-
-    ASSERT_EQ (rename (ABSOLUTE, "Bse::AlphaSynth", UPPER, "_",
-		       type, UPPER, "_"),
-	       "BSE_TYPE_ALPHA_SYNTH");
-
-    ASSERT_EQ (rename (ABSOLUTE, "Bse::FFTSize", Capitalized, "",
-                       empty, Capitalized, ""),
-              "BseFFTSize");
-
-    ASSERT_EQ (rename (ABSOLUTE, "Bse::FFTSize", lower, "_",
-                       empty, lower, "_"),
-              "bse_fft_size");
-
-    ASSERT_EQ (rename (ABSOLUTE, "XWindows::WMHints", Capitalized, "",
-                       empty, Capitalized, ""),
-              "XWindowsWMHints");
-
-    ASSERT_EQ (rename (ABSOLUTE, "XWindows::WMHints", UPPER, "_",
-                       empty, UPPER, "_"),
-              "XWINDOWS_WM_HINTS");
-
-    ASSERT_EQ (rename (ABSOLUTE, "Bse::MIDI_SIGNAL_PROGRAM", UPPER, "_",
-                       empty, UPPER, "_"),
-              "BSE_MIDI_SIGNAL_PROGRAM");
-
-    TDONE();
-    return true;
-  }
-};
-
-class TestCGFactory : public Factory {
-public:
-  string option() const	      { return "--test"; }
-  string description() const  { return "test code generator"; }
-  
-  CodeGenerator *create (const Parser& parser) const
-  {
-    return new TestCG (parser);
-  }
-} static_factory;
-
-int
-main (int   argc,
-      char *argv[])
-{
-  Options options;
-  Parser parser;
-
-  int fake_argc = 6;
-  char **fake_argv = g_new0 (gchar*, fake_argc);
-  fake_argv[0] = "testsfidl";
-  fake_argv[1] = "--test";
-  fake_argv[2] = "--one";
-  fake_argv[3] = "1";
-  fake_argv[4] = "--two=2";
-  fake_argv[5] = "--done";
-  options.parse (&fake_argc, &fake_argv, parser);
-
-  TSTART ("Testing factory");
-  TASSERT (options.codeGenerator != 0);
-  TDONE();
-
-  if (options.codeGenerator->run())
-    {
-      delete options.codeGenerator;
-      return 0;
-    }
-  else
-    {
-      delete options.codeGenerator;
-      return 1;
-    }
-}
-
-/* vim:set ts=8 sts=2 sw=2: */




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]