From 5f98e8ab3f2c393190b4ef137d0df076bd3d7876 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Wed, 28 Jul 2021 18:23:46 -0600 Subject: [PATCH] Add tests. --- tests/base/aligned_vector_replicate_05.cc | 73 ++++++++++++++++++ ...ligned_vector_replicate_05.mpirun=3.output | 8 ++ tests/base/aligned_vector_replicate_06.cc | 74 +++++++++++++++++++ ...ligned_vector_replicate_06.mpirun=3.output | 8 ++ tests/base/aligned_vector_replicate_07.cc | 74 +++++++++++++++++++ ...ligned_vector_replicate_07.mpirun=3.output | 8 ++ 6 files changed, 245 insertions(+) create mode 100644 tests/base/aligned_vector_replicate_05.cc create mode 100644 tests/base/aligned_vector_replicate_05.mpirun=3.output create mode 100644 tests/base/aligned_vector_replicate_06.cc create mode 100644 tests/base/aligned_vector_replicate_06.mpirun=3.output create mode 100644 tests/base/aligned_vector_replicate_07.cc create mode 100644 tests/base/aligned_vector_replicate_07.mpirun=3.output diff --git a/tests/base/aligned_vector_replicate_05.cc b/tests/base/aligned_vector_replicate_05.cc new file mode 100644 index 0000000000..4b45c74aad --- /dev/null +++ b/tests/base/aligned_vector_replicate_05.cc @@ -0,0 +1,73 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2012 - 2021 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, 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. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +// Test AlignedVector::replicate_across_communicator(). This variation +// of the _03 test checks that we can move a replicated object and +// that the moved-to object inherits the shared memory window and all +// other information. This tests uses move-construction. + +#include + +#include "../tests.h" + + +void +test(const unsigned int root) +{ + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << root << " of " << Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD) + << ": "; + + AlignedVector avec(1000); + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + { + unsigned int counter = 0; + for (auto &i : avec) + i = counter++; + } + + avec.replicate_across_communicator(MPI_COMM_WORLD, root); + + // Move avec + AlignedVector xvec(std::move(avec)); + { + unsigned int counter = 0; + + for (auto &i : xvec) + { + AssertDimension(i, counter); + ++counter; + } + } + + MPI_Barrier(MPI_COMM_WORLD); + + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << "OK!" << std::endl; +} + + + +int +main(int argc, char **argv) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1); + MPILogInitAll all; + + for (unsigned int i = 0; i < Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD); + ++i) + test(i); +} diff --git a/tests/base/aligned_vector_replicate_05.mpirun=3.output b/tests/base/aligned_vector_replicate_05.mpirun=3.output new file mode 100644 index 0000000000..db547dd7b7 --- /dev/null +++ b/tests/base/aligned_vector_replicate_05.mpirun=3.output @@ -0,0 +1,8 @@ + +DEAL:0::0 of 3: OK! + +DEAL:1::1 of 3: OK! + + +DEAL:2::2 of 3: OK! + diff --git a/tests/base/aligned_vector_replicate_06.cc b/tests/base/aligned_vector_replicate_06.cc new file mode 100644 index 0000000000..93224e9676 --- /dev/null +++ b/tests/base/aligned_vector_replicate_06.cc @@ -0,0 +1,74 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2012 - 2021 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, 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. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +// Test AlignedVector::replicate_across_communicator(). This variation +// of the _03 test checks that we can move a replicated object and +// that the moved-to object inherits the shared memory window and all +// other information. This tests uses move-assignment. + +#include + +#include "../tests.h" + + +void +test(const unsigned int root) +{ + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << root << " of " << Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD) + << ": "; + + AlignedVector avec(1000); + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + { + unsigned int counter = 0; + for (auto &i : avec) + i = counter++; + } + + avec.replicate_across_communicator(MPI_COMM_WORLD, root); + + // Move avec + AlignedVector xvec; + xvec = std::move(avec); + { + unsigned int counter = 0; + + for (auto &i : xvec) + { + AssertDimension(i, counter); + ++counter; + } + } + + MPI_Barrier(MPI_COMM_WORLD); + + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << "OK!" << std::endl; +} + + + +int +main(int argc, char **argv) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1); + MPILogInitAll all; + + for (unsigned int i = 0; i < Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD); + ++i) + test(i); +} diff --git a/tests/base/aligned_vector_replicate_06.mpirun=3.output b/tests/base/aligned_vector_replicate_06.mpirun=3.output new file mode 100644 index 0000000000..db547dd7b7 --- /dev/null +++ b/tests/base/aligned_vector_replicate_06.mpirun=3.output @@ -0,0 +1,8 @@ + +DEAL:0::0 of 3: OK! + +DEAL:1::1 of 3: OK! + + +DEAL:2::2 of 3: OK! + diff --git a/tests/base/aligned_vector_replicate_07.cc b/tests/base/aligned_vector_replicate_07.cc new file mode 100644 index 0000000000..d54b6d0fba --- /dev/null +++ b/tests/base/aligned_vector_replicate_07.cc @@ -0,0 +1,74 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2012 - 2021 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, 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. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +// Test AlignedVector::replicate_across_communicator(). This variation +// of the _03 test checks that we can swap a replicated object and +// that the swapped-to object inherits the shared memory window and all +// other information. + +#include + +#include "../tests.h" + + +void +test(const unsigned int root) +{ + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << root << " of " << Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD) + << ": "; + + AlignedVector avec(1000); + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + { + unsigned int counter = 0; + for (auto &i : avec) + i = counter++; + } + + avec.replicate_across_communicator(MPI_COMM_WORLD, root); + + // Move avec + AlignedVector xvec; + xvec.swap(avec); + { + unsigned int counter = 0; + + for (auto &i : xvec) + { + AssertDimension(i, counter); + ++counter; + } + } + + MPI_Barrier(MPI_COMM_WORLD); + + if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == root) + deallog << "OK!" << std::endl; +} + + + +int +main(int argc, char **argv) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1); + MPILogInitAll all; + + for (unsigned int i = 0; i < Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD); + ++i) + test(i); +} diff --git a/tests/base/aligned_vector_replicate_07.mpirun=3.output b/tests/base/aligned_vector_replicate_07.mpirun=3.output new file mode 100644 index 0000000000..db547dd7b7 --- /dev/null +++ b/tests/base/aligned_vector_replicate_07.mpirun=3.output @@ -0,0 +1,8 @@ + +DEAL:0::0 of 3: OK! + +DEAL:1::1 of 3: OK! + + +DEAL:2::2 of 3: OK! + -- 2.39.5