summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjofret2007-04-20 08:29:42 +0000
committerjofret2007-04-20 08:29:42 +0000
commitcfeba6e9408132a5fa76f0591f15a68339fd8a59 (patch)
treecd5ac709789c18254abfa3baa7b49788e61dd6de
parent8e7ea9e904a0e9c5760d2b05de5b3f0af31785de (diff)
downloadscilab2c-cfeba6e9408132a5fa76f0591f15a68339fd8a59.tar.gz
scilab2c-cfeba6e9408132a5fa76f0591f15a68339fd8a59.tar.bz2
scilab2c-cfeba6e9408132a5fa76f0591f15a68339fd8a59.zip
Adding Automated tests.
-rw-r--r--src/elementaryFunctions/asin/Makefile.am23
-rw-r--r--src/elementaryFunctions/asin/Makefile.in142
-rw-r--r--src/elementaryFunctions/asin/testAsin.c150
-rw-r--r--src/elementaryFunctions/asin/testAsin.h40
4 files changed, 344 insertions, 11 deletions
diff --git a/src/elementaryFunctions/asin/Makefile.am b/src/elementaryFunctions/asin/Makefile.am
index 6454cd8a..0992ec71 100644
--- a/src/elementaryFunctions/asin/Makefile.am
+++ b/src/elementaryFunctions/asin/Makefile.am
@@ -5,7 +5,7 @@
## Made by Bruno JOFRET <bruno.jofret@inria.fr>
##
## Started on Fri Jan 5 10:19:16 2007 jofret
-## Last update Sun Mar 25 21:01:56 2007 bruno
+## Last update Fri Apr 20 10:34:36 2007 jofret
##
## Copyright INRIA 2007
##
@@ -31,3 +31,24 @@ SRC = sasins.c \
zasina.c
HEAD = ../includes/asin.h
+
+####
+# Checking Part
+####
+
+check_INCLUDES = -I $(top_builddir)/elementaryFunctions/includes \
+ -I $(top_builddir)/type
+
+check_PROGRAMS = testAsin
+
+TESTS = testAsin
+
+#
+# -*- ArcSine Tests -*-
+#
+testAsin_SOURCES = testAsin.c
+testAsin_CFLAGS = $(check_INCLUDES)
+testAsin_LDADD = $(top_builddir)/lib/libDoubleComplex.a \
+ $(top_builddir)/lib/libFloatComplex.a \
+ $(top_builddir)/lib/libAsin.a \
+ @LIBMATH@ \ No newline at end of file
diff --git a/src/elementaryFunctions/asin/Makefile.in b/src/elementaryFunctions/asin/Makefile.in
index 4fb6426c..322768f8 100644
--- a/src/elementaryFunctions/asin/Makefile.in
+++ b/src/elementaryFunctions/asin/Makefile.in
@@ -36,6 +36,7 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+check_PROGRAMS = testAsin$(EXEEXT)
subdir = elementaryFunctions/asin
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -65,6 +66,11 @@ am__objects_2 = sasins.$(OBJEXT) dasins.$(OBJEXT) casins.$(OBJEXT) \
casina.$(OBJEXT) zasina.$(OBJEXT)
am_libAsin_a_OBJECTS = $(am__objects_1) $(am__objects_2)
libAsin_a_OBJECTS = $(am_libAsin_a_OBJECTS)
+am_testAsin_OBJECTS = testAsin-testAsin.$(OBJEXT)
+testAsin_OBJECTS = $(am_testAsin_OBJECTS)
+testAsin_DEPENDENCIES = $(top_builddir)/lib/libDoubleComplex.a \
+ $(top_builddir)/lib/libFloatComplex.a \
+ $(top_builddir)/lib/libAsin.a
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/includes
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
am__depfiles_maybe = depfiles
@@ -72,8 +78,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libAsin_a_SOURCES)
-DIST_SOURCES = $(libAsin_a_SOURCES)
+SOURCES = $(libAsin_a_SOURCES) $(testAsin_SOURCES)
+DIST_SOURCES = $(libAsin_a_SOURCES) $(testAsin_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -189,6 +195,25 @@ SRC = sasins.c \
zasina.c
HEAD = ../includes/asin.h
+
+####
+# Checking Part
+####
+check_INCLUDES = -I $(top_builddir)/elementaryFunctions/includes \
+ -I $(top_builddir)/type
+
+TESTS = testAsin
+
+#
+# -*- ArcSine Tests -*-
+#
+testAsin_SOURCES = testAsin.c
+testAsin_CFLAGS = $(check_INCLUDES)
+testAsin_LDADD = $(top_builddir)/lib/libDoubleComplex.a \
+ $(top_builddir)/lib/libFloatComplex.a \
+ $(top_builddir)/lib/libAsin.a \
+ @LIBMATH@
+
all: all-am
.SUFFIXES:
@@ -259,6 +284,12 @@ libAsin.a: $(libAsin_a_OBJECTS) $(libAsin_a_DEPENDENCIES)
$(libAsin_a_AR) libAsin.a $(libAsin_a_OBJECTS) $(libAsin_a_LIBADD)
$(RANLIB) libAsin.a
+clean-checkPROGRAMS:
+ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+testAsin$(EXEEXT): $(testAsin_OBJECTS) $(testAsin_DEPENDENCIES)
+ @rm -f testAsin$(EXEEXT)
+ $(LINK) $(testAsin_LDFLAGS) $(testAsin_OBJECTS) $(testAsin_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -271,6 +302,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dasins.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sasina.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sasins.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testAsin-testAsin.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zasina.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zasins.Po@am__quote@
@@ -287,6 +319,20 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+testAsin-testAsin.o: testAsin.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testAsin_CFLAGS) $(CFLAGS) -MT testAsin-testAsin.o -MD -MP -MF "$(DEPDIR)/testAsin-testAsin.Tpo" -c -o testAsin-testAsin.o `test -f 'testAsin.c' || echo '$(srcdir)/'`testAsin.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/testAsin-testAsin.Tpo" "$(DEPDIR)/testAsin-testAsin.Po"; else rm -f "$(DEPDIR)/testAsin-testAsin.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testAsin.c' object='testAsin-testAsin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testAsin_CFLAGS) $(CFLAGS) -c -o testAsin-testAsin.o `test -f 'testAsin.c' || echo '$(srcdir)/'`testAsin.c
+
+testAsin-testAsin.obj: testAsin.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testAsin_CFLAGS) $(CFLAGS) -MT testAsin-testAsin.obj -MD -MP -MF "$(DEPDIR)/testAsin-testAsin.Tpo" -c -o testAsin-testAsin.obj `if test -f 'testAsin.c'; then $(CYGPATH_W) 'testAsin.c'; else $(CYGPATH_W) '$(srcdir)/testAsin.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/testAsin-testAsin.Tpo" "$(DEPDIR)/testAsin-testAsin.Po"; else rm -f "$(DEPDIR)/testAsin-testAsin.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='testAsin.c' object='testAsin-testAsin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testAsin_CFLAGS) $(CFLAGS) -c -o testAsin-testAsin.obj `if test -f 'testAsin.c'; then $(CYGPATH_W) 'testAsin.c'; else $(CYGPATH_W) '$(srcdir)/testAsin.c'; fi`
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -337,6 +383,79 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
@@ -365,6 +484,8 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LIBRARIES)
installdirs:
@@ -397,8 +518,8 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-instLIBRARIES clean-noinstLIBRARIES \
- mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-instLIBRARIES \
+ clean-noinstLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
@@ -445,12 +566,13 @@ ps-am:
uninstall-am: uninstall-info-am uninstall-instLIBRARIES
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-instLIBRARIES clean-noinstLIBRARIES ctags distclean \
- distclean-compile distclean-generic distclean-tags distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-exec install-exec-am \
- install-info install-info-am install-instLIBRARIES install-man \
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-instLIBRARIES \
+ clean-noinstLIBRARIES ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-instLIBRARIES install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
diff --git a/src/elementaryFunctions/asin/testAsin.c b/src/elementaryFunctions/asin/testAsin.c
new file mode 100644
index 00000000..5ac58411
--- /dev/null
+++ b/src/elementaryFunctions/asin/testAsin.c
@@ -0,0 +1,150 @@
+/*
+** -*- C -*-
+**
+** testAsin.c
+** Made by Bruno JOFRET <bruno.jofret@inria.fr>
+**
+** Started on Fri Dec 8 15:05:44 2006 jofret
+** Last update Fri Apr 20 10:32:47 2007 jofret
+**
+** Copyright INRIA 2006
+*/
+
+#include "testAsin.h"
+
+void sasinsTest(void) {
+ printf(">> Float scalar\n");
+ printf("sasins(0) = %f\n", sasins((float) 0));
+ printf("sasins(PI) = %f\n", sasins(PI));
+ printf("sasins(PI/2) = %f\n", sasins(PI/2));
+ printf("sasins(PI/3) = %f\n", sasins(PI/3));
+ printf("sasins(PI/4) = %f\n", sasins(PI/4));
+ printf("sasins(PI/6) = %f\n", sasins(PI/6));
+ printf("sasins(-PI) = %f\n", sasins(-PI));
+ printf("sasins(-PI/2) = %f\n", sasins(-PI/2));
+ printf("sasins(-PI/3) = %f\n", sasins(-PI/3));
+ printf("sasins(-PI/4) = %f\n", sasins(-PI/4));
+ printf("sasins(-PI/6) = %f\n", sasins(-PI/6));
+}
+
+void dasinsTest(void) {
+ printf(">> Double scalar\n");
+ printf("dasins(0) = %e\n", dasins((double) 0));
+ printf("dasins(PI) = %e\n", dasins(PI));
+ printf("dasins(PI/2) = %e\n", dasins(PI/2));
+ printf("dasins(PI/3) = %e\n", dasins(PI/3));
+ printf("dasins(PI/4) = %e\n", dasins(PI/4));
+ printf("dasins(PI/6) = %e\n", dasins(PI/6));
+ printf("dasins(-PI) = %e\n", dasins(-PI));
+ printf("dasins(-PI/2) = %e\n", dasins(-PI/2));
+ printf("dasins(-PI/3) = %e\n", dasins(-PI/3));
+ printf("dasins(-PI/4) = %e\n", dasins(-PI/4));
+ printf("dasins(-PI/6) = %e\n", dasins(-PI/6));
+}
+
+void casinsTest(void) {
+ floatComplex pi_pi = FloatComplex(PI, PI);
+ floatComplex pi_2_pi_2 = FloatComplex(PI/2, PI/2);
+ floatComplex pi_2_pi_3 = FloatComplex(PI/2, PI/3);
+ floatComplex pi_2_pi_4 = FloatComplex(PI/2, PI/4);
+ floatComplex out;
+
+ printf(">> Float Complex scalar\n");
+ out = casins(pi_pi);
+ printf("casins(PI + I*PI) = %f + I * %f\n", creals(out), cimags(out));
+ out = casins(pi_2_pi_2);
+ printf("casins(PI/2 + I*PI/2) = %f + I * %f\n", creals(out), cimags(out));
+ out = casins(pi_2_pi_3);
+ printf("casins(PI/2 + I*PI/3) = %f + I * %f\n", creals(out), cimags(out));
+ out = casins(pi_2_pi_4);
+ printf("casins(PI/2 + I*PI/4) = %f + I * %f\n", creals(out), cimags(out));
+}
+
+void zasinsTest(void) {
+ doubleComplex pi_pi = DoubleComplex(PI, PI);
+ doubleComplex pi_2_pi_2 = DoubleComplex(PI/2, PI/2);
+ doubleComplex pi_2_pi_3 = DoubleComplex(PI/2, PI/3);
+ doubleComplex pi_2_pi_4 = DoubleComplex(PI/2, PI/4);
+ doubleComplex out;
+
+ printf(">> Double Complex scalar\n");
+ out = zasins(pi_pi);
+ printf("zasins(PI + I*PI) = %e + I * %e\n", zreals(out), zimags(out));
+ out = zasins(pi_2_pi_2);
+ printf("zasins(PI/2 + I*PI/2) = %e + I * %e\n", zreals(out), zimags(out));
+ out = zasins(pi_2_pi_3);
+ printf("zasins(PI/2 + I*PI/3) = %e + I * %e\n", zreals(out), zimags(out));
+ out = zasins(pi_2_pi_4);
+ printf("zasins(PI/2 + I*PI/4) = %e + I * %e\n", zreals(out), zimags(out));
+}
+
+void sasinaTest(void) {
+ float out[5];
+ float in[5] = {PI, PI/2, PI/3, PI/4, PI/6};
+ int i = 0;
+
+ printf(">> Float array\n");
+ sasina(in, out, 5);
+ for (i = 0 ; i < 5 ; ++i)
+ printf("sasina(array) = %f\n", out[i]);
+}
+
+void dasinaTest(void) {
+ double out[5];
+ double in[5] = {PI, PI/2, PI/3, PI/4, PI/6};
+ int i = 0;
+
+ printf(">> Double Array\n");
+ dasina(in, out, 5);
+ for (i = 0 ; i < 5 ; ++i)
+ printf("sasina(array) = %f\n", out[i]);
+
+}
+
+void casinaTest(void) {
+ floatComplex pi_pi = FloatComplex(PI, PI);
+ floatComplex pi_2_pi_2 = FloatComplex(PI/2, PI/2);
+ floatComplex pi_2_pi_3 = FloatComplex(PI/2, PI/3);
+ floatComplex pi_2_pi_4 = FloatComplex(PI/2, PI/4);
+ floatComplex in[4] = {pi_pi, pi_2_pi_2, pi_2_pi_3, pi_2_pi_4};
+ floatComplex out[4];
+ int i = 0;
+
+ casina(in, out, 4);
+ printf(">> Float Complex Array\n");
+ for (i = 0 ; i < 4 ; ++i)
+ printf("casina(array) = %e + I * %e\n", creals(out[i]), cimags(out[i]));
+}
+
+void zasinaTest(void) {
+ doubleComplex pi_pi = DoubleComplex(PI, PI);
+ doubleComplex pi_2_pi_2 = DoubleComplex(PI/2, PI/2);
+ doubleComplex pi_2_pi_3 = DoubleComplex(PI/2, PI/3);
+ doubleComplex pi_2_pi_4 = DoubleComplex(PI/2, PI/4);
+ doubleComplex in[4] = {pi_pi, pi_2_pi_2, pi_2_pi_3, pi_2_pi_4 };
+ doubleComplex out[4];
+ int i = 0;
+
+ zasina(in, out, 4);
+ printf(">> Double Complex Array\n");
+ for (i = 0 ; i < 4 ; ++i)
+ printf("zasina(array) = %e + I * %e\n", zreals(out[i]), zimags(out[i]));
+}
+
+int testAsin(void) {
+ printf("\n>>>> ArcSine Tests\n");
+ sasinsTest();
+ dasinsTest();
+ casinsTest();
+ zasinsTest();
+ sasinaTest();
+ dasinaTest();
+ casinaTest();
+ zasinaTest();
+ return 0;
+}
+
+int main(void) {
+ assert(testAsin() == 0);
+ return 0;
+}
diff --git a/src/elementaryFunctions/asin/testAsin.h b/src/elementaryFunctions/asin/testAsin.h
new file mode 100644
index 00000000..e81b206c
--- /dev/null
+++ b/src/elementaryFunctions/asin/testAsin.h
@@ -0,0 +1,40 @@
+/*
+** -*- C -*-
+**
+** testAsin.h
+** Made by Bruno JOFRET <bruno.jofret@inria.fr>
+**
+** Started on Mon Mar 26 16:33:11 2007 jofret
+** Last update Fri Apr 20 10:33:11 2007 jofret
+**
+** Copyright INRIA 2007
+*/
+
+#ifndef _TESTASIN_H_
+#define _TESTASIN_H_
+
+#include <stdio.h>
+#include <assert.h>
+#include "asin.h"
+#include "constant.h"
+
+
+void sasinsTest(void);
+
+void dasinsTest(void);
+
+void casinsTest(void);
+
+void zasinsTest(void);
+
+void sasinaTest(void);
+
+void dasinaTest(void);
+
+void casinaTest(void);
+
+void zasinaTest(void);
+
+int testAsin(void);
+
+#endif /* ! _TESTASIN_H_ */