From ee9e3c5b55294319b996eaaeaf9ee10c4fe1b25d Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 11 May 2021 16:41:03 +0200 Subject: [PATCH] Removed need for munit --- .gitignore | 9 ++- .gitmodules | 3 - Makefile.am | 59 ++++++---------- Makefile.dev.mk | 63 +++++++++++++++++ Makefile.dist.mk | 34 ++++++++++ README.md | 5 +- configure.ac | 23 ------- include/config.h.in | 89 ------------------------ org/qmckl_ao.org | 145 ++++++++++++++++++++-------------------- org/qmckl_context.org | 22 +++--- org/qmckl_distance.org | 13 ++-- org/qmckl_electron.org | 26 +++---- org/qmckl_error.org | 6 +- org/qmckl_memory.org | 36 +++++----- org/qmckl_numprec.org | 6 +- tools/build_makefile.sh | 94 ++++++++++++++------------ tools/config_tangle.el | 5 +- 17 files changed, 304 insertions(+), 334 deletions(-) delete mode 100644 .gitmodules create mode 100644 Makefile.dev.mk create mode 100644 Makefile.dist.mk diff --git a/.gitignore b/.gitignore index 18d9c60..2e94e5e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,12 +5,12 @@ generated.mk stamp-h1 libtool ltmain.sh +missing m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 -missing Makefile aclocal.m4 autom4te.cache/ @@ -21,4 +21,9 @@ config.sub configure install-sh qmckl.pc - +Makefile.in +test-driver +.libs +.dirstamp +*.la +*.lo diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 8ad4907..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "munit"] - path = munit - url = https://github.com/nemequ/munit/ diff --git a/Makefile.am b/Makefile.am index 67a59ee..ab01308 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,7 +38,7 @@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ SUBDIRS = -CLEANFILES = +CLEANFILES = pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = $(srcdir)/qmckl.pc @@ -46,60 +46,39 @@ pkgconfig_DATA = $(srcdir)/qmckl.pc qmckl_h = $(srcdir)/include/qmckl.h include_HEADERS = $(qmckl_h) -qmckl_f = $(srcdir)/share/qmckl/fortran/qmckl_f.f90 +qmckl_f = $(srcdir)/share/qmckl/fortran/qmckl_f.f90 +qmckl_fo = $(srcdir)/share/qmckl/fortran/qmckl_f.$(OBJEXT) +test_qmckl_f = $(srcdir)/tests/qmckl_f.f90 +src_qmckl_f = $(srcdir)/src/qmckl_f.f90 + fortrandir = $(datadir)/$(PACKAGE_NAME)/fortran/ fortran_DATA = $(qmckl_f) -lib_LTLIBRARIES = src/libqmckl.la -src_libqmckl_la_CPPFLAGS = -I$(srcdir)/src -I$(srcdir)/include -src_libqmckl_la_SOURCES = $(qmckl_h) $(qmckl_f) $(C_FILES) $(F_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) +AM_CPPFLAGS = -I$(srcdir)/src -I$(srcdir)/include +lib_LTLIBRARIES = src/libqmckl.la +src_libqmckl_la_SOURCES = $(qmckl_h) $(src_qmckl_f) $(C_FILES) $(F_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) export srcdir qmckl_f qmckl_h +CLEANFILES+=$(test_qmckl_f) -if QMCKL_DEVEL -# <----- -dist_src_DATA = $(ORG_FILES) - -BUILT_SOURCES = $(C_FILES) $(F_FILES) $(FH_FUNC_FILES) $(FH_TYPE_FILES) $(H_FUNC_FILES) $(H_TYPE_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) -CLEANFILES += $(BUILT_SOURCES) $(C_TEST_FILES) $(F_TEST_FILES) $(TANGLED_FILES) $(C_TEST_FILES) $(F_TEST_FILES) - -# -----> -endif - -## Silent - -tangle_verbose = $(tangle_verbose_@AM_V@) -tangle_verbose_ = $(tangle_verbose_@AM_DEFAULT_V@) -tangle_verbose_0 = @echo " TANGLE $<"; - -cat_h_verbose = $(cat_h_verbose_@AM_V@) -cat_h_verbose_ = $(cat_h_verbose_@AM_DEFAULT_V@) -cat_h_verbose_0 = @echo " HEADER $@"; - -## Rules include $(srcdir)/generated.mk -SUFFIXES = .f90 .h .org .c _f.f90 _func.h _type.h _private_func.h _private_type.h +if QMCKL_DEVEL +include Makefile.dev.mk +else +include Makefile.dist.mk +endif $(srcdir)/generated.mk: $(ORG_FILES) $(srcdir)/tools/build_makefile.sh -$(qmckl_h): $(H_FUNC_FILES) $(H_TYPE_FILES) - $(cat_h_verbose)$(srcdir)/tools/build_qmckl_h.sh +$(test_qmckl_f): $(qmckl_f) + cp $(qmckl_f) $(test_qmckl_f) -$(qmckl_f): $(FH_FUNC_FILES) $(FH_TYPE_FILES) - $(cat_h_verbose)$(srcdir)/tools/build_qmckl_f.sh - -$(srcdir)/src/qmckl_f.f90: $(qmckl_f) - cp $(qmckl_f) $(srcdir)/src/qmckl_f.f90 - -#lib_LTLIBRARIES = $(top_srcdir)/src/libqmckl.la -# -#$(top_srcdir)/src/libqmckl.la; -# $(MAKE) -C src libqmckl.la -# +$(src_qmckl_f): $(qmckl_f) + cp $(qmckl_f) $(src_qmckl_f) rpms srcrpm: for dir in $(SUBDIRS); do \ diff --git a/Makefile.dev.mk b/Makefile.dev.mk new file mode 100644 index 0000000..53ec8a6 --- /dev/null +++ b/Makefile.dev.mk @@ -0,0 +1,63 @@ +# QMCkl - Quantum Monte Carlo kernel library +# +# BSD 3-Clause License +# +# Copyright (c) 2020, TREX Center of Excellence +# 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 copyright holder 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 HOLDER 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. + +dist_src_DATA = $(ORG_FILES) + +BUILT_SOURCES = $(C_FILES) $(F_FILES) $(FH_FUNC_FILES) $(FH_TYPE_FILES) $(H_FUNC_FILES) $(H_TYPE_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) $(qmckl_f) $(qmckl_h) +CLEANFILES += $(BUILT_SOURCES) $(C_TEST_FILES) $(F_TEST_FILES) $(TANGLED_FILES) $(C_TEST_FILES) $(F_TEST_FILES) $(qmckl_f) $(qmckl_h) + + +## Silent +## ====== + +tangle_verbose = $(tangle_verbose_@AM_V@) +tangle_verbose_ = $(tangle_verbose_@AM_DEFAULT_V@) +tangle_verbose_0 = @echo " TANGLE $<"; + +cat_h_verbose = $(cat_h_verbose_@AM_V@) +cat_h_verbose_ = $(cat_h_verbose_@AM_DEFAULT_V@) +cat_h_verbose_0 = @echo " HEADER $@"; + + +## Rules +## ===== + +SUFFIXES = .f90 .h .org .c _f.f90 _func.h _type.h _private_func.h _private_type.h + +$(qmckl_h): $(H_FUNC_FILES) $(H_TYPE_FILES) + $(cat_h_verbose)$(srcdir)/tools/build_qmckl_h.sh + +$(qmckl_f): $(FH_FUNC_FILES) $(FH_TYPE_FILES) + $(cat_h_verbose)$(srcdir)/tools/build_qmckl_f.sh + +# vim: syntax=automake noet + diff --git a/Makefile.dist.mk b/Makefile.dist.mk new file mode 100644 index 0000000..05505fc --- /dev/null +++ b/Makefile.dist.mk @@ -0,0 +1,34 @@ +# QMCkl - Quantum Monte Carlo kernel library +# +# BSD 3-Clause License +# +# Copyright (c) 2020, TREX Center of Excellence +# 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 copyright holder 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 HOLDER 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. + +# vim: syntax=automake noet + diff --git a/README.md b/README.md index 757ce6e..278140b 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,8 @@ to read the documentation. To clone the repository, use: ``` -git clone --recursive https://github.com/TREX-CoE/qmckl.git +git clone https://github.com/TREX-CoE/qmckl.git ``` -to dowload also the [munit](https://github.com/nemequ/munit) unit testing -framework. - # Installation diff --git a/configure.ac b/configure.ac index e09075f..5dabe5d 100644 --- a/configure.ac +++ b/configure.ac @@ -193,29 +193,6 @@ if test "x${QMCKL_DEVEL}" != "x"; then HAS_CPPCHECK=1 fi - ## munit - AC_ARG_WITH(munit, [AC_HELP_STRING([--without-munit],[use munit for testing])], ok=yes, ok=no) - if test "$ok" = "no"; then - AC_CHECK_FILE([munit/munit.h], [], - AC_MSG_ERROR([ - ------------------------------------------------- - Error: Git submodule for munit is not downloaded. - $ git submodule update --init - ------------------------------------------------- - ]) ) - else - ARGS="${ARGS} munit" - AC_DEFINE(HAVE_MUNIT,1,[Define when using munit]) - fi - AC_CHECK_HEADERS([fcntl.h langinfo.h limits.h locale.h mach/mach.h sys/time.h]) - AC_TYPE_PID_T - AC_C_INLINE - AC_TYPE_SSIZE_T - AC_FUNC_REALLOC - AC_FUNC_STRERROR_R - AC_FUNC_FORK - AC_CHECK_FUNCS([clock_gettime dup2 gettimeofday nl_langinfo setlocale strcasecmp strtoul]) - fi #PKG-CONFIG diff --git a/include/config.h.in b/include/config.h.in index 935b395..6d33cba 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -12,37 +12,15 @@ /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H -/* Define to 1 if you have the `clock_gettime' function. */ -#undef HAVE_CLOCK_GETTIME - -/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you - don't. */ -#undef HAVE_DECL_STRERROR_R - /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the `dup2' function. */ -#undef HAVE_DUP2 - /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `fork' function. */ -#undef HAVE_FORK - -/* Define to 1 if you have the `gettimeofday' function. */ -#undef HAVE_GETTIMEOFDAY - /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the header file. */ -#undef HAVE_LANGINFO_H - /* Define to 1 if you have the `efence' library (-lefence). */ #undef HAVE_LIBEFENCE @@ -52,15 +30,6 @@ /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LOCALE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MACH_MACH_H - /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC @@ -77,22 +46,9 @@ /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET -/* Define when using munit */ -#undef HAVE_MUNIT - -/* Define to 1 if you have the `nl_langinfo' function. */ -#undef HAVE_NL_LANGINFO - /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H -/* Define to 1 if your system has a GNU libc compatible `realloc' function, - and to 0 otherwise. */ -#undef HAVE_REALLOC - -/* Define to 1 if you have the `setlocale' function. */ -#undef HAVE_SETLOCALE - /* Define to 1 if you have the header file. */ #undef HAVE_STDBOOL_H @@ -105,48 +61,24 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR -/* Define to 1 if you have the `strerror_r' function. */ -#undef HAVE_STRERROR_R - /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strtoul' function. */ -#undef HAVE_STRTOUL - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if you have the `vfork' function. */ -#undef HAVE_VFORK - -/* Define to 1 if you have the header file. */ -#undef HAVE_VFORK_H - -/* Define to 1 if `fork' works. */ -#undef HAVE_WORKING_FORK - -/* Define to 1 if `vfork' works. */ -#undef HAVE_WORKING_VFORK - /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL @@ -192,9 +124,6 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS -/* Define to 1 if strerror_r returns char *. */ -#undef STRERROR_R_CHAR_P - /* Version number of package */ #undef VERSION @@ -208,12 +137,6 @@ #define below would cause a syntax error. */ #undef _UINT64_T -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t @@ -225,18 +148,9 @@ /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc -/* Define to `int' if does not define. */ -#undef pid_t - -/* Define to rpl_realloc if the replacement function should be used. */ -#undef realloc - /* Define to `unsigned int' if does not define. */ #undef size_t -/* Define to `int' if does not define. */ -#undef ssize_t - /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t @@ -244,6 +158,3 @@ /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t - -/* Define as `fork' if `vfork' does not work. */ -#undef vfork diff --git a/org/qmckl_ao.org b/org/qmckl_ao.org index fcd73a1..906bf17 100644 --- a/org/qmckl_ao.org +++ b/org/qmckl_ao.org @@ -48,14 +48,14 @@ gradients and Laplacian of the atomic basis functions. #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H -#include +#include "config.h" #endif -MunitResult test_<>() { - qmckl_context context; - context = qmckl_context_create(); +int main() { + qmckl_context context; + context = qmckl_context_create(); #+end_src #+begin_src c :tangle (eval c) @@ -795,85 +795,85 @@ qmckl_exit_code qmckl_set_ao_basis_coefficient(qmckl_context context, const dou ** Test :noexport: #+begin_src c :tangle (eval c_test) :exports none :exports none -/* Reference input data */ + /* Reference input data */ -char typ = 'G'; -#define shell_num ((int64_t) 12) -#define prim_num ((int64_t) 20) + char typ = 'G'; + #define shell_num ((int64_t) 12) + #define prim_num ((int64_t) 20) -int64_t shell_center [shell_num] = - { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2 }; + int64_t shell_center [shell_num] = + { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2 }; -char shell_ang_mom [shell_num] = - { 'S', 'S', 'S', 'P', 'P', 'D', 'S', 'S', 'S', 'P', 'P', 'D' }; + char shell_ang_mom [shell_num] = + { 'S', 'S', 'S', 'P', 'P', 'D', 'S', 'S', 'S', 'P', 'P', 'D' }; -double shell_factor [shell_num] = - { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; + double shell_factor [shell_num] = + { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; -int64_t shell_prim_num [shell_num] = - {5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1}; + int64_t shell_prim_num [shell_num] = + {5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1}; -int64_t shell_prim_index [shell_num] = - {1, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20}; + int64_t shell_prim_index [shell_num] = + {1, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20}; -double exponent [prim_num] = - { 33.87, 5.095, 1.159, 0.3258, 0.1027, 0.3258, 0.1027, - 1.407, 0.388, 1.057, 33.87, 5.095, 1.159, 0.3258, 0.1027, - 0.3258, 0.1027, 1.407, 0.388, 1.057 }; + double exponent [prim_num] = + { 33.87, 5.095, 1.159, 0.3258, 0.1027, 0.3258, 0.1027, + 1.407, 0.388, 1.057, 33.87, 5.095, 1.159, 0.3258, 0.1027, + 0.3258, 0.1027, 1.407, 0.388, 1.057 }; -double coefficient [prim_num] = - { 0.006068, 0.045308, 0.202822, 0.503903, 0.383421, - 1.0, 1.0, 1.0, 1.0, 1.0, 0.006068, 0.045308, 0.202822, - 0.503903, 0.383421, 1.0, 1.0, 1.0, 1.0, 1.0 }; -/* --- */ + double coefficient [prim_num] = + { 0.006068, 0.045308, 0.202822, 0.503903, 0.383421, + 1.0, 1.0, 1.0, 1.0, 1.0, 0.006068, 0.045308, 0.202822, + 0.503903, 0.383421, 1.0, 1.0, 1.0, 1.0, 1.0 }; + /* --- */ -qmckl_exit_code rc; + qmckl_exit_code rc; -munit_assert(!qmckl_ao_basis_provided(context)); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_type (context, typ); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_type (context, typ); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_num (context, shell_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_num (context, shell_num); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_prim_num (context, prim_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_prim_num (context, prim_num); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_center (context, shell_center); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_center (context, shell_center); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_ang_mom (context, shell_ang_mom); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_ang_mom (context, shell_ang_mom); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_factor (context, shell_factor); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_factor (context, shell_factor); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_center (context, shell_prim_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_center (context, shell_prim_num); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_prim_num (context, shell_prim_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_prim_num (context, shell_prim_num); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_shell_prim_index (context, shell_prim_index); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_shell_prim_index (context, shell_prim_index); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_exponent (context, exponent); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_exponent (context, exponent); + assert(rc == QMCKL_SUCCESS); + assert(!qmckl_ao_basis_provided(context)); -rc = qmckl_set_ao_basis_coefficient (context, coefficient); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(qmckl_ao_basis_provided(context)); + rc = qmckl_set_ao_basis_coefficient (context, coefficient); + assert(rc == QMCKL_SUCCESS); + assert(qmckl_ao_basis_provided(context)); #+end_src @@ -1070,8 +1070,8 @@ end function test_qmckl_ao_power #+end_src #+begin_src c :tangle (eval c_test) :exports none -int test_qmckl_ao_power(qmckl_context context); -munit_assert_int(0, ==, test_qmckl_ao_power(context)); + int test_qmckl_ao_power(qmckl_context context); + assert(0 == test_qmckl_ao_power(context)); #+end_src ** Value, Gradient and Laplacian of a polynomial @@ -1446,8 +1446,8 @@ end function test_qmckl_ao_polynomial_vgl #+end_src #+begin_src c :tangle (eval c_test) -int test_qmckl_ao_polynomial_vgl(qmckl_context context); -munit_assert_int(0, ==, test_qmckl_ao_polynomial_vgl(context)); + int test_qmckl_ao_polynomial_vgl(qmckl_context context); + assert(0 == test_qmckl_ao_polynomial_vgl(context)); #+end_src * Radial part @@ -1656,8 +1656,8 @@ end function test_qmckl_ao_gaussian_vgl #+end_src #+begin_src c :tangle (eval c_test) :exports none -int test_qmckl_ao_gaussian_vgl(qmckl_context context); -munit_assert_int(0, ==, test_qmckl_ao_gaussian_vgl(context)); + int test_qmckl_ao_gaussian_vgl(qmckl_context context); + assert(0 == test_qmckl_ao_gaussian_vgl(context)); #+end_src ** TODO Slater basis functions @@ -1672,9 +1672,10 @@ munit_assert_int(0, ==, test_qmckl_ao_gaussian_vgl(context)); *** Test #+begin_src c :tangle (eval c_test) - if (qmckl_context_destroy(context) != QMCKL_SUCCESS) - return QMCKL_FAILURE; - return MUNIT_OK; + rc = qmckl_context_destroy(context); + assert (rc == QMCKL_SUCCESS); + + return 0; } #+end_src diff --git a/org/qmckl_context.org b/org/qmckl_context.org index 51f2257..057129f 100644 --- a/org/qmckl_context.org +++ b/org/qmckl_context.org @@ -6,11 +6,11 @@ #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif -MunitResult test_<>() { +int main() { #+end_src #+begin_src c :tangle (eval h_private_type) :noweb yes @@ -253,11 +253,11 @@ qmckl_context qmckl_context_create() { # Test #+begin_src c :comments link :tangle (eval c_test) :exports none -munit_assert_int64( qmckl_context_check(QMCKL_NULL_CONTEXT), ==, QMCKL_NULL_CONTEXT); +assert( qmckl_context_check(QMCKL_NULL_CONTEXT) == QMCKL_NULL_CONTEXT); qmckl_context context = qmckl_context_create(); -munit_assert_int64( context, !=, QMCKL_NULL_CONTEXT ); -munit_assert_int64( qmckl_context_check(context), ==, context ); +assert( context != QMCKL_NULL_CONTEXT ); +assert( qmckl_context_check(context) == context ); #+end_src ** Locking @@ -445,15 +445,15 @@ qmckl_exit_code qmckl_context_destroy(const qmckl_context context) { # Test #+begin_src c :tangle (eval c_test) :exports none /* Destroy valid context */ -munit_assert_int64(qmckl_context_check(context), ==, context); -munit_assert_int32(qmckl_context_destroy(context), ==, QMCKL_SUCCESS); +assert(qmckl_context_check(context) == context); +assert(qmckl_context_destroy(context) == QMCKL_SUCCESS); /* Check that context is destroyed */ -munit_assert_int64(qmckl_context_check(context), !=, context); -munit_assert_int64(qmckl_context_check(context), ==, QMCKL_NULL_CONTEXT); +assert(qmckl_context_check(context) != context); +assert(qmckl_context_check(context) == QMCKL_NULL_CONTEXT); /* Destroy invalid context */ -munit_assert_int32(qmckl_context_destroy(QMCKL_NULL_CONTEXT), ==, QMCKL_INVALID_CONTEXT); +assert(qmckl_context_destroy(QMCKL_NULL_CONTEXT) == QMCKL_INVALID_CONTEXT); #+end_src * End of files :noexport: @@ -465,7 +465,7 @@ munit_assert_int32(qmckl_context_destroy(QMCKL_NULL_CONTEXT), ==, QMCKL_INVALID_ *** Test #+begin_src c :comments link :tangle (eval c_test) -return MUNIT_OK; +return 0; } #+end_src diff --git a/org/qmckl_distance.org b/org/qmckl_distance.org index 5a8b9f1..e565c94 100644 --- a/org/qmckl_distance.org +++ b/org/qmckl_distance.org @@ -11,11 +11,11 @@ Functions for the computation of distances between particles. #+begin_src c :comments link :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif -MunitResult test_<>() { +int main() { qmckl_context context; context = qmckl_context_create(); @@ -393,7 +393,7 @@ end function test_qmckl_distance_sq #+begin_src c :comments link :tangle (eval c_test) int test_qmckl_distance_sq(qmckl_context context); -munit_assert_int(0, ==, test_qmckl_distance_sq(context)); +assert(0 == test_qmckl_distance_sq(context)); #+end_src * Distance @@ -771,14 +771,13 @@ end function test_qmckl_dist #+begin_src c :comments link :tangle (eval c_test) int test_qmckl_dist(qmckl_context context); -munit_assert_int(0, ==, test_qmckl_dist(context)); +assert(0 == test_qmckl_dist(context)); #+end_src * End of files :noexport: #+begin_src c :comments link :tangle (eval c_test) - if (qmckl_context_destroy(context) != QMCKL_SUCCESS) - return QMCKL_FAILURE; - return MUNIT_OK; + assert (qmckl_context_destroy(context) == QMCKL_SUCCESS); + return 0; } #+end_src diff --git a/org/qmckl_electron.org b/org/qmckl_electron.org index 736a16d..3fac9aa 100644 --- a/org/qmckl_electron.org +++ b/org/qmckl_electron.org @@ -20,11 +20,11 @@ up-spin and down-spin electrons, and the electron coordinates. #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif -MunitResult test_<>() { +int main() { qmckl_context context; context = qmckl_context_create(); #+end_src @@ -399,18 +399,18 @@ double coord[walk_num*3*num] = qmckl_exit_code rc; -munit_assert(!qmckl_electron_provided(context)); +assert(!qmckl_electron_provided(context)); rc = qmckl_set_electron_num (context, up_num, down_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(!qmckl_electron_provided(context)); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_electron_provided(context)); rc = qmckl_set_electron_walk_num (context, walk_num); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); -munit_assert(qmckl_electron_provided(context)); +assert(rc == QMCKL_SUCCESS); +assert(qmckl_electron_provided(context)); rc = qmckl_set_electron_coord (context, coord); -munit_assert_int64(rc, ==, QMCKL_SUCCESS); +assert(rc == QMCKL_SUCCESS); #+end_src @@ -603,14 +603,14 @@ end function qmckl_compute_ee_distance_f #+begin_src c :tangle (eval c_test) /* Reference input data */ -munit_assert(qmckl_electron_provided(context)); +assert(qmckl_electron_provided(context)); double distance[walk_num*num*num]; rc = qmckl_get_electron_ee_distance(context, distance); rc = qmckl_get_electron_ee_distance(context, distance); -munit_assert_double(distance[0], ==, 0.); -munit_assert_double(distance[1], ==, distance[num]); -munit_assert_double_equal(distance[1], 8.6114953086801, 12); +assert(distance[0] == 0.); +assert(distance[1] == distance[num]); +assert(abs(distance[1]-8.6114953086801) < 1.e-12); #+end_src @@ -624,7 +624,7 @@ munit_assert_double_equal(distance[1], 8.6114953086801, 12); #+begin_src c :tangle (eval c_test) if (qmckl_context_destroy(context) != QMCKL_SUCCESS) return QMCKL_FAILURE; - return MUNIT_OK; + return 0; } #+end_src diff --git a/org/qmckl_error.org b/org/qmckl_error.org index 05aa0a2..2a80783 100644 --- a/org/qmckl_error.org +++ b/org/qmckl_error.org @@ -31,11 +31,11 @@ #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif -MunitResult test_<>() { +int main() { #+end_src #+end_src @@ -360,7 +360,7 @@ if (x < 0) { ** Test #+begin_src c :comments link :tangle (eval c_test) -return MUNIT_OK; +return 0; } #+end_src diff --git a/org/qmckl_memory.org b/org/qmckl_memory.org index bd0be82..8212d6b 100644 --- a/org/qmckl_memory.org +++ b/org/qmckl_memory.org @@ -31,13 +31,13 @@ optimized libraries to fine-tune the memory allocation. #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "qmckl_context_private_type.h" #include "qmckl_memory_private_func.h" -MunitResult test_<>() { +int main() { #+end_src @@ -170,19 +170,19 @@ info.size = (size_t) 3; int *a = (int*) qmckl_malloc(context, info); /* Check that array of ints is OK */ -munit_assert(a != NULL); -a[0] = 1; munit_assert_int(a[0], ==, 1); -a[1] = 2; munit_assert_int(a[1], ==, 2); -a[2] = 3; munit_assert_int(a[2], ==, 3); +assert(a != NULL); +a[0] = 1; assert(a[0] == 1); +a[1] = 2; assert(a[1] == 2); +a[2] = 3; assert(a[2] == 3); /* Allocate another array of ints */ int *b = (int*) qmckl_malloc(context, info); /* Check that array of ints is OK */ -munit_assert(b != NULL); -b[0] = 1; munit_assert_int(b[0], ==, 1); -b[1] = 2; munit_assert_int(b[1], ==, 2); -b[2] = 3; munit_assert_int(b[2], ==, 3); +assert(b != NULL); +b[0] = 1; assert(b[0] == 1); +b[1] = 2; assert(b[1] == 2); +b[2] = 3; assert(b[2] == 3); #+end_src When freeing the memory with ~qmckl_free~, the context is passed, in @@ -246,28 +246,28 @@ qmckl_exit_code qmckl_free(qmckl_context context, void * const ptr) { #+begin_src c :tangle (eval c_test) :exports none qmckl_exit_code rc; /* Assert that both arrays are allocated */ -munit_assert(a != NULL); -munit_assert(b != NULL); +assert(a != NULL); +assert(b != NULL); /* Free in NULL context */ rc = qmckl_free(QMCKL_NULL_CONTEXT, a); -munit_assert(rc == QMCKL_INVALID_CONTEXT); +assert(rc == QMCKL_INVALID_CONTEXT); /* Free NULL pointer */ rc = qmckl_free(context, NULL); -munit_assert(rc == QMCKL_INVALID_ARG_2); +assert(rc == QMCKL_INVALID_ARG_2); /* Free for the first time */ rc = qmckl_free(context, a); -munit_assert(rc == QMCKL_SUCCESS); +assert(rc == QMCKL_SUCCESS); /* Free again */ rc = qmckl_free(context, a); -munit_assert(rc == QMCKL_FAILURE); +assert(rc == QMCKL_FAILURE); /* Clean up */ rc = qmckl_context_destroy(context); -munit_assert(rc == QMCKL_SUCCESS); +assert(rc == QMCKL_SUCCESS); #+end_src @@ -279,7 +279,7 @@ munit_assert(rc == QMCKL_SUCCESS); #+end_src ** Test #+begin_src c :comments org :tangle (eval c_test) - return MUNIT_OK; + return 0; } #+end_src diff --git a/org/qmckl_numprec.org b/org/qmckl_numprec.org index df5a00b..9ca8104 100644 --- a/org/qmckl_numprec.org +++ b/org/qmckl_numprec.org @@ -6,11 +6,11 @@ #+begin_src c :tangle (eval c_test) :noweb yes #include "qmckl.h" -#include "munit.h" +#include "assert.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif -MunitResult test_<>() { +int main() { #+end_src #+begin_src c :tangle (eval h_private_type) @@ -327,7 +327,7 @@ double qmckl_get_numprec_epsilon(const qmckl_context context) { *** Test #+begin_src c :comments link :tangle (eval c_test) -return MUNIT_OK; +return 0; } #+end_src diff --git a/tools/build_makefile.sh b/tools/build_makefile.sh index 1b43e36..bf0e546 100755 --- a/tools/build_makefile.sh +++ b/tools/build_makefile.sh @@ -15,7 +15,7 @@ function make_src() cd ${srcdir} - declare -A DEPS DEPS_ORG DEPS_TEST + declare -A DEPS DEPS_ORG DEPS_TEST TESTS C_FILES= F_FILES= @@ -29,15 +29,14 @@ function make_src() F_TEST_FILES= TANGLED_FILES= - qmckl_f=" \$(srcdir)/src/qmckl_f.o" - for org in org/*.org ; do i=$(basename ${org%.org}) tangled="\$(srcdir)/org/${i}.tangled" - c_test_o="\$(srcdir)/src/test_${i}.o" - f_test_o="\$(srcdir)/src/test_${i}_f.o" - c_test="\$(srcdir)/src/test_${i}.c" - f_test="\$(srcdir)/src/test_${i}_f.f90" + c_test_x="\$(srcdir)/tests/test_${i}" + c_test_o="\$(srcdir)/tests/test_${i}.o" + f_test_o="\$(srcdir)/tests/test_${i}_f.o" + c_test="\$(srcdir)/tests/test_${i}.c" + f_test="\$(srcdir)/tests/test_${i}_f.f90" i="\$(srcdir)/src/${i}" @@ -93,7 +92,7 @@ function make_src() grep -q "(eval f)" $org if [[ $? -eq 0 ]] ; then DEPS[$f90]+="$tangled " - DEPS[$fo]+="$f90 \$(qmckl_f)" + DEPS[$fo]+="$f90 \$(qmckl_fo)" F_FILES+=" $f90" fi @@ -112,64 +111,71 @@ function make_src() grep -q "(eval c_test)" $org if [[ $? -eq 0 ]] ; then DEPS_TEST["${c_test}"]="${tangled} " - DEPS_TEST["${c_test_o}"]+=" ${c_test} $o \$(qmckl_h)" C_TEST_FILES+=" ${c_test}" + TESTS["${c_test_x}"]+="${c_test} \$(qmckl_h)" fi grep -q "(eval f_test)" $org if [[ $? -eq 0 ]] ; then DEPS_TEST["${f_test}"]+="${tangled} " - DEPS_TEST["${f_test_o}"]+=" ${f_test} $fo \$(qmckl_f)" F_TEST_FILES+=" ${f_test}" + TESTS["${c_test_x}"]+=" ${f_test} \$(test_qmckl_f)" fi done - OUTPUT=${WD}/generated.mk - echo > ${OUTPUT} - echo "## Source files" > ${OUTPUT} - echo >> ${OUTPUT} - echo "ORG_FILES=${ORG_FILES}" >> ${OUTPUT} - echo "TANGLED_FILES=${TANGLED_FILES}" >> ${OUTPUT} - echo "C_FILES=${C_FILES}" >> ${OUTPUT} - echo "F_FILES=${F_FILES}" >> ${OUTPUT} - echo "C_O_FILES=${C_O_FILES}" >> ${OUTPUT} - echo "F_O_FILES=${F_O_FILES}" >> ${OUTPUT} - echo "FH_FUNC_FILES=${FH_FUNC_FILES}" >> ${OUTPUT} - echo "FH_TYPE_FILES=${FH_TYPE_FILES}" >> ${OUTPUT} - echo "H_FUNC_FILES=${H_FUNC_FILES}" >> ${OUTPUT} - echo "H_TYPE_FILES=${H_TYPE_FILES}" >> ${OUTPUT} - echo "H_PRIVATE_FUNC_FILES=${H_PRIVATE_FUNC_FILES}" >> ${OUTPUT} - echo "H_PRIVATE_TYPE_FILES=${H_PRIVATE_TYPE_FILES}" >> ${OUTPUT} - echo "C_TEST_FILES=${C_TEST_FILES}" >> ${OUTPUT} - echo "F_TEST_FILES=${F_TEST_FILES}" >> ${OUTPUT} - echo >> ${OUTPUT} + echo + echo "## Source files" + echo + echo "ORG_FILES=${ORG_FILES}" + echo "TANGLED_FILES=${TANGLED_FILES}" + echo "C_FILES=${C_FILES}" + echo "F_FILES=${F_FILES}" + echo "C_O_FILES=${C_O_FILES}" + echo "F_O_FILES=${F_O_FILES}" + echo "FH_FUNC_FILES=${FH_FUNC_FILES}" + echo "FH_TYPE_FILES=${FH_TYPE_FILES}" + echo "H_FUNC_FILES=${H_FUNC_FILES}" + echo "H_TYPE_FILES=${H_TYPE_FILES}" + echo "H_PRIVATE_FUNC_FILES=${H_PRIVATE_FUNC_FILES}" + echo "H_PRIVATE_TYPE_FILES=${H_PRIVATE_TYPE_FILES}" + echo "C_TEST_FILES=${C_TEST_FILES}" + echo "F_TEST_FILES=${F_TEST_FILES}" + echo "TESTS=${!TESTS[@]}" | sed "s|\$(srcdir)/||g" + echo - echo >> ${OUTPUT} - echo "## Org-mode inherited dependencies" >> ${OUTPUT} - echo >> ${OUTPUT} + echo + echo "## Org-mode inherited dependencies" + echo for f in ${!DEPS_ORG[@]} ; do echo ${DEPS_ORG[$f]}: $f echo " \$(tangle_verbose)\$(srcdir)/tools/tangle.sh $f" echo "" - done >> ${OUTPUT} - echo >> ${OUTPUT} + done + echo - echo >> ${OUTPUT} - echo "## Source dependencies" >> ${OUTPUT} - echo >> ${OUTPUT} + echo + echo "## Source dependencies" + echo for f in ${!DEPS[@]} ; do echo "${f}: ${DEPS[$f]}" - done | sort >> ${OUTPUT} + done | sort - echo >> ${OUTPUT} - echo "## Test files" >> ${OUTPUT} - echo >> ${OUTPUT} + echo + echo "## Test files" + echo for f in ${!DEPS_TEST[@]} ; do - echo "${f}: ${DEPS_TEST[$f]} \$(qmckl_h) \$(srcdir)/src/libqmckl.la" - done | sort >> ${OUTPUT} + echo "${f}: ${DEPS_TEST[$f]}" + done | sort + echo + echo "check_PROGRAMS = \$(TESTS)" + for f in ${!TESTS[@]} ; do + echo "tests_$(basename $f)_SOURCES = ${TESTS[$f]}" #| sed "s|\$(srcdir)/||" + echo "tests_$(basename $f)_LDADD = src/libqmckl.la" + done | sort } -make_src +OUTPUT=${WD}/generated.mk +make_src > ${OUTPUT} diff --git a/tools/config_tangle.el b/tools/config_tangle.el index acea6b2..542715f 100755 --- a/tools/config_tangle.el +++ b/tools/config_tangle.el @@ -35,6 +35,7 @@ ; The following is required to compute the file names (setq pwd (file-name-directory buffer-file-name)) (setq wd (concat pwd "/../src/")) +(setq td (concat pwd "/../tests/")) (setq name (file-name-nondirectory (substring buffer-file-name 0 -4))) (setq f (concat wd name "_f.f90")) (setq fh_func (concat wd name "_fh_func.f90")) @@ -44,7 +45,7 @@ (setq h_type (concat wd name "_type.h")) (setq h_private_type (concat wd name "_private_type.h")) (setq h_private_func (concat wd name "_private_func.h")) -(setq c_test (concat wd "test_" name ".c")) -(setq f_test (concat wd "test_" name "_f.f90")) +(setq c_test (concat td "test_" name ".c")) +(setq f_test (concat td "test_" name "_f.f90")) (org-babel-lob-ingest "../tools/lib.org")