#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdbool.h>
#include <stdlib.h>
#include <assert.h>
#include <mpi.h>
#include <yaxt.h>
#include "tests.h"
#include "ctest_common.h"
#include "test_idxlist_utils.h"
int main(int argc, char **argv)
{
{
{
static const Xt_int g_src_idx[] = {1,2,3,4,5,6,7,8,9};
enum { g_src_num = sizeof(g_src_idx) / sizeof(g_src_idx[0]) };
}
{
static const Xt_int g_dst_idx[] = {9,8,7,6,5,4,3,2,1};
enum { g_dst_num = sizeof(g_dst_idx) / sizeof(g_dst_idx[0]) };
}
static const Xt_int patch_idx[] = {3,4,4,4,7,7,8};
enum { patch_num = sizeof(patch_idx) / sizeof(patch_idx[0]) };
static const Xt_int ref_mpatch_idx[] = {7,6,6,6,3,3,2};
check_idxlist(mpatch_idxlist, ref_mpatch_idx, patch_num);
}
{
{
= { {.
start=1, .nstrides=20, .stride=1} };
enum { g_src_num = sizeof(g_src_stripe) / sizeof(g_src_stripe[0]) };
}
{
= { {.
start=100, .nstrides=20, .stride=-1} };
enum { g_dst_num = sizeof(g_dst_stripe) / sizeof(g_dst_stripe[0]) };
}
enum { mod_mask = 32 };
static const Xt_int patch_idx[] = {0,1,3,3,5,50,100,150};
enum { patch_num = sizeof(patch_idx) / sizeof(patch_idx[0]) };
int mstate[patch_num];
for (size_t i = 0; i < patch_num; ++i)
mstate[i] = (int)(i + 1);
static const Xt_int ref_mpatch_idx[] = {0,100,98,98,96,50,100,150};
check_idxlist(mpatch_idxlist, ref_mpatch_idx, patch_num);
static const int ref_mstate[]
= {1, 2|mod_mask, 3|mod_mask, 4|mod_mask, 5|mod_mask, 6, 7, 8};
bool mismatch = false;
for (size_t i = 0; i < patch_num; i++)
mismatch |= (mstate[i] != ref_mstate[i]);
if (mismatch)
PUT_ERR("(mstate[i] != ref_mstate[i])\n");
}
{
enum { num_mod = 2 };
{
static const Xt_int g1_src_idx[] = {1,2,3,4,5,6,7,8,9};
enum { g1_src_num = sizeof(g1_src_idx) / sizeof(g1_src_idx[0]) };
}
{
static const Xt_int g1_dst_idx[] = {9,8,7,6,5,4,3,2,1};
enum { g1_dst_num = sizeof(g1_dst_idx) / sizeof(g1_dst_idx[0]) };
}
{
static const Xt_int g2_src_idx[] = {1,2,8,9,10};
enum { g2_src_num = sizeof(g2_src_idx) / sizeof(g2_src_idx[0]) };
}
{
static const Xt_int g2_dst_idx[] = {8,2,8,2,5};
enum { g2_dst_num = sizeof(g2_dst_idx) / sizeof(g2_dst_idx[0]) };
}
static const Xt_int patch_idx[] = {6,7,25,8,9,10};
enum { patch_num = sizeof(patch_idx) / sizeof(patch_idx[0]) };
static const int ref_mstate[] = {1|0, 1|0, 0|0, 1|2, 1|2, 0|2};
int mstate[patch_num];
for (size_t i = 0; i < patch_num; i++)
mstate[i] = 0;
static const Xt_int ref_mpatch_idx[] = {4,3,25,2,8,5};
check_idxlist(mpatch_idxlist, ref_mpatch_idx, patch_num);
bool mismatch = false;
for (size_t i = 0; i < patch_num; i++)
mismatch |= (mstate[i] != ref_mstate[i]);
if (mismatch)
PUT_ERR("(mstate[i] != ref_mstate[i])\n");
for (size_t i = 0; i < num_mod; ++i) {
}
}
MPI_Finalize();
return TEST_EXIT_CODE;
}
add versions of standard API functions not returning on error
Xt_idxlist extract
idx values
void xt_initialize(MPI_Comm default_comm)
void xt_idxlist_delete(Xt_idxlist idxlist)
Xt_idxlist xt_idxmod_new(Xt_idxlist patch_idxlist, struct Xt_modifier *modifier, int modifier_num, int *mstate)
generates a new index list based on an index list and a sequence of modifiers
Xt_idxlist xt_idxstripes_new(struct Xt_stripe const *stripes, int num_stripes)
Xt_idxlist xt_idxvec_new(const Xt_int *idxlist, int num_indices)