Added utest frame using CUnit(http://cunit.sourceforge.net/).
authorXianyi Zhang <xianyi@iscas.ac.cn>
Wed, 16 Feb 2011 09:33:06 +0000 (17:33 +0800)
committerXianyi Zhang <xianyi@iscas.ac.cn>
Wed, 16 Feb 2011 09:33:06 +0000 (17:33 +0800)
Makefile
Makefile.rule
Makefile.system
common_reference.h
utest/Makefile [new file with mode: 0644]
utest/common_utest.h [new file with mode: 0644]
utest/main.c [new file with mode: 0644]
utest/test_rot.c [new file with mode: 0644]

index d14733e..8eb89ed 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,13 +7,17 @@ ifndef DYNAMIC_ARCH
 BLASDIRS += kernel 
 endif
 
+ifdef UTEST_CHECK
+SANITY_CHECK = 1
+endif
+
 ifdef SANITY_CHECK
 BLASDIRS += reference
 endif
 
 SUBDIRS        = $(BLASDIRS) lapack
 
-SUBDIRS_ALL = $(SUBDIRS) test ctest exports benchmark ../laswp ../bench
+SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
 
 .PHONY : all libs netlib test ctest shared
 .NOTPARALLEL : all libs prof lapack-test
@@ -77,6 +81,9 @@ ifndef CROSS
        touch $(LIBNAME)
 ifndef NO_FBLAS
        $(MAKE) -C test all
+ifdef UTEST_CHECK
+       $(MAKE) -C utest all
+endif
 endif
 ifndef NO_CBLAS
        $(MAKE) -C ctest all
index eddedfe..ecafe0c 100644 (file)
@@ -84,6 +84,10 @@ VERSION = 0.1
 # slow (Not implemented yet).
 # SANITY_CHECK = 1
 
+# Run testcases in utest/ . When you enable UTEST_CHECK, it would enable
+# SANITY_CHECK to compare the result with reference BLAS.
+# UTEST_CHECK = 1
+
 # Common Optimization Flag; -O2 is enough.
 COMMON_OPT += -O2
 
index c4379cc..5a12973 100644 (file)
@@ -141,6 +141,11 @@ NO_EXPRECISION = 1
 endif
 endif
 
+ifdef UTEST_CHECK
+CCOMMON_OPT    += -DUTEST_CHECK
+SANITY_CHECK = 1
+endif
+
 ifdef SANITY_CHECK
 CCOMMON_OPT    += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
 endif
index e69de29..d4dca85 100644 (file)
@@ -0,0 +1,46 @@
+/*****************************************************************************
+Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the ISCAS nor the names of its contributors may 
+      be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+**********************************************************************************/
+#ifndef ASSEMBLER
+
+#define REF_BU f
+#define BLASFUNC_REF_2(x,y) BLASFUNC(x## y)
+#define BLASFUNC_REF_1(x,y) BLASFUNC_REF_2(x,y)
+#define BLASFUNC_REF(x) BLASFUNC_REF_1(x,REF_BU)
+
+void  BLASFUNC_REF(srot)  (blasint *, float  *, blasint *, float  *, blasint *, float  *, float  *);
+void  BLASFUNC_REF(drot)  (blasint *, double *, blasint *, double *, blasint *, double *, double *);
+void  BLASFUNC_REF(qrot)  (blasint *, xdouble *, blasint *, xdouble *, blasint *, xdouble *, xdouble *);
+void  BLASFUNC_REF(csrot) (blasint *, float  *, blasint *, float  *, blasint *, float  *, float  *);
+void  BLASFUNC_REF(zdrot) (blasint *, double *, blasint *, double *, blasint *, double *, double *);
+void  BLASFUNC_REF(xqrot) (blasint *, xdouble *, blasint *, xdouble *, blasint *, xdouble *, xdouble *);
+
+#endif
diff --git a/utest/Makefile b/utest/Makefile
new file mode 100644 (file)
index 0000000..8b65a8d
--- /dev/null
@@ -0,0 +1,22 @@
+UTEST_CHECK = 1
+TOPDIR = ..
+include $(TOPDIR)/Makefile.system
+
+TARGET=openblas_utest
+CUNIT_LIB=/usr/local/lib/libcunit.a
+
+OBJS=main.o test_rot.o
+
+all : run_test
+
+$(TARGET): $(OBJS)
+       $(CC) -o $@ $^ ../$(LIBNAME) $(CUNIT_LIB)
+
+run_test: $(TARGET)
+       ./$(TARGET)
+
+clean:
+       rm -f *.o $(TARGET)
+
+libs:
+
diff --git a/utest/common_utest.h b/utest/common_utest.h
new file mode 100644 (file)
index 0000000..7d43b18
--- /dev/null
@@ -0,0 +1,44 @@
+/*****************************************************************************
+Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the ISCAS nor the names of its contributors may 
+      be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+**********************************************************************************/
+
+#ifndef COMMON_UTEST_H_
+#define COMMON_UTEST_H_
+#include <CUnit/CUnit.h>
+
+#include <common.h>
+
+#define CHECK_EPS 0.0002
+
+//Testcase list
+void test_drot_incx_0(void);
+
+#endif
diff --git a/utest/main.c b/utest/main.c
new file mode 100644 (file)
index 0000000..aac243e
--- /dev/null
@@ -0,0 +1,78 @@
+/*****************************************************************************
+Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the ISCAS nor the names of its contributors may 
+      be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+**********************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+
+
+#include "common_utest.h"
+#include <CUnit/Basic.h>
+
+CU_TestInfo test_level1[]={
+       {"Testing drot when incx & incy == 0",test_drot_incx_0},
+       CU_TEST_INFO_NULL,
+};
+
+CU_SuiteInfo suites[]={
+       {"Level1 Test Suite", NULL,NULL,test_level1},
+       CU_SUITE_INFO_NULL,
+};
+
+int main()
+{
+       CU_ErrorCode error;
+       if (CUE_SUCCESS != CU_initialize_registry())
+               return CU_get_error();
+       
+       error=CU_register_suites(suites);
+       
+       if (error != CUE_SUCCESS) {
+               perror(CU_get_error_msg());
+               CU_cleanup_registry();
+               return CU_get_error();
+               
+       }
+       
+
+       
+
+       /* Run all tests using the CUnit Basic interface */
+       CU_basic_set_mode(CU_BRM_VERBOSE);
+       
+       CU_basic_run_tests();
+       
+       CU_cleanup_registry();
+       
+       return CU_get_error();
+       
+}
+
diff --git a/utest/test_rot.c b/utest/test_rot.c
new file mode 100644 (file)
index 0000000..d02a137
--- /dev/null
@@ -0,0 +1,54 @@
+/*****************************************************************************
+Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the ISCAS nor the names of its contributors may 
+      be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+**********************************************************************************/
+
+#include "common_utest.h"
+
+void test_drot_incx_0(void)
+{
+       int i;
+       int N=4,incX=0,incY=0;
+       double c=0.25,s=0.5;
+       double x1[]={1.0,3.0,5.0,7.0};
+       double y1[]={2.0,4.0,6.0,8.0};
+       double x2[]={1.0,3.0,5.0,7.0};
+       double y2[]={2.0,4.0,6.0,8.0};
+
+       //OpenBLAS
+       drot_(&N,x1,&incX,y1,&incY,&c,&s);
+       //reference
+       drotf_(&N,x2,&incX,y2,&incY,&c,&s);
+
+       for(i=0; i<N; i++){
+               CU_ASSERT_DOUBLE_EQUAL(x1[i], x2[i], CHECK_EPS);
+               CU_ASSERT_DOUBLE_EQUAL(y1[i], y2[i], CHECK_EPS);
+       }
+}