r3930 - in trunk/sfi: . tests
- From: timj svn gnome org
- To: svn-commits-list gnome org
- Subject: r3930 - in trunk/sfi: . tests
- Date: Tue, 3 Oct 2006 12:48:10 -0400 (EDT)
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]