diff --git a/Makefile b/Makefile index d14733e99..8eb89ed87 100644 --- 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 diff --git a/Makefile.rule b/Makefile.rule index eddedfede..ecafe0cdc 100644 --- a/Makefile.rule +++ b/Makefile.rule @@ -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 diff --git a/Makefile.system b/Makefile.system index c4379cca4..5a129732f 100644 --- a/Makefile.system +++ b/Makefile.system @@ -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 diff --git a/common_reference.h b/common_reference.h index e69de29bb..d4dca859e 100644 --- a/common_reference.h +++ b/common_reference.h @@ -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 index 000000000..8b65a8d9d --- /dev/null +++ b/utest/Makefile @@ -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 index 000000000..7d43b1811 --- /dev/null +++ b/utest/common_utest.h @@ -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 + +#include + +#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 index 000000000..aac243eb9 --- /dev/null +++ b/utest/main.c @@ -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 +#include + + +#include "common_utest.h" +#include + +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 index 000000000..d02a137dd --- /dev/null +++ b/utest/test_rot.c @@ -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