|
3 | 3 | # define OPENPMD_private public |
4 | 4 | # define OPENPMD_protected public |
5 | 5 | #endif |
| 6 | + |
| 7 | +#include "openPMD/Chunk.hpp" |
6 | 8 | #include "openPMD/openPMD.hpp" |
7 | 9 |
|
8 | 10 | #include <catch2/catch.hpp> |
|
19 | 21 |
|
20 | 22 | using namespace openPMD; |
21 | 23 |
|
| 24 | +namespace test_chunk_assignment |
| 25 | +{ |
| 26 | +using namespace openPMD::chunk_assignment; |
| 27 | +struct Params |
| 28 | +{ |
| 29 | + ChunkTable table; |
| 30 | + RankMeta metaSource; |
| 31 | + RankMeta metaSink; |
| 32 | + |
| 33 | + void |
| 34 | + init( |
| 35 | + size_t sourceRanks, |
| 36 | + size_t sinkRanks, |
| 37 | + size_t in_per_host, |
| 38 | + size_t out_per_host ) |
| 39 | + { |
| 40 | + for( size_t rank = 0; rank < sourceRanks; ++rank ) |
| 41 | + { |
| 42 | + table.emplace_back( |
| 43 | + Offset{ rank, rank }, Extent{ rank, rank }, rank ); |
| 44 | + table.emplace_back( |
| 45 | + Offset{ rank, 100 * rank }, Extent{ rank, 100 * rank }, rank ); |
| 46 | + metaSource.emplace( rank, std::to_string( rank / in_per_host ) ); |
| 47 | + } |
| 48 | + for( size_t rank = 0; rank < sinkRanks; ++rank ) |
| 49 | + { |
| 50 | + metaSink.emplace( rank, std::to_string( rank / out_per_host ) ); |
| 51 | + } |
| 52 | + } |
| 53 | +}; |
| 54 | +void |
| 55 | +print( ChunkTable const & table ) |
| 56 | +{ |
| 57 | + for( auto const & chunk : table ) |
| 58 | + { |
| 59 | + std::cout << "[Rank: " << chunk.mpi_rank << ",\tOffset: "; |
| 60 | + for( auto offset : chunk.offset ) |
| 61 | + { |
| 62 | + std::cout << offset << ", "; |
| 63 | + } |
| 64 | + std::cout << "\tExtent: "; |
| 65 | + for( auto extent : chunk.extent ) |
| 66 | + { |
| 67 | + std::cout << extent << ", "; |
| 68 | + } |
| 69 | + std::cout << "]" << std::endl; |
| 70 | + } |
| 71 | +} |
| 72 | +} // namespace test_chunk_assignment |
| 73 | + |
| 74 | +TEST_CASE( "chunk_assignment", "[core]" ) |
| 75 | +{ |
| 76 | + using namespace chunk_assignment; |
| 77 | + test_chunk_assignment::Params params; |
| 78 | + params.init( 6, 2, 2, 1 ); |
| 79 | + test_chunk_assignment::print( params.table ); |
| 80 | + ByHostname byHostname( make_unique< RoundRobin >() ); |
| 81 | + FromPartialStrategy fullStrategy( |
| 82 | + make_unique< ByHostname >( std::move( byHostname ) ), |
| 83 | + make_unique< BinPacking >() ); |
| 84 | + ChunkTable res = assignChunks( |
| 85 | + params.table, params.metaSource, params.metaSink, fullStrategy ); |
| 86 | + std::cout << "\nRESULTS:" << std::endl; |
| 87 | + test_chunk_assignment::print( res ); |
| 88 | +} |
| 89 | + |
22 | 90 | TEST_CASE( "versions_test", "[core]" ) |
23 | 91 | { |
24 | 92 | auto const apiVersion = getVersion( ); |
25 | 93 | REQUIRE(2u == std::count_if(apiVersion.begin(), apiVersion.end(), []( char const c ){ return c == '.';})); |
26 | 94 |
|
| 95 | + |
27 | 96 | auto const standard = getStandard( ); |
28 | 97 | REQUIRE(standard == "1.1.0"); |
29 | 98 |
|
|
0 commit comments