// Copyright 2011-2017 Ryan Curtin (http://www.ratml.org/) // Copyright 2017 National ICT Australia (NICTA) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ------------------------------------------------------------------------ #include #include #include "catch.hpp" using namespace arma; #if defined(ARMA_USE_HDF5) TEST_CASE("hdf5_u8_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_u16_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_u32_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #ifdef ARMA_USE_U64S64 TEST_CASE("hdf5_u64_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #endif TEST_CASE("hdf5_s8_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_s16_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_s32_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #ifdef ARMA_USE_U64S64 TEST_CASE("hdf5_s64_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #endif TEST_CASE("hdf5_char_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_int_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_uint_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_short_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_ushort_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_long_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_ulong_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #ifdef ARMA_USE_U64S64 TEST_CASE("hdf5_llong_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_ullong_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } #endif TEST_CASE("hdf5_float_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_double_test") { arma::Mat a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_complex_float_test") { arma::Mat > a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat > b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == b[i] ); } // Now autoload. arma::Mat > c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_complex_double_test") { arma::Mat > a; a.randu(20, 20); // Save first. a.save("file.h5", hdf5_binary); // Load as different matrix. arma::Mat > b; b.load("file.h5", hdf5_binary); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) REQUIRE( a[i] == b[i] ); // Now autoload. arma::Mat > c; c.load("file.h5"); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_dataset_append_test") { arma::Mat a; a.randu(20, 20); // Save first dataset. a.save( hdf5_name("file.h5", "dataset1") ); arma::Mat b; b.randu(10, 10); // Save second dataset. b.save( hdf5_name("file.h5", "dataset2", hdf5_opts::append) ); // Load first dataset as different matrix. arma::Mat c; c.load( hdf5_name("file.h5", "dataset1") ); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } // Load second dataset as different matrix. arma::Mat d; d.load( hdf5_name("file.h5", "dataset2") ); // Check that they are the same. for (uword i = 0; i < b.n_elem; ++i) { REQUIRE( b[i] == d[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_cube_dataset_append_test") { arma::Mat a; a.randu(20, 20); // Save first dataset. a.save( hdf5_name("file.h5", "dataset1") ); arma::Cube b; b.randu(10, 10, 10); // Save second dataset. b.save( hdf5_name("file.h5", "dataset2", hdf5_opts::append) ); // Load first dataset as different matrix. arma::Mat c; c.load( hdf5_name("file.h5", "dataset1") ); // Check that they are the same. for (uword i = 0; i < a.n_elem; ++i) { REQUIRE( a[i] == c[i] ); } // Load second dataset as different matrix. arma::Cube d; d.load( hdf5_name("file.h5", "dataset2") ); // Check that they are the same. for (uword i = 0; i < b.n_elem; ++i) { REQUIRE( b[i] == d[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_dataset_append-overwrite-test") { arma::Mat a; a.randu(20, 20); // Save first dataset. a.save( hdf5_name("file.h5", "dataset1") ); arma::Mat b; b.randu(10, 10); // Save second dataset. b.save( hdf5_name("file.h5", "dataset2") ); // Load first dataset as different matrix and check that first dataset has been overwritten. arma::Mat c; REQUIRE_FALSE( c.load( hdf5_name("file.h5", "dataset1") ) ); // Load second dataset as different matrix. arma::Mat d; d.load( hdf5_name("file.h5", "dataset2") ); // Check that they are the same. for (uword i = 0; i < b.n_elem; ++i) { REQUIRE( b[i] == d[i] ); } std::remove("file.h5"); } TEST_CASE("hdf5_dataset_same_dataset_twice_test") { arma::Mat a; a.randu(20, 20); // Save first dataset. a.save(hdf5_name("file.h5", "dataset1"), hdf5_binary); arma::Mat b; b.randu(10, 10); // Append second dataset with same name, causing failure. REQUIRE_FALSE( b.save(hdf5_name("file.h5", "dataset1", hdf5_opts::append) ) ); std::remove("file.h5"); } #endif