From: Roland Schulz Date: Tue, 1 Jul 2014 08:54:42 +0000 (-0400) Subject: Add unit test for random/Threefry X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=74db407d063330ee65dd53bfa363add776f1a744;p=alexxy%2Fgromacs.git Add unit test for random/Threefry Change-Id: I5f9d60c594c0d7a6925b829658119d2fdea5d113 --- diff --git a/src/gromacs/random/CMakeLists.txt b/src/gromacs/random/CMakeLists.txt index 6fb36de7b3..e819cc2ab1 100644 --- a/src/gromacs/random/CMakeLists.txt +++ b/src/gromacs/random/CMakeLists.txt @@ -34,3 +34,6 @@ file(GLOB RANDOM_SOURCES *.c) set(LIBGROMACS_SOURCES ${LIBGROMACS_SOURCES} ${RANDOM_SOURCES} PARENT_SCOPE) +if (BUILD_TESTING) + add_subdirectory(tests) +endif() diff --git a/src/gromacs/random/tests/CMakeLists.txt b/src/gromacs/random/tests/CMakeLists.txt new file mode 100644 index 0000000000..9ccc41f373 --- /dev/null +++ b/src/gromacs/random/tests/CMakeLists.txt @@ -0,0 +1,36 @@ +# +# This file is part of the GROMACS molecular simulation package. +# +# Copyright (c) 2014, by the GROMACS development team, led by +# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, +# and including many others, as listed in the AUTHORS file in the +# top-level source directory and at http://www.gromacs.org. +# +# GROMACS 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.1 +# of the License, or (at your option) any later version. +# +# GROMACS 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 GROMACS; if not, see +# http://www.gnu.org/licenses, or write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# If you want to redistribute modifications to GROMACS, please +# consider that scientific software is very special. Version +# control is crucial - bugs must be traceable. We will be happy to +# consider code for inclusion in the official distribution, but +# derived work must not be called official GROMACS. Details are found +# in the README & COPYING files - if they are missing, get the +# official version at http://www.gromacs.org. +# +# To help us fund GROMACS development, we humbly ask that you cite +# the research papers on the package. Check out http://www.gromacs.org. + +gmx_add_unit_test(RandomUnitTests random-test + random.cpp) diff --git a/src/gromacs/random/tests/random.cpp b/src/gromacs/random/tests/random.cpp new file mode 100644 index 0000000000..835a638011 --- /dev/null +++ b/src/gromacs/random/tests/random.cpp @@ -0,0 +1,88 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2014, by the GROMACS development team, led by + * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, + * and including many others, as listed in the AUTHORS file in the + * top-level source directory and at http://www.gromacs.org. + * + * GROMACS 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.1 + * of the License, or (at your option) any later version. + * + * GROMACS 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 GROMACS; if not, see + * http://www.gnu.org/licenses, or write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * If you want to redistribute modifications to GROMACS, please + * consider that scientific software is very special. Version + * control is crucial - bugs must be traceable. We will be happy to + * consider code for inclusion in the official distribution, but + * derived work must not be called official GROMACS. Details are found + * in the README & COPYING files - if they are missing, get the + * official version at http://www.gromacs.org. + * + * To help us fund GROMACS development, we humbly ask that you cite + * the research papers on the package. Check out http://www.gromacs.org. + */ +/*! \internal \file + * \brief + * Tests utilities for random number generation. + * + * \author Roland Schulz + * \ingroup module_random + */ +#include + +#include + +#include "external/Random123-1.08/include/Random123/threefry.h" + +#include "testutils/refdata.h" + +namespace +{ + +class Threefry : public ::testing::TestWithParam > +{ +}; + +TEST_P(Threefry, 2x64) +{ + gmx::test::TestReferenceData data; + + gmx::test::TestReferenceChecker checker(data.rootChecker()); + + const std::pair input = GetParam(); + + threefry2x64_ctr_t rand = threefry2x64(input.first, input.second); + + checker.checkSequenceArray(2, rand.v, "Threefry2x64"); +} + +//The input values are the same as the ones used by Known Answer Tests (kat) in +//Random123. Reference values agree with those in kat_vectors +/** input value: zero */ +const threefry2x64_ctr_t tf_zero = {{0, 0}}; +/** input value: max unit64 */ +const threefry2x64_ctr_t tf_max = {{std::numeric_limits::max(), + std::numeric_limits::max()}}; +/** input value: Pi */ +const threefry2x64_ctr_t tf_pi1 = {{0x243f6a8885a308d3, 0x13198a2e03707344}}; +/** input value: More Pi */ +const threefry2x64_ctr_t tf_pi2 = {{0xa4093822299f31d0, 0x082efa98ec4e6c89}}; + +INSTANTIATE_TEST_CASE_P(0_ff_pi, Threefry, + ::testing::Values(std::make_pair(tf_zero, tf_zero), + std::make_pair(tf_max, tf_max), + std::make_pair(tf_pi1, tf_pi2))); + +} // namespace diff --git a/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_0.xml b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_0.xml new file mode 100644 index 0000000000..7993aef5ec --- /dev/null +++ b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_0.xml @@ -0,0 +1,9 @@ + + + + + 2 + 14030652003081164901 + 8034964082011408461 + + diff --git a/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_1.xml b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_1.xml new file mode 100644 index 0000000000..8ab9e3821e --- /dev/null +++ b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_1.xml @@ -0,0 +1,9 @@ + + + + + 2 + 16153488019559360378 + 15016746978262092648 + + diff --git a/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_2.xml b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_2.xml new file mode 100644 index 0000000000..f70584c2e8 --- /dev/null +++ b/src/gromacs/random/tests/refdata/0_ff_pi_Threefry_2x64_2.xml @@ -0,0 +1,9 @@ + + + + + 2 + 2755214720294128369 + 6250577789015102758 + +