5241f43e创建于 2024年7月31日历史提交
#define SIMDE_TEST_ARM_NEON_INSN uzp2

#include "test-neon.h"
#include "../../../simde/arm/neon/uzp2.h"

static int
test_simde_vuzp2_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t a[4];
    simde_float16_t b[4];
    simde_float16_t r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT16_VALUE(   -49.28), SIMDE_FLOAT16_VALUE(  -109.00), SIMDE_FLOAT16_VALUE(  -626.50), SIMDE_FLOAT16_VALUE(  -567.00) },
      { SIMDE_FLOAT16_VALUE(  -178.88), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(   976.50), SIMDE_FLOAT16_VALUE(   -31.19) },
      { SIMDE_FLOAT16_VALUE(  -109.00), SIMDE_FLOAT16_VALUE(  -567.00), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(   -31.19) } },
    { { SIMDE_FLOAT16_VALUE(  -226.00), SIMDE_FLOAT16_VALUE(  -520.50), SIMDE_FLOAT16_VALUE(  -252.38), SIMDE_FLOAT16_VALUE(  -407.50) },
      { SIMDE_FLOAT16_VALUE(    89.44), SIMDE_FLOAT16_VALUE(  -200.50), SIMDE_FLOAT16_VALUE(  -439.75), SIMDE_FLOAT16_VALUE(  -450.75) },
      { SIMDE_FLOAT16_VALUE(  -520.50), SIMDE_FLOAT16_VALUE(  -407.50), SIMDE_FLOAT16_VALUE(  -200.50), SIMDE_FLOAT16_VALUE(  -450.75) } },
    { { SIMDE_FLOAT16_VALUE(  -833.00), SIMDE_FLOAT16_VALUE(  -714.00), SIMDE_FLOAT16_VALUE(   428.50), SIMDE_FLOAT16_VALUE(   871.50) },
      { SIMDE_FLOAT16_VALUE(  -157.12), SIMDE_FLOAT16_VALUE(   972.50), SIMDE_FLOAT16_VALUE(   298.75), SIMDE_FLOAT16_VALUE(  -919.50) },
      { SIMDE_FLOAT16_VALUE(  -714.00), SIMDE_FLOAT16_VALUE(   871.50), SIMDE_FLOAT16_VALUE(   972.50), SIMDE_FLOAT16_VALUE(  -919.50) } },
    { { SIMDE_FLOAT16_VALUE(   488.00), SIMDE_FLOAT16_VALUE(   112.56), SIMDE_FLOAT16_VALUE(    58.66), SIMDE_FLOAT16_VALUE(   879.50) },
      { SIMDE_FLOAT16_VALUE(   129.00), SIMDE_FLOAT16_VALUE(  -858.50), SIMDE_FLOAT16_VALUE(  -133.88), SIMDE_FLOAT16_VALUE(  -920.50) },
      { SIMDE_FLOAT16_VALUE(   112.56), SIMDE_FLOAT16_VALUE(   879.50), SIMDE_FLOAT16_VALUE(  -858.50), SIMDE_FLOAT16_VALUE(  -920.50) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x4_t a, b, r;

    a = simde_vld1_f16(test_vec[i].a);
    b = simde_vld1_f16(test_vec[i].b);
    r = simde_vuzp2_f16(a, b);

    simde_test_arm_neon_assert_equal_f16x4(r, simde_vld1_f16(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x4_t a = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
    simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-100.0f, 100.0f);
    simde_float16x4_t r = simde_vuzp2_f16(a, b);

    simde_test_arm_neon_write_f16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float32 a[2];
    simde_float32 b[2];
    simde_float32 r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(   343.73), SIMDE_FLOAT32_C(  -384.82) },
      { SIMDE_FLOAT32_C(   348.76), SIMDE_FLOAT32_C(   874.35) },
      { SIMDE_FLOAT32_C(  -384.82), SIMDE_FLOAT32_C(   874.35) } },
    { { SIMDE_FLOAT32_C(   328.67), SIMDE_FLOAT32_C(  -556.62) },
      { SIMDE_FLOAT32_C(  -584.13), SIMDE_FLOAT32_C(   886.34) },
      { SIMDE_FLOAT32_C(  -556.62), SIMDE_FLOAT32_C(   886.34) } },
    { { SIMDE_FLOAT32_C(  -727.41), SIMDE_FLOAT32_C(   622.83) },
      { SIMDE_FLOAT32_C(  -328.14), SIMDE_FLOAT32_C(   552.33) },
      { SIMDE_FLOAT32_C(   622.83), SIMDE_FLOAT32_C(   552.33) } },
    { { SIMDE_FLOAT32_C(   169.12), SIMDE_FLOAT32_C(   762.41) },
      { SIMDE_FLOAT32_C(  -165.94), SIMDE_FLOAT32_C(   247.93) },
      { SIMDE_FLOAT32_C(   762.41), SIMDE_FLOAT32_C(   247.93) } },
    { { SIMDE_FLOAT32_C(   975.47), SIMDE_FLOAT32_C(   559.60) },
      { SIMDE_FLOAT32_C(   -75.67), SIMDE_FLOAT32_C(   142.37) },
      { SIMDE_FLOAT32_C(   559.60), SIMDE_FLOAT32_C(   142.37) } },
    { { SIMDE_FLOAT32_C(  -342.52), SIMDE_FLOAT32_C(  -803.88) },
      { SIMDE_FLOAT32_C(  -138.51), SIMDE_FLOAT32_C(  -568.39) },
      { SIMDE_FLOAT32_C(  -803.88), SIMDE_FLOAT32_C(  -568.39) } },
    { { SIMDE_FLOAT32_C(   706.38), SIMDE_FLOAT32_C(  -329.34) },
      { SIMDE_FLOAT32_C(  -697.68), SIMDE_FLOAT32_C(   236.14) },
      { SIMDE_FLOAT32_C(  -329.34), SIMDE_FLOAT32_C(   236.14) } },
    { { SIMDE_FLOAT32_C(   537.08), SIMDE_FLOAT32_C(   467.12) },
      { SIMDE_FLOAT32_C(   923.63), SIMDE_FLOAT32_C(  -119.19) },
      { SIMDE_FLOAT32_C(   467.12), SIMDE_FLOAT32_C(  -119.19) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t a, b, r;

    a = simde_vld1_f32(test_vec[i].a);
    b = simde_vld1_f32(test_vec[i].b);
    r = simde_vuzp2_f32(a, b);

    simde_test_arm_neon_assert_equal_f32x2(r, simde_vld1_f32(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x2_t a = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t b = simde_test_arm_neon_random_f32x2(-1000.0f, 1000.0f);
    simde_float32x2_t r = simde_vuzp2_f32(a, b);

    simde_test_arm_neon_write_f32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[8];
    int8_t b[8];
    int8_t r[8];
  } test_vec[] = {
    { {  INT8_C(  74),  INT8_C(  41), -INT8_C( 101), -INT8_C(  39),  INT8_C(  90), -INT8_C( 112),  INT8_C(  51),  INT8_C(  51) },
      { -INT8_C( 123), -INT8_C( 118), -INT8_C(   2),  INT8_C( 101),  INT8_C(  68), -INT8_C( 103), -INT8_C(  57), -INT8_C(  67) },
      {  INT8_C(  41), -INT8_C(  39), -INT8_C( 112),  INT8_C(  51), -INT8_C( 118),  INT8_C( 101), -INT8_C( 103), -INT8_C(  67) } },
    { {  INT8_C(  20),  INT8_C( 116),  INT8_C(  51),  INT8_C(  68), -INT8_C(  48),  INT8_C(  60),  INT8_C(  39),  INT8_C(  78) },
      { -INT8_C(  64),  INT8_C(  38),  INT8_C(  69), -INT8_C(  38), -INT8_C(  56),  INT8_C(  75), -INT8_C(   7),  INT8_C(  18) },
      {  INT8_C( 116),  INT8_C(  68),  INT8_C(  60),  INT8_C(  78),  INT8_C(  38), -INT8_C(  38),  INT8_C(  75),  INT8_C(  18) } },
    { {  INT8_C( 117), -INT8_C( 108), -INT8_C(  21), -INT8_C(  49),  INT8_C(  37),  INT8_C(  31),  INT8_C(   2), -INT8_C(  86) },
      { -INT8_C(  87),  INT8_C(   0),  INT8_C(  15), -INT8_C(  19), -INT8_C( 103), -INT8_C(  42), -INT8_C(  86), -INT8_C(  82) },
      { -INT8_C( 108), -INT8_C(  49),  INT8_C(  31), -INT8_C(  86),  INT8_C(   0), -INT8_C(  19), -INT8_C(  42), -INT8_C(  82) } },
    { {  INT8_C(  74), -INT8_C(  34), -INT8_C(  14),  INT8_C(  27),  INT8_C(  26),  INT8_C(  25),  INT8_C( 105), -INT8_C(  38) },
      {  INT8_C(  63), -INT8_C(  82), -INT8_C(  75),  INT8_C(   7), -INT8_C(   7), -INT8_C(  82),  INT8_C(  25),  INT8_C( 110) },
      { -INT8_C(  34),  INT8_C(  27),  INT8_C(  25), -INT8_C(  38), -INT8_C(  82),  INT8_C(   7), -INT8_C(  82),  INT8_C( 110) } },
    { {  INT8_C(  66),  INT8_C(   4),  INT8_C(  61),  INT8_C( 103),  INT8_C(  35),  INT8_C(  64),  INT8_C(  17), -INT8_C(  52) },
      {  INT8_C(  64),  INT8_C(  32), -INT8_C(  71), -INT8_C(  38), -INT8_C(   9),  INT8_C( 100), -INT8_C( 120),  INT8_C(  65) },
      {  INT8_C(   4),  INT8_C( 103),  INT8_C(  64), -INT8_C(  52),  INT8_C(  32), -INT8_C(  38),  INT8_C( 100),  INT8_C(  65) } },
    { {  INT8_C(  66),  INT8_C( 122),  INT8_C(  92),  INT8_C(  92), -INT8_C( 109), -INT8_C(  59),  INT8_C(  55), -INT8_C(  46) },
      {  INT8_C( 115), -INT8_C(  20), -INT8_C(  39),  INT8_C( 109), -INT8_C( 102), -INT8_C(  14), -INT8_C(  37), -INT8_C(  36) },
      {  INT8_C( 122),  INT8_C(  92), -INT8_C(  59), -INT8_C(  46), -INT8_C(  20),  INT8_C( 109), -INT8_C(  14), -INT8_C(  36) } },
    { { -INT8_C(  10),  INT8_C(  25),  INT8_C(  68),  INT8_C(  26),  INT8_C(  89),  INT8_C(  85), -INT8_C(  26), -INT8_C( 103) },
      {  INT8_C( 118), -INT8_C(  96),  INT8_C( 115),  INT8_C( 109),  INT8_C(   4), -INT8_C(   5), -INT8_C(  82),  INT8_C(  70) },
      {  INT8_C(  25),  INT8_C(  26),  INT8_C(  85), -INT8_C( 103), -INT8_C(  96),  INT8_C( 109), -INT8_C(   5),  INT8_C(  70) } },
    { {  INT8_C( 117),  INT8_C(  11), -INT8_C(  94),  INT8_C(   8), -INT8_C(  48), -INT8_C(  39), -INT8_C(  38),  INT8_C(  68) },
      { -INT8_C(  59), -INT8_C(  77), -INT8_C(  79),  INT8_C(  95), -INT8_C(  91), -INT8_C( 116),  INT8_C(  60), -INT8_C( 100) },
      {  INT8_C(  11),  INT8_C(   8), -INT8_C(  39),  INT8_C(  68), -INT8_C(  77),  INT8_C(  95), -INT8_C( 116), -INT8_C( 100) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
    simde_int8x8_t b = simde_vld1_s8(test_vec[i].b);
    simde_int8x8_t r = simde_vuzp2_s8(a, b);

    simde_test_arm_neon_assert_equal_i8x8(r, simde_vld1_s8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int8x8_t a = simde_test_arm_neon_random_i8x8();
    simde_int8x8_t b = simde_test_arm_neon_random_i8x8();
    simde_int8x8_t r = simde_vuzp2_s8(a, b);

    simde_test_arm_neon_write_i8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[4];
    int16_t b[4];
    int16_t r[4];
  } test_vec[] = {
    { { -INT16_C(  8469),  INT16_C(  4214),  INT16_C(  6247), -INT16_C( 14565) },
      {  INT16_C( 17510), -INT16_C( 31761), -INT16_C( 26454),  INT16_C(  6595) },
      {  INT16_C(  4214), -INT16_C( 14565), -INT16_C( 31761),  INT16_C(  6595) } },
    { {  INT16_C( 15772), -INT16_C( 26012),  INT16_C( 25267),  INT16_C( 18574) },
      {  INT16_C( 26296),  INT16_C( 18542), -INT16_C( 31381),  INT16_C( 22512) },
      { -INT16_C( 26012),  INT16_C( 18574),  INT16_C( 18542),  INT16_C( 22512) } },
    { {  INT16_C( 26211), -INT16_C( 13465), -INT16_C( 32129), -INT16_C(  6766) },
      { -INT16_C( 32313),  INT16_C( 29032),  INT16_C( 11289), -INT16_C( 19062) },
      { -INT16_C( 13465), -INT16_C(  6766),  INT16_C( 29032), -INT16_C( 19062) } },
    { { -INT16_C(  4503),  INT16_C(  7247), -INT16_C(  8624),  INT16_C(  2405) },
      { -INT16_C( 11452), -INT16_C( 20399),  INT16_C( 16984), -INT16_C( 17401) },
      {  INT16_C(  7247),  INT16_C(  2405), -INT16_C( 20399), -INT16_C( 17401) } },
    { {  INT16_C( 28328),  INT16_C( 10119),  INT16_C(  6640), -INT16_C( 18676) },
      {  INT16_C( 30106), -INT16_C( 19416), -INT16_C( 19551),  INT16_C(  2665) },
      {  INT16_C( 10119), -INT16_C( 18676), -INT16_C( 19416),  INT16_C(  2665) } },
    { { -INT16_C( 18015), -INT16_C(  3546), -INT16_C( 29801), -INT16_C(  9221) },
      {  INT16_C( 19550), -INT16_C( 18549), -INT16_C( 28018),  INT16_C( 14195) },
      { -INT16_C(  3546), -INT16_C(  9221), -INT16_C( 18549),  INT16_C( 14195) } },
    { { -INT16_C(  1536), -INT16_C(  3746),  INT16_C( 27411), -INT16_C( 21080) },
      { -INT16_C( 11808), -INT16_C( 32415), -INT16_C( 13436),  INT16_C(  9611) },
      { -INT16_C(  3746), -INT16_C( 21080), -INT16_C( 32415),  INT16_C(  9611) } },
    { { -INT16_C( 20092),  INT16_C(  6935),  INT16_C(  4669), -INT16_C( 25610) },
      { -INT16_C( 32161), -INT16_C(  4782), -INT16_C( 15084),  INT16_C(  5412) },
      {  INT16_C(  6935), -INT16_C( 25610), -INT16_C(  4782),  INT16_C(  5412) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
    simde_int16x4_t b = simde_vld1_s16(test_vec[i].b);
    simde_int16x4_t r = simde_vuzp2_s16(a, b);

    simde_test_arm_neon_assert_equal_i16x4(r, simde_vld1_s16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int16x4_t a = simde_test_arm_neon_random_i16x4();
    simde_int16x4_t b = simde_test_arm_neon_random_i16x4();
    simde_int16x4_t r = simde_vuzp2_s16(a, b);

    simde_test_arm_neon_write_i16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[2];
    int32_t b[2];
    int32_t r[2];
  } test_vec[] = {
    { {  INT32_C(   700519944),  INT32_C(   806752298) },
      { -INT32_C(  1414503859), -INT32_C(  1821262512) },
      {  INT32_C(   806752298), -INT32_C(  1821262512) } },
    { { -INT32_C(  1774050292),  INT32_C(   309171441) },
      { -INT32_C(  1372346662),  INT32_C(  1901278057) },
      {  INT32_C(   309171441),  INT32_C(  1901278057) } },
    { {  INT32_C(  1939477833),  INT32_C(  1923330085) },
      {  INT32_C(  1646088978),  INT32_C(   485854992) },
      {  INT32_C(  1923330085),  INT32_C(   485854992) } },
    { { -INT32_C(  1531824205), -INT32_C(  1498013749) },
      {  INT32_C(   794094022),  INT32_C(  1705027612) },
      { -INT32_C(  1498013749),  INT32_C(  1705027612) } },
    { { -INT32_C(   489145667), -INT32_C(    61506582) },
      { -INT32_C(   564170034), -INT32_C(  1258662911) },
      { -INT32_C(    61506582), -INT32_C(  1258662911) } },
    { {  INT32_C(  1465429388), -INT32_C(  1828909364) },
      {  INT32_C(   331436791), -INT32_C(  1216847366) },
      { -INT32_C(  1828909364), -INT32_C(  1216847366) } },
    { { -INT32_C(  2053549925), -INT32_C(  1719472437) },
      {  INT32_C(  1652023649), -INT32_C(  1055428043) },
      { -INT32_C(  1719472437), -INT32_C(  1055428043) } },
    { { -INT32_C(   350654689),  INT32_C(  1971197566) },
      {  INT32_C(  1653161832),  INT32_C(  1008271777) },
      {  INT32_C(  1971197566),  INT32_C(  1008271777) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
    simde_int32x2_t b = simde_vld1_s32(test_vec[i].b);
    simde_int32x2_t r = simde_vuzp2_s32(a, b);

    simde_test_arm_neon_assert_equal_i32x2(r, simde_vld1_s32(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int32x2_t a = simde_test_arm_neon_random_i32x2();
    simde_int32x2_t b = simde_test_arm_neon_random_i32x2();
    simde_int32x2_t r = simde_vuzp2_s32(a, b);

    simde_test_arm_neon_write_i32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[8];
    uint8_t b[8];
    uint8_t r[8];
  } test_vec[] = {
    { { UINT8_C( 32), UINT8_C(115), UINT8_C( 94), UINT8_C(134), UINT8_C(188), UINT8_C(  5), UINT8_C( 28), UINT8_C( 50) },
      { UINT8_C( 84), UINT8_C( 27), UINT8_C(113), UINT8_C(241),    UINT8_MAX, UINT8_C( 18), UINT8_C(122), UINT8_C( 84) },
      { UINT8_C(115), UINT8_C(134), UINT8_C(  5), UINT8_C( 50), UINT8_C( 27), UINT8_C(241), UINT8_C( 18), UINT8_C( 84) } },
    { { UINT8_C( 24), UINT8_C( 59), UINT8_C(106), UINT8_C(201), UINT8_C( 70), UINT8_C(150), UINT8_C( 86), UINT8_C(152) },
      { UINT8_C(111), UINT8_C(245), UINT8_C(121), UINT8_C(191), UINT8_C(114), UINT8_C(111), UINT8_C( 11), UINT8_C(146) },
      { UINT8_C( 59), UINT8_C(201), UINT8_C(150), UINT8_C(152), UINT8_C(245), UINT8_C(191), UINT8_C(111), UINT8_C(146) } },
    { { UINT8_C(226), UINT8_C(105), UINT8_C( 24), UINT8_C(158), UINT8_C(110), UINT8_C( 52), UINT8_C(208), UINT8_C(194) },
      { UINT8_C( 79), UINT8_C( 66), UINT8_C(180), UINT8_C( 78), UINT8_C( 84), UINT8_C( 46), UINT8_C(162), UINT8_C(108) },
      { UINT8_C(105), UINT8_C(158), UINT8_C( 52), UINT8_C(194), UINT8_C( 66), UINT8_C( 78), UINT8_C( 46), UINT8_C(108) } },
    { { UINT8_C(105), UINT8_C( 12), UINT8_C( 53), UINT8_C(176), UINT8_C(162), UINT8_C(139), UINT8_C( 72), UINT8_C( 17) },
      { UINT8_C(128), UINT8_C(193), UINT8_C(209), UINT8_C(242), UINT8_C( 48), UINT8_C(220), UINT8_C(132), UINT8_C( 18) },
      { UINT8_C( 12), UINT8_C(176), UINT8_C(139), UINT8_C( 17), UINT8_C(193), UINT8_C(242), UINT8_C(220), UINT8_C( 18) } },
    { { UINT8_C( 69), UINT8_C(156), UINT8_C(176), UINT8_C(180), UINT8_C(209), UINT8_C(129), UINT8_C(118), UINT8_C( 32) },
      { UINT8_C(195), UINT8_C( 42), UINT8_C(111), UINT8_C( 23), UINT8_C( 89), UINT8_C( 17), UINT8_C(131), UINT8_C(194) },
      { UINT8_C(156), UINT8_C(180), UINT8_C(129), UINT8_C( 32), UINT8_C( 42), UINT8_C( 23), UINT8_C( 17), UINT8_C(194) } },
    { { UINT8_C( 30), UINT8_C(184), UINT8_C(114), UINT8_C(192), UINT8_C( 67), UINT8_C(186), UINT8_C(210), UINT8_C(195) },
      { UINT8_C(124), UINT8_C(163), UINT8_C(182), UINT8_C(172), UINT8_C(127), UINT8_C( 58), UINT8_C(191), UINT8_C(196) },
      { UINT8_C(184), UINT8_C(192), UINT8_C(186), UINT8_C(195), UINT8_C(163), UINT8_C(172), UINT8_C( 58), UINT8_C(196) } },
    { { UINT8_C(215), UINT8_C(111), UINT8_C(120), UINT8_C(168), UINT8_C(240), UINT8_C(239), UINT8_C(200), UINT8_C(179) },
      { UINT8_C( 25), UINT8_C( 55), UINT8_C(202), UINT8_C(114), UINT8_C( 73), UINT8_C( 77), UINT8_C( 53), UINT8_C(103) },
      { UINT8_C(111), UINT8_C(168), UINT8_C(239), UINT8_C(179), UINT8_C( 55), UINT8_C(114), UINT8_C( 77), UINT8_C(103) } },
    { { UINT8_C(  5), UINT8_C(167), UINT8_C( 39), UINT8_C( 72), UINT8_C( 98), UINT8_C(249), UINT8_C( 12), UINT8_C(222) },
      { UINT8_C(156), UINT8_C(194), UINT8_C(138), UINT8_C( 27), UINT8_C(252), UINT8_C( 73), UINT8_C(224), UINT8_C(211) },
      { UINT8_C(167), UINT8_C( 72), UINT8_C(249), UINT8_C(222), UINT8_C(194), UINT8_C( 27), UINT8_C( 73), UINT8_C(211) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
    simde_uint8x8_t b = simde_vld1_u8(test_vec[i].b);
    simde_uint8x8_t r = simde_vuzp2_u8(a, b);

    simde_test_arm_neon_assert_equal_u8x8(r, simde_vld1_u8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint8x8_t a = simde_test_arm_neon_random_u8x8();
    simde_uint8x8_t b = simde_test_arm_neon_random_u8x8();
    simde_uint8x8_t r = simde_vuzp2_u8(a, b);

    simde_test_arm_neon_write_u8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t r[4];
  } test_vec[] = {
    { { UINT16_C( 5562), UINT16_C(29929), UINT16_C(59535), UINT16_C( 4681) },
      { UINT16_C( 4562), UINT16_C(56009), UINT16_C(26174), UINT16_C(13284) },
      { UINT16_C(29929), UINT16_C( 4681), UINT16_C(56009), UINT16_C(13284) } },
    { { UINT16_C( 5231), UINT16_C( 5283), UINT16_C(50924), UINT16_C(52138) },
      { UINT16_C(51348), UINT16_C(34623), UINT16_C(61476), UINT16_C(57252) },
      { UINT16_C( 5283), UINT16_C(52138), UINT16_C(34623), UINT16_C(57252) } },
    { { UINT16_C(36102), UINT16_C(38227), UINT16_C(40053), UINT16_C(18343) },
      { UINT16_C(28845), UINT16_C(60193), UINT16_C( 1494), UINT16_C(17950) },
      { UINT16_C(38227), UINT16_C(18343), UINT16_C(60193), UINT16_C(17950) } },
    { { UINT16_C(49434), UINT16_C( 1626), UINT16_C( 1159), UINT16_C( 7122) },
      { UINT16_C( 4556), UINT16_C(61603), UINT16_C(18177), UINT16_C( 1999) },
      { UINT16_C( 1626), UINT16_C( 7122), UINT16_C(61603), UINT16_C( 1999) } },
    { { UINT16_C( 8916), UINT16_C(18844), UINT16_C(17342), UINT16_C(27536) },
      { UINT16_C(45748), UINT16_C(35414), UINT16_C(29879), UINT16_C(53712) },
      { UINT16_C(18844), UINT16_C(27536), UINT16_C(35414), UINT16_C(53712) } },
    { { UINT16_C(10805), UINT16_C(48344), UINT16_C(43566), UINT16_C(64216) },
      { UINT16_C(31675), UINT16_C(48363), UINT16_C(47810), UINT16_C(38596) },
      { UINT16_C(48344), UINT16_C(64216), UINT16_C(48363), UINT16_C(38596) } },
    { { UINT16_C(24797), UINT16_C(39903), UINT16_C(28580), UINT16_C(22535) },
      { UINT16_C(23841), UINT16_C(55778), UINT16_C(46034), UINT16_C( 1962) },
      { UINT16_C(39903), UINT16_C(22535), UINT16_C(55778), UINT16_C( 1962) } },
    { { UINT16_C(33501), UINT16_C( 3268), UINT16_C(39980), UINT16_C(59142) },
      { UINT16_C(61719), UINT16_C(55716), UINT16_C(26796), UINT16_C(35183) },
      { UINT16_C( 3268), UINT16_C(59142), UINT16_C(55716), UINT16_C(35183) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
    simde_uint16x4_t b = simde_vld1_u16(test_vec[i].b);
    simde_uint16x4_t r = simde_vuzp2_u16(a, b);
    simde_test_arm_neon_assert_equal_u16x4(r, simde_vld1_u16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint16x4_t a = simde_test_arm_neon_random_u16x4();
    simde_uint16x4_t b = simde_test_arm_neon_random_u16x4();
    simde_uint16x4_t r = simde_vuzp2_u16(a, b);

    simde_test_arm_neon_write_u16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t r[2];
  } test_vec[] = {
    { { UINT32_C(4094091955), UINT32_C(3041287499) },
      { UINT32_C(2743144671), UINT32_C(3197617136) },
      { UINT32_C(3041287499), UINT32_C(3197617136) } },
    { { UINT32_C(2304641764), UINT32_C(2188309395) },
      { UINT32_C(1096318907), UINT32_C( 611816304) },
      { UINT32_C(2188309395), UINT32_C( 611816304) } },
    { { UINT32_C(3222830453), UINT32_C(3128254171) },
      { UINT32_C(1599993711), UINT32_C(2652828858) },
      { UINT32_C(3128254171), UINT32_C(2652828858) } },
    { { UINT32_C(2435284222), UINT32_C( 722769264) },
      { UINT32_C(2221698068), UINT32_C(1957225727) },
      { UINT32_C( 722769264), UINT32_C(1957225727) } },
    { { UINT32_C(1010090337), UINT32_C(2398530079) },
      { UINT32_C(1542345633), UINT32_C(1173949511) },
      { UINT32_C(2398530079), UINT32_C(1173949511) } },
    { { UINT32_C(4174848136), UINT32_C(3374640053) },
      { UINT32_C(1464701015), UINT32_C(3603691124) },
      { UINT32_C(3374640053), UINT32_C(3603691124) } },
    { { UINT32_C(3591504055), UINT32_C(1264912810) },
      { UINT32_C(2762363740), UINT32_C(3890847583) },
      { UINT32_C(1264912810), UINT32_C(3890847583) } },
    { { UINT32_C(1960886463), UINT32_C(  54330539) },
      { UINT32_C( 156928660), UINT32_C( 937371008) },
      { UINT32_C(  54330539), UINT32_C( 937371008) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
    simde_uint32x2_t b = simde_vld1_u32(test_vec[i].b);
    simde_uint32x2_t r = simde_vuzp2_u32(a, b);
    simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint32x2_t a = simde_test_arm_neon_random_u32x2();
    simde_uint32x2_t b = simde_test_arm_neon_random_u32x2();
    simde_uint32x2_t r = simde_vuzp2_u32(a, b);

    simde_test_arm_neon_write_u32x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u32x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t a[8];
    simde_float16_t b[8];
    simde_float16_t r[8];
  } test_vec[] = {
    { {  SIMDE_FLOAT16_VALUE( 90.452),  SIMDE_FLOAT16_VALUE( 17.701), SIMDE_FLOAT16_VALUE( - 49.009), SIMDE_FLOAT16_VALUE( - 88.786),
        SIMDE_FLOAT16_VALUE( - 29.009), SIMDE_FLOAT16_VALUE( - 37.203), SIMDE_FLOAT16_VALUE( - 58.225),  SIMDE_FLOAT16_VALUE( 98.368) },
      {  SIMDE_FLOAT16_VALUE( 19.440), SIMDE_FLOAT16_VALUE( -  1.659),  SIMDE_FLOAT16_VALUE( 42.542), SIMDE_FLOAT16_VALUE( - 99.688),
        SIMDE_FLOAT16_VALUE( - 88.443),  SIMDE_FLOAT16_VALUE( 34.706), SIMDE_FLOAT16_VALUE( - 85.533), SIMDE_FLOAT16_VALUE( - 56.781) },
      {  SIMDE_FLOAT16_VALUE( 17.701), SIMDE_FLOAT16_VALUE( - 88.786), SIMDE_FLOAT16_VALUE( - 37.203),  SIMDE_FLOAT16_VALUE( 98.368),
        SIMDE_FLOAT16_VALUE( -  1.659), SIMDE_FLOAT16_VALUE( - 99.688),  SIMDE_FLOAT16_VALUE( 34.706), SIMDE_FLOAT16_VALUE( - 56.781) } },
    { {  SIMDE_FLOAT16_VALUE( 33.998),  SIMDE_FLOAT16_VALUE(  9.488), SIMDE_FLOAT16_VALUE( - 57.721), SIMDE_FLOAT16_VALUE( - 25.485),
        SIMDE_FLOAT16_VALUE( - 94.073), SIMDE_FLOAT16_VALUE( - 82.899),  SIMDE_FLOAT16_VALUE( 44.365), SIMDE_FLOAT16_VALUE( - 99.238) },
      {  SIMDE_FLOAT16_VALUE(  9.551),  SIMDE_FLOAT16_VALUE( 89.969), SIMDE_FLOAT16_VALUE( - 86.075), SIMDE_FLOAT16_VALUE( - 77.835),
         SIMDE_FLOAT16_VALUE(  0.704), SIMDE_FLOAT16_VALUE( - 29.406),  SIMDE_FLOAT16_VALUE( 20.191), SIMDE_FLOAT16_VALUE( - 38.311) },
      {  SIMDE_FLOAT16_VALUE(  9.488), SIMDE_FLOAT16_VALUE( - 25.485), SIMDE_FLOAT16_VALUE( - 82.899), SIMDE_FLOAT16_VALUE( - 99.238),
         SIMDE_FLOAT16_VALUE( 89.969), SIMDE_FLOAT16_VALUE( - 77.835), SIMDE_FLOAT16_VALUE( - 29.406), SIMDE_FLOAT16_VALUE( - 38.311) } },
    { {  SIMDE_FLOAT16_VALUE( 77.669),  SIMDE_FLOAT16_VALUE( 71.372),  SIMDE_FLOAT16_VALUE( 54.402),  SIMDE_FLOAT16_VALUE( 77.171),
         SIMDE_FLOAT16_VALUE( 37.815),  SIMDE_FLOAT16_VALUE( 41.042), SIMDE_FLOAT16_VALUE( - 13.386),  SIMDE_FLOAT16_VALUE( 20.748) },
      { SIMDE_FLOAT16_VALUE( - 98.103), SIMDE_FLOAT16_VALUE( - 63.759), SIMDE_FLOAT16_VALUE( - 16.397), SIMDE_FLOAT16_VALUE( - 83.256),
        SIMDE_FLOAT16_VALUE( - 23.909), SIMDE_FLOAT16_VALUE( - 69.358),  SIMDE_FLOAT16_VALUE( 53.308),  SIMDE_FLOAT16_VALUE( 92.091) },
      {  SIMDE_FLOAT16_VALUE( 71.372),  SIMDE_FLOAT16_VALUE( 77.171),  SIMDE_FLOAT16_VALUE( 41.042),  SIMDE_FLOAT16_VALUE( 20.748),
        SIMDE_FLOAT16_VALUE( - 63.759), SIMDE_FLOAT16_VALUE( - 83.256), SIMDE_FLOAT16_VALUE( - 69.358),  SIMDE_FLOAT16_VALUE( 92.091) } },
    { {  SIMDE_FLOAT16_VALUE(  0.764), SIMDE_FLOAT16_VALUE( - 93.449),  SIMDE_FLOAT16_VALUE( 78.083),  SIMDE_FLOAT16_VALUE( 10.810),
         SIMDE_FLOAT16_VALUE( 94.958),  SIMDE_FLOAT16_VALUE( 38.118),  SIMDE_FLOAT16_VALUE( 48.405),  SIMDE_FLOAT16_VALUE( 98.273) },
      { SIMDE_FLOAT16_VALUE( - 11.121), SIMDE_FLOAT16_VALUE( - 18.789), SIMDE_FLOAT16_VALUE( - 60.496), SIMDE_FLOAT16_VALUE( - 49.152),
        SIMDE_FLOAT16_VALUE( - 38.385), SIMDE_FLOAT16_VALUE( - 40.755),  SIMDE_FLOAT16_VALUE( 93.481),  SIMDE_FLOAT16_VALUE( 93.409) },
      { SIMDE_FLOAT16_VALUE( - 93.449),  SIMDE_FLOAT16_VALUE( 10.810),  SIMDE_FLOAT16_VALUE( 38.118),  SIMDE_FLOAT16_VALUE( 98.273),
        SIMDE_FLOAT16_VALUE( - 18.789), SIMDE_FLOAT16_VALUE( - 49.152), SIMDE_FLOAT16_VALUE( - 40.755),  SIMDE_FLOAT16_VALUE( 93.409) } },
    { {  SIMDE_FLOAT16_VALUE( 60.980),  SIMDE_FLOAT16_VALUE( 44.087),  SIMDE_FLOAT16_VALUE(  4.420), SIMDE_FLOAT16_VALUE( - 86.379),
        SIMDE_FLOAT16_VALUE( - 21.956),  SIMDE_FLOAT16_VALUE( 66.211),  SIMDE_FLOAT16_VALUE( 40.919),  SIMDE_FLOAT16_VALUE( 44.341) },
      { SIMDE_FLOAT16_VALUE( -  6.654),  SIMDE_FLOAT16_VALUE( 74.703),  SIMDE_FLOAT16_VALUE( 90.296), SIMDE_FLOAT16_VALUE( - 32.224),
        SIMDE_FLOAT16_VALUE( - 62.184),  SIMDE_FLOAT16_VALUE( 60.075),  SIMDE_FLOAT16_VALUE( 54.181), SIMDE_FLOAT16_VALUE( - 32.279) },
      {  SIMDE_FLOAT16_VALUE( 44.087), SIMDE_FLOAT16_VALUE( - 86.379),  SIMDE_FLOAT16_VALUE( 66.211),  SIMDE_FLOAT16_VALUE( 44.341),
         SIMDE_FLOAT16_VALUE( 74.703), SIMDE_FLOAT16_VALUE( - 32.224),  SIMDE_FLOAT16_VALUE( 60.075), SIMDE_FLOAT16_VALUE( - 32.279) } },
    { { SIMDE_FLOAT16_VALUE( - 18.086), SIMDE_FLOAT16_VALUE( - 93.397),  SIMDE_FLOAT16_VALUE( 80.704), SIMDE_FLOAT16_VALUE( - 25.237),
         SIMDE_FLOAT16_VALUE( 67.082),  SIMDE_FLOAT16_VALUE( 45.500), SIMDE_FLOAT16_VALUE( - 42.821),  SIMDE_FLOAT16_VALUE( 30.047) },
      {  SIMDE_FLOAT16_VALUE( 33.473), SIMDE_FLOAT16_VALUE( - 16.060),  SIMDE_FLOAT16_VALUE( 82.753), SIMDE_FLOAT16_VALUE( - 97.939),
         SIMDE_FLOAT16_VALUE( 55.855),  SIMDE_FLOAT16_VALUE( 32.741),  SIMDE_FLOAT16_VALUE( 82.947), SIMDE_FLOAT16_VALUE( - 16.162) },
      { SIMDE_FLOAT16_VALUE( - 93.397), SIMDE_FLOAT16_VALUE( - 25.237),  SIMDE_FLOAT16_VALUE( 45.500),  SIMDE_FLOAT16_VALUE( 30.047),
        SIMDE_FLOAT16_VALUE( - 16.060), SIMDE_FLOAT16_VALUE( - 97.939),  SIMDE_FLOAT16_VALUE( 32.741), SIMDE_FLOAT16_VALUE( - 16.162) } },
    { {  SIMDE_FLOAT16_VALUE( 39.481), SIMDE_FLOAT16_VALUE( - 43.751),  SIMDE_FLOAT16_VALUE( 46.517),  SIMDE_FLOAT16_VALUE( 73.973),
        SIMDE_FLOAT16_VALUE( - 63.824), SIMDE_FLOAT16_VALUE( - 81.545),  SIMDE_FLOAT16_VALUE( 80.086),  SIMDE_FLOAT16_VALUE(  5.275) },
      {  SIMDE_FLOAT16_VALUE( 47.213),  SIMDE_FLOAT16_VALUE( 95.067), SIMDE_FLOAT16_VALUE( - 53.211),  SIMDE_FLOAT16_VALUE( 47.692),
         SIMDE_FLOAT16_VALUE( 71.401), SIMDE_FLOAT16_VALUE( - 54.682),  SIMDE_FLOAT16_VALUE( 74.308), SIMDE_FLOAT16_VALUE( - 33.162) },
      { SIMDE_FLOAT16_VALUE( - 43.751),  SIMDE_FLOAT16_VALUE( 73.973), SIMDE_FLOAT16_VALUE( - 81.545),  SIMDE_FLOAT16_VALUE(  5.275),
         SIMDE_FLOAT16_VALUE( 95.067),  SIMDE_FLOAT16_VALUE( 47.692), SIMDE_FLOAT16_VALUE( - 54.682), SIMDE_FLOAT16_VALUE( - 33.162) } },
    { {  SIMDE_FLOAT16_VALUE( 93.150), SIMDE_FLOAT16_VALUE( - 92.626),  SIMDE_FLOAT16_VALUE( 71.362), SIMDE_FLOAT16_VALUE( - 72.353),
         SIMDE_FLOAT16_VALUE( 24.600), SIMDE_FLOAT16_VALUE( - 79.615), SIMDE_FLOAT16_VALUE( - 49.427), SIMDE_FLOAT16_VALUE( - 48.559) },
      { SIMDE_FLOAT16_VALUE( - 35.290), SIMDE_FLOAT16_VALUE( - 24.706),  SIMDE_FLOAT16_VALUE( 98.487),  SIMDE_FLOAT16_VALUE( 58.278),
        SIMDE_FLOAT16_VALUE( - 53.949), SIMDE_FLOAT16_VALUE( - 40.152),  SIMDE_FLOAT16_VALUE( 29.818),  SIMDE_FLOAT16_VALUE( 53.465) },
      { SIMDE_FLOAT16_VALUE( - 92.626), SIMDE_FLOAT16_VALUE( - 72.353), SIMDE_FLOAT16_VALUE( - 79.615), SIMDE_FLOAT16_VALUE( - 48.559),
        SIMDE_FLOAT16_VALUE( - 24.706),  SIMDE_FLOAT16_VALUE( 58.278), SIMDE_FLOAT16_VALUE( - 40.152),  SIMDE_FLOAT16_VALUE( 53.465) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x8_t a = simde_vld1q_f16(test_vec[i].a);
    simde_float16x8_t b = simde_vld1q_f16(test_vec[i].b);
    simde_float16x8_t r = simde_vuzp2q_f16(a, b);
    simde_test_arm_neon_assert_equal_f16x8(r, simde_vld1q_f16(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16x8_t a = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
    simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-100.0f, 100.0f);
    simde_float16x8_t r = simde_vuzp2q_f16(a, b);

    simde_test_arm_neon_write_f16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_f32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float32 a[4];
    simde_float32 b[4];
    simde_float32 r[4];
  } test_vec[] = {
    { { SIMDE_FLOAT32_C(  -781.39), SIMDE_FLOAT32_C(    88.58), SIMDE_FLOAT32_C(   100.41), SIMDE_FLOAT32_C(   266.53) },
      { SIMDE_FLOAT32_C(   803.29), SIMDE_FLOAT32_C(  -418.13), SIMDE_FLOAT32_C(    24.45), SIMDE_FLOAT32_C(   955.27) },
      { SIMDE_FLOAT32_C(    88.58), SIMDE_FLOAT32_C(   266.53), SIMDE_FLOAT32_C(  -418.13), SIMDE_FLOAT32_C(   955.27) } },
    { { SIMDE_FLOAT32_C(   -28.60), SIMDE_FLOAT32_C(  -622.57), SIMDE_FLOAT32_C(   870.72), SIMDE_FLOAT32_C(   957.13) },
      { SIMDE_FLOAT32_C(  -115.95), SIMDE_FLOAT32_C(  -205.52), SIMDE_FLOAT32_C(  -866.47), SIMDE_FLOAT32_C(  -650.57) },
      { SIMDE_FLOAT32_C(  -622.57), SIMDE_FLOAT32_C(   957.13), SIMDE_FLOAT32_C(  -205.52), SIMDE_FLOAT32_C(  -650.57) } },
    { { SIMDE_FLOAT32_C(   110.44), SIMDE_FLOAT32_C(   300.16), SIMDE_FLOAT32_C(  -300.84), SIMDE_FLOAT32_C(   217.46) },
      { SIMDE_FLOAT32_C(  -171.62), SIMDE_FLOAT32_C(   375.64), SIMDE_FLOAT32_C(   342.58), SIMDE_FLOAT32_C(    76.53) },
      { SIMDE_FLOAT32_C(   300.16), SIMDE_FLOAT32_C(   217.46), SIMDE_FLOAT32_C(   375.64), SIMDE_FLOAT32_C(    76.53) } },
    { { SIMDE_FLOAT32_C(  -412.19), SIMDE_FLOAT32_C(  -951.34), SIMDE_FLOAT32_C(   730.36), SIMDE_FLOAT32_C(   100.26) },
      { SIMDE_FLOAT32_C(   107.62), SIMDE_FLOAT32_C(   786.75), SIMDE_FLOAT32_C(   778.67), SIMDE_FLOAT32_C(   326.23) },
      { SIMDE_FLOAT32_C(  -951.34), SIMDE_FLOAT32_C(   100.26), SIMDE_FLOAT32_C(   786.75), SIMDE_FLOAT32_C(   326.23) } },
    { { SIMDE_FLOAT32_C(  -124.68), SIMDE_FLOAT32_C(  -120.92), SIMDE_FLOAT32_C(  -407.25), SIMDE_FLOAT32_C(  -321.39) },
      { SIMDE_FLOAT32_C(   460.95), SIMDE_FLOAT32_C(   617.20), SIMDE_FLOAT32_C(  -366.12), SIMDE_FLOAT32_C(  -567.65) },
      { SIMDE_FLOAT32_C(  -120.92), SIMDE_FLOAT32_C(  -321.39), SIMDE_FLOAT32_C(   617.20), SIMDE_FLOAT32_C(  -567.65) } },
    { { SIMDE_FLOAT32_C(   994.64), SIMDE_FLOAT32_C(  -495.39), SIMDE_FLOAT32_C(  -610.52), SIMDE_FLOAT32_C(  -121.31) },
      { SIMDE_FLOAT32_C(   299.08), SIMDE_FLOAT32_C(  -477.00), SIMDE_FLOAT32_C(   228.11), SIMDE_FLOAT32_C(  -590.48) },
      { SIMDE_FLOAT32_C(  -495.39), SIMDE_FLOAT32_C(  -121.31), SIMDE_FLOAT32_C(  -477.00), SIMDE_FLOAT32_C(  -590.48) } },
    { { SIMDE_FLOAT32_C(   823.17), SIMDE_FLOAT32_C(   927.28), SIMDE_FLOAT32_C(   626.99), SIMDE_FLOAT32_C(  -348.45) },
      { SIMDE_FLOAT32_C(   302.91), SIMDE_FLOAT32_C(   -30.44), SIMDE_FLOAT32_C(   728.08), SIMDE_FLOAT32_C(   890.73) },
      { SIMDE_FLOAT32_C(   927.28), SIMDE_FLOAT32_C(  -348.45), SIMDE_FLOAT32_C(   -30.44), SIMDE_FLOAT32_C(   890.73) } },
    { { SIMDE_FLOAT32_C(    18.22), SIMDE_FLOAT32_C(   458.45), SIMDE_FLOAT32_C(    -9.02), SIMDE_FLOAT32_C(  -874.16) },
      { SIMDE_FLOAT32_C(   245.19), SIMDE_FLOAT32_C(  -230.35), SIMDE_FLOAT32_C(   452.07), SIMDE_FLOAT32_C(  -879.48) },
      { SIMDE_FLOAT32_C(   458.45), SIMDE_FLOAT32_C(  -874.16), SIMDE_FLOAT32_C(  -230.35), SIMDE_FLOAT32_C(  -879.48) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
    simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
    simde_float32x4_t r = simde_vuzp2q_f32(a, b);
    simde_test_arm_neon_assert_equal_f32x4(r, simde_vld1q_f32(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float32x4_t a = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t b = simde_test_arm_neon_random_f32x4(-1000.0f, 1000.0f);
    simde_float32x4_t r = simde_vuzp2q_f32(a, b);

    simde_test_arm_neon_write_f32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_f64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float64 a[2];
    simde_float64 b[2];
    simde_float64 r[2];
  } test_vec[] = {
    { { SIMDE_FLOAT64_C(  -339.85), SIMDE_FLOAT64_C(  -574.12) },
      { SIMDE_FLOAT64_C(   477.11), SIMDE_FLOAT64_C(   -17.44) },
      { SIMDE_FLOAT64_C(  -574.12), SIMDE_FLOAT64_C(   -17.44) } },
    { { SIMDE_FLOAT64_C(  -819.58), SIMDE_FLOAT64_C(  -361.32) },
      { SIMDE_FLOAT64_C(  -283.52), SIMDE_FLOAT64_C(   -25.85) },
      { SIMDE_FLOAT64_C(  -361.32), SIMDE_FLOAT64_C(   -25.85) } },
    { { SIMDE_FLOAT64_C(   881.34), SIMDE_FLOAT64_C(   140.92) },
      { SIMDE_FLOAT64_C(  -394.34), SIMDE_FLOAT64_C(   314.91) },
      { SIMDE_FLOAT64_C(   140.92), SIMDE_FLOAT64_C(   314.91) } },
    { { SIMDE_FLOAT64_C(  -960.58), SIMDE_FLOAT64_C(   916.46) },
      { SIMDE_FLOAT64_C(    40.77), SIMDE_FLOAT64_C(   550.34) },
      { SIMDE_FLOAT64_C(   916.46), SIMDE_FLOAT64_C(   550.34) } },
    { { SIMDE_FLOAT64_C(   784.55), SIMDE_FLOAT64_C(  -320.66) },
      { SIMDE_FLOAT64_C(   942.86), SIMDE_FLOAT64_C(   541.82) },
      { SIMDE_FLOAT64_C(  -320.66), SIMDE_FLOAT64_C(   541.82) } },
    { { SIMDE_FLOAT64_C(   991.85), SIMDE_FLOAT64_C(   533.80) },
      { SIMDE_FLOAT64_C(  -388.26), SIMDE_FLOAT64_C(   204.04) },
      { SIMDE_FLOAT64_C(   533.80), SIMDE_FLOAT64_C(   204.04) } },
    { { SIMDE_FLOAT64_C(   -77.27), SIMDE_FLOAT64_C(   884.24) },
      { SIMDE_FLOAT64_C(   202.14), SIMDE_FLOAT64_C(   892.43) },
      { SIMDE_FLOAT64_C(   884.24), SIMDE_FLOAT64_C(   892.43) } },
    { { SIMDE_FLOAT64_C(  -326.62), SIMDE_FLOAT64_C(  -793.35) },
      { SIMDE_FLOAT64_C(  -340.99), SIMDE_FLOAT64_C(   333.54) },
      { SIMDE_FLOAT64_C(  -793.35), SIMDE_FLOAT64_C(   333.54) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
    simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b);
    simde_float64x2_t r = simde_vuzp2q_f64(a, b);

    simde_test_arm_neon_assert_equal_f64x2(r, simde_vld1q_f64(test_vec[i].r), 1);
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float64x2_t a = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde_float64x2_t b = simde_test_arm_neon_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde_float64x2_t r = simde_vuzp2q_f64(a, b);

    simde_test_arm_neon_write_f64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[16];
    int8_t b[16];
    int8_t r[16];
  } test_vec[] = {
    { {  INT8_C(  69),  INT8_C(  59), -INT8_C(  19),  INT8_C(  70), -INT8_C(  88), -INT8_C(  12),  INT8_C(  31), -INT8_C(  75),
        -INT8_C(  45), -INT8_C( 113), -INT8_C(  84), -INT8_C( 102),  INT8_C(  44),  INT8_C( 120),  INT8_C(  29),  INT8_C(  35) },
      {  INT8_C(  95), -INT8_C( 119),  INT8_C(  70),  INT8_C(  64), -INT8_C(  30),  INT8_C( 105), -INT8_C(  87),  INT8_C(  30),
        -INT8_C(  21),  INT8_C(  45),  INT8_C(  82),  INT8_C(  18), -INT8_C( 117),  INT8_C( 116),  INT8_C(  26), -INT8_C(  48) },
      {  INT8_C(  59),  INT8_C(  70), -INT8_C(  12), -INT8_C(  75), -INT8_C( 113), -INT8_C( 102),  INT8_C( 120),  INT8_C(  35),
        -INT8_C( 119),  INT8_C(  64),  INT8_C( 105),  INT8_C(  30),  INT8_C(  45),  INT8_C(  18),  INT8_C( 116), -INT8_C(  48) } },
    { { -INT8_C(  81),  INT8_C(   7),  INT8_C(  22),  INT8_C(  87), -INT8_C(   4),  INT8_C(  53),  INT8_C(  12), -INT8_C(  49),
        -INT8_C(  59), -INT8_C(  71),  INT8_C( 105), -INT8_C(  15),  INT8_C(  49), -INT8_C( 121),  INT8_C(  21), -INT8_C( 112) },
      {  INT8_C(  16),  INT8_C(  91), -INT8_C(  48), -INT8_C(  14), -INT8_C(  59),  INT8_C( 121),  INT8_C(  16), -INT8_C(  80),
        -INT8_C(  90),  INT8_C(  99), -INT8_C(  61),  INT8_C(  49), -INT8_C(  41), -INT8_C(  35),  INT8_C(   1), -INT8_C( 121) },
      {  INT8_C(   7),  INT8_C(  87),  INT8_C(  53), -INT8_C(  49), -INT8_C(  71), -INT8_C(  15), -INT8_C( 121), -INT8_C( 112),
         INT8_C(  91), -INT8_C(  14),  INT8_C( 121), -INT8_C(  80),  INT8_C(  99),  INT8_C(  49), -INT8_C(  35), -INT8_C( 121) } },
    { { -INT8_C(  28),  INT8_C(  23), -INT8_C(  34), -INT8_C(  32),  INT8_C(  77), -INT8_C(  21), -INT8_C(  80),  INT8_C(  18),
        -INT8_C(  92),  INT8_C(  25),  INT8_C(   3), -INT8_C(  43), -INT8_C(  96),  INT8_C(  24),  INT8_C( 101), -INT8_C(  79) },
      {  INT8_C( 116),  INT8_C(  53), -INT8_C(  93),  INT8_C(  57), -INT8_C(  82), -INT8_C(  76), -INT8_C(  23),  INT8_C(  84),
         INT8_C(  23), -INT8_C(  84), -INT8_C( 122), -INT8_C(  18), -INT8_C( 119), -INT8_C( 121),  INT8_C( 117),  INT8_C( 110) },
      {  INT8_C(  23), -INT8_C(  32), -INT8_C(  21),  INT8_C(  18),  INT8_C(  25), -INT8_C(  43),  INT8_C(  24), -INT8_C(  79),
         INT8_C(  53),  INT8_C(  57), -INT8_C(  76),  INT8_C(  84), -INT8_C(  84), -INT8_C(  18), -INT8_C( 121),  INT8_C( 110) } },
    { { -INT8_C(  97),  INT8_C(  84),  INT8_C(  78), -INT8_C(  20),  INT8_C(  63), -INT8_C(   2), -INT8_C(   2), -INT8_C(  29),
         INT8_C(  24),  INT8_C(   1), -INT8_C(  72), -INT8_C(  72),  INT8_C(  26),  INT8_C(  29),  INT8_C( 105), -INT8_C( 114) },
      {  INT8_C(  82),  INT8_C(  13), -INT8_C(  57),  INT8_C(   0), -INT8_C(  63), -INT8_C(  80),  INT8_C(  84), -INT8_C(  40),
         INT8_C(  93), -INT8_C(  38), -INT8_C(  58), -INT8_C(  26),  INT8_C(  98),  INT8_C(  60),  INT8_C(  84),  INT8_C(   1) },
      {  INT8_C(  84), -INT8_C(  20), -INT8_C(   2), -INT8_C(  29),  INT8_C(   1), -INT8_C(  72),  INT8_C(  29), -INT8_C( 114),
         INT8_C(  13),  INT8_C(   0), -INT8_C(  80), -INT8_C(  40), -INT8_C(  38), -INT8_C(  26),  INT8_C(  60),  INT8_C(   1) } },
    { { -INT8_C( 112), -INT8_C(  93), -INT8_C(  19), -INT8_C(  49), -INT8_C(  95), -INT8_C(  21), -INT8_C(  78), -INT8_C(  71),
        -INT8_C(  20),  INT8_C( 106),  INT8_C( 114),  INT8_C(   6), -INT8_C( 121), -INT8_C(  37), -INT8_C( 108), -INT8_C(  39) },
      { -INT8_C(  24),  INT8_C(  91), -INT8_C(  39), -INT8_C(  87),  INT8_C(  12),  INT8_C(  45), -INT8_C( 127),  INT8_C( 105),
         INT8_C(   8),  INT8_C(  72),  INT8_C(  79),  INT8_C( 106), -INT8_C( 124), -INT8_C(  92),  INT8_C( 107),  INT8_C(  20) },
      { -INT8_C(  93), -INT8_C(  49), -INT8_C(  21), -INT8_C(  71),  INT8_C( 106),  INT8_C(   6), -INT8_C(  37), -INT8_C(  39),
         INT8_C(  91), -INT8_C(  87),  INT8_C(  45),  INT8_C( 105),  INT8_C(  72),  INT8_C( 106), -INT8_C(  92),  INT8_C(  20) } },
    { {  INT8_C(  71),  INT8_C(  88), -INT8_C(  29), -INT8_C(  24),  INT8_C(  67), -INT8_C( 107), -INT8_C(  94),  INT8_C(  47),
        -INT8_C(   1),  INT8_C(  20),  INT8_C(  54), -INT8_C( 122), -INT8_C(  17), -INT8_C(  54),  INT8_C(  95), -INT8_C(  40) },
      {  INT8_C(  38),  INT8_C(  56), -INT8_C( 127),  INT8_C(  50),  INT8_C( 101),  INT8_C(   3), -INT8_C( 101),  INT8_C( 109),
         INT8_C(  75), -INT8_C(  22), -INT8_C(  41), -INT8_C(  49), -INT8_C( 114),  INT8_C(  66), -INT8_C(  29), -INT8_C(  43) },
      {  INT8_C(  88), -INT8_C(  24), -INT8_C( 107),  INT8_C(  47),  INT8_C(  20), -INT8_C( 122), -INT8_C(  54), -INT8_C(  40),
         INT8_C(  56),  INT8_C(  50),  INT8_C(   3),  INT8_C( 109), -INT8_C(  22), -INT8_C(  49),  INT8_C(  66), -INT8_C(  43) } },
    { { -INT8_C( 102), -INT8_C(  58), -INT8_C(  66), -INT8_C(  35),  INT8_C(  91),  INT8_C(  96),  INT8_C(  13),  INT8_C(  90),
         INT8_C( 116),  INT8_C(  67), -INT8_C(  32),  INT8_C(  99),  INT8_C(  13),  INT8_C(  63),  INT8_C(  59),  INT8_C(  51) },
      {  INT8_C( 119), -INT8_C(  67),  INT8_C( 101), -INT8_C(  36), -INT8_C(  64),  INT8_C(   0),  INT8_C(  74),  INT8_C(  11),
        -INT8_C(  21),  INT8_C(  33), -INT8_C(  38),  INT8_C( 121),  INT8_C( 100), -INT8_C(  67),  INT8_C(  79), -INT8_C(   2) },
      { -INT8_C(  58), -INT8_C(  35),  INT8_C(  96),  INT8_C(  90),  INT8_C(  67),  INT8_C(  99),  INT8_C(  63),  INT8_C(  51),
        -INT8_C(  67), -INT8_C(  36),  INT8_C(   0),  INT8_C(  11),  INT8_C(  33),  INT8_C( 121), -INT8_C(  67), -INT8_C(   2) } },
    { { -INT8_C( 125),  INT8_C(  13), -INT8_C(  36), -INT8_C(  34),  INT8_C( 109), -INT8_C(  23),  INT8_C(  56), -INT8_C(  31),
         INT8_C(  44),  INT8_C(  24),  INT8_C(  68),  INT8_C(  57),  INT8_C(  87),      INT8_MIN,  INT8_C( 109), -INT8_C(  50) },
      {  INT8_C(  61), -INT8_C(  46), -INT8_C(  86), -INT8_C(   3), -INT8_C(  45), -INT8_C(  12),  INT8_C(   8), -INT8_C(  66),
         INT8_C(  22), -INT8_C(  30),  INT8_C(  55),  INT8_C( 122), -INT8_C(  97), -INT8_C( 122),  INT8_C( 120),  INT8_C(  34) },
      {  INT8_C(  13), -INT8_C(  34), -INT8_C(  23), -INT8_C(  31),  INT8_C(  24),  INT8_C(  57),      INT8_MIN, -INT8_C(  50),
        -INT8_C(  46), -INT8_C(   3), -INT8_C(  12), -INT8_C(  66), -INT8_C(  30),  INT8_C( 122), -INT8_C( 122),  INT8_C(  34) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
    simde_int8x16_t b = simde_vld1q_s8(test_vec[i].b);
    simde_int8x16_t r = simde_vuzp2q_s8(a, b);

    simde_test_arm_neon_assert_equal_i8x16(r, simde_vld1q_s8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int8x16_t a = simde_test_arm_neon_random_i8x16();
    simde_int8x16_t b = simde_test_arm_neon_random_i8x16();
    simde_int8x16_t r = simde_vuzp2q_s8(a, b);

    simde_test_arm_neon_write_i8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[8];
    int16_t b[8];
    int16_t r[8];
  } test_vec[] = {
    { { -INT16_C( 22831),  INT16_C( 10979), -INT16_C( 19770), -INT16_C(  5690),  INT16_C(  6784), -INT16_C(   857), -INT16_C( 21684),  INT16_C(  4304) },
      {  INT16_C( 17678), -INT16_C(  9320), -INT16_C( 16347),  INT16_C( 18514),  INT16_C( 28188), -INT16_C( 11922), -INT16_C( 28199), -INT16_C( 21770) },
      {  INT16_C( 10979), -INT16_C(  5690), -INT16_C(   857),  INT16_C(  4304), -INT16_C(  9320),  INT16_C( 18514), -INT16_C( 11922), -INT16_C( 21770) } },
    { { -INT16_C(  9673), -INT16_C(   555), -INT16_C( 25716),  INT16_C(  3303), -INT16_C( 29003),  INT16_C(   520), -INT16_C( 10183),  INT16_C( 18194) },
      { -INT16_C( 21987),  INT16_C( 17186),  INT16_C( 29802), -INT16_C( 31093), -INT16_C(  1566), -INT16_C( 17321),  INT16_C( 19850), -INT16_C( 16026) },
      { -INT16_C(   555),  INT16_C(  3303),  INT16_C(   520),  INT16_C( 18194),  INT16_C( 17186), -INT16_C( 31093), -INT16_C( 17321), -INT16_C( 16026) } },
    { {  INT16_C( 15143), -INT16_C( 19266), -INT16_C( 23082), -INT16_C( 29504), -INT16_C( 14029),  INT16_C( 27790), -INT16_C( 24415), -INT16_C( 16460) },
      { -INT16_C( 10678), -INT16_C( 19454), -INT16_C( 29365),  INT16_C( 11578), -INT16_C( 28282),  INT16_C(  4329),  INT16_C( 20702),  INT16_C(  1745) },
      { -INT16_C( 19266), -INT16_C( 29504),  INT16_C( 27790), -INT16_C( 16460), -INT16_C( 19454),  INT16_C( 11578),  INT16_C(  4329),  INT16_C(  1745) } },
    { { -INT16_C( 28789),  INT16_C( 25274),  INT16_C( 31285),  INT16_C( 26862),  INT16_C( 31811), -INT16_C(  6699), -INT16_C( 30436),  INT16_C( 26276) },
      { -INT16_C( 22945), -INT16_C( 21990),  INT16_C( 21555), -INT16_C( 17960), -INT16_C( 15899), -INT16_C( 15415), -INT16_C( 26095), -INT16_C( 25143) },
      {  INT16_C( 25274),  INT16_C( 26862), -INT16_C(  6699),  INT16_C( 26276), -INT16_C( 21990), -INT16_C( 17960), -INT16_C( 15415), -INT16_C( 25143) } },
    { { -INT16_C( 31959),  INT16_C( 24319), -INT16_C(  4610),  INT16_C( 16839), -INT16_C( 25495), -INT16_C( 31450), -INT16_C( 13787), -INT16_C( 31509) },
      {  INT16_C(  1392), -INT16_C( 23761),  INT16_C(  1881),  INT16_C( 15964),  INT16_C(  9672), -INT16_C(  9727), -INT16_C( 13377), -INT16_C(  5769) },
      {  INT16_C( 24319),  INT16_C( 16839), -INT16_C( 31450), -INT16_C( 31509), -INT16_C( 23761),  INT16_C( 15964), -INT16_C(  9727), -INT16_C(  5769) } },
    { {  INT16_C( 30286),  INT16_C( 19527),  INT16_C(  3683), -INT16_C( 13170), -INT16_C( 19286), -INT16_C( 12463),  INT16_C( 15487), -INT16_C(  4268) },
      { -INT16_C( 31935), -INT16_C( 25965), -INT16_C(  4214),  INT16_C( 21208), -INT16_C(  9963), -INT16_C( 11220), -INT16_C( 23644), -INT16_C(  3139) },
      {  INT16_C( 19527), -INT16_C( 13170), -INT16_C( 12463), -INT16_C(  4268), -INT16_C( 25965),  INT16_C( 21208), -INT16_C( 11220), -INT16_C(  3139) } },
    { {  INT16_C(  1305),  INT16_C( 31807), -INT16_C( 13037), -INT16_C( 16824), -INT16_C( 26238),  INT16_C(   397), -INT16_C(  7723),  INT16_C(  5872) },
      { -INT16_C( 31900), -INT16_C(  4432), -INT16_C( 30605), -INT16_C( 30655),  INT16_C( 28002),  INT16_C(  1628),  INT16_C(  6673),  INT16_C( 11001) },
      {  INT16_C( 31807), -INT16_C( 16824),  INT16_C(   397),  INT16_C(  5872), -INT16_C(  4432), -INT16_C( 30655),  INT16_C(  1628),  INT16_C( 11001) } },
    { {  INT16_C( 14623),  INT16_C( 12967), -INT16_C(  4346), -INT16_C( 30480),  INT16_C( 32393),  INT16_C( 24201),  INT16_C( 31327), -INT16_C( 15243) },
      {  INT16_C(  9725),  INT16_C( 28850), -INT16_C(  3154),  INT16_C(  4344),  INT16_C( 21857),  INT16_C( 29206),  INT16_C(  4207), -INT16_C( 29028) },
      {  INT16_C( 12967), -INT16_C( 30480),  INT16_C( 24201), -INT16_C( 15243),  INT16_C( 28850),  INT16_C(  4344),  INT16_C( 29206), -INT16_C( 29028) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
    simde_int16x8_t b = simde_vld1q_s16(test_vec[i].b);
    simde_int16x8_t r = simde_vuzp2q_s16(a, b);

    simde_test_arm_neon_assert_equal_i16x8(r, simde_vld1q_s16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int16x8_t a = simde_test_arm_neon_random_i16x8();
    simde_int16x8_t b = simde_test_arm_neon_random_i16x8();
    simde_int16x8_t r = simde_vuzp2q_s16(a, b);

    simde_test_arm_neon_write_i16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[4];
    int32_t b[4];
    int32_t r[4];
  } test_vec[] = {
    { {  INT32_C(  1680086568),  INT32_C(  1994775530), -INT32_C(   313035908), -INT32_C(  1619858099) },
      {  INT32_C(  1449835667),  INT32_C(  1456501112), -INT32_C(    78577876), -INT32_C(  1017570149) },
      {  INT32_C(  1994775530), -INT32_C(  1619858099),  INT32_C(  1456501112), -INT32_C(  1017570149) } },
    { {  INT32_C(   489127474), -INT32_C(   711783335), -INT32_C(   842864001),  INT32_C(  1802253528) },
      {  INT32_C(  1774311153),  INT32_C(  1941934407),  INT32_C(   745410705),  INT32_C(  1609549868) },
      { -INT32_C(   711783335),  INT32_C(  1802253528),  INT32_C(  1941934407),  INT32_C(  1609549868) } },
    { { -INT32_C(  1619257786), -INT32_C(  1586229470), -INT32_C(   781306119),  INT32_C(  1547491947) },
      { -INT32_C(   138019408),  INT32_C(   543851919), -INT32_C(  1051928171), -INT32_C(   417317983) },
      { -INT32_C(  1586229470),  INT32_C(  1547491947),  INT32_C(   543851919), -INT32_C(   417317983) } },
    { {  INT32_C(  1938201681), -INT32_C(  1525351765), -INT32_C(  1686731984),  INT32_C(   251114333) },
      {  INT32_C(  1057340848), -INT32_C(   681611198), -INT32_C(   359093431),  INT32_C(   936491494) },
      { -INT32_C(  1525351765),  INT32_C(   251114333), -INT32_C(   681611198),  INT32_C(   936491494) } },
    { {  INT32_C(    27940693), -INT32_C(  2119778479), -INT32_C(  1625482174), -INT32_C(  2136140593) },
      {  INT32_C(   331330513),  INT32_C(  1827282723), -INT32_C(  1319730230), -INT32_C(  1847056580) },
      { -INT32_C(  2119778479), -INT32_C(  2136140593),  INT32_C(  1827282723), -INT32_C(  1847056580) } },
    { { -INT32_C(   812477570), -INT32_C(  1806682030),  INT32_C(   607350101),  INT32_C(  1403314562) },
      { -INT32_C(  1217960812),  INT32_C(  1294160259),  INT32_C(   285112788),  INT32_C(   513992608) },
      { -INT32_C(  1806682030),  INT32_C(  1403314562),  INT32_C(  1294160259),  INT32_C(   513992608) } },
    { { -INT32_C(   856869766), -INT32_C(  1033880211),  INT32_C(   770085803),  INT32_C(   142642036) },
      {  INT32_C(  1925179375),  INT32_C(   230679097), -INT32_C(    81871269),  INT32_C(   521781413) },
      { -INT32_C(  1033880211),  INT32_C(   142642036),  INT32_C(   230679097),  INT32_C(   521781413) } },
    { {  INT32_C(  1642792692), -INT32_C(   282899644),  INT32_C(  1394346718), -INT32_C(  2074370923) },
      { -INT32_C(  1107944572),  INT32_C(  1506457085),  INT32_C(   408217715), -INT32_C(  1657311576) },
      { -INT32_C(   282899644), -INT32_C(  2074370923),  INT32_C(  1506457085), -INT32_C(  1657311576) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
    simde_int32x4_t b = simde_vld1q_s32(test_vec[i].b);
    simde_int32x4_t r = simde_vuzp2q_s32(a, b);
    simde_test_arm_neon_assert_equal_i32x4(r, simde_vld1q_s32(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int32x4_t a = simde_test_arm_neon_random_i32x4();
    simde_int32x4_t b = simde_test_arm_neon_random_i32x4();
    simde_int32x4_t r = simde_vuzp2q_s32(a, b);

    simde_test_arm_neon_write_i32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int64_t a[2];
    int64_t b[2];
    int64_t r[2];
  } test_vec[] = {
    { { -INT64_C( 1572565854752738975),  INT64_C( 1665189159162091459) },
      {  INT64_C( 6552428771358605317),  INT64_C( 3695040570659838411) },
      {  INT64_C( 1665189159162091459),  INT64_C( 3695040570659838411) } },
    { { -INT64_C( 5262955398493842340), -INT64_C( 7196877999693453743) },
      { -INT64_C( 5608706773722595186), -INT64_C( 4035965878303981577) },
      { -INT64_C( 7196877999693453743), -INT64_C( 4035965878303981577) } },
    { { -INT64_C( 7720355845962003918),  INT64_C( 7612134344586186096) },
      {  INT64_C( 7590360267460416444), -INT64_C(  175304159150248608) },
      {  INT64_C( 7612134344586186096), -INT64_C(  175304159150248608) } },
    { { -INT64_C( 7056017815032929221),  INT64_C( 2850576714195906379) },
      { -INT64_C( 8667423604670282021),  INT64_C( 6221128166867593869) },
      {  INT64_C( 2850576714195906379),  INT64_C( 6221128166867593869) } },
    { { -INT64_C( 4606082402684143801), -INT64_C( 2582404268411144041) },
      { -INT64_C( 6707583791840758725),  INT64_C( 7295075065064471499) },
      { -INT64_C( 2582404268411144041),  INT64_C( 7295075065064471499) } },
    { { -INT64_C( 7927198485548690745), -INT64_C( 7817196344013692249) },
      {  INT64_C( 6370587472936938929),  INT64_C( 8835355148860482074) },
      { -INT64_C( 7817196344013692249),  INT64_C( 8835355148860482074) } },
    { {  INT64_C( 1016040448205420686),  INT64_C( 2053704565793336725) },
      {  INT64_C( 7983837966002976230),  INT64_C( 1574364892958690221) },
      {  INT64_C( 2053704565793336725),  INT64_C( 1574364892958690221) } },
    { { -INT64_C( 2868311088181702468),  INT64_C(  498568190981695332) },
      { -INT64_C( 4215856231531032901),  INT64_C( 2732838800146637904) },
      {  INT64_C(  498568190981695332),  INT64_C( 2732838800146637904) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
    simde_int64x2_t b = simde_vld1q_s64(test_vec[i].b);
    simde_int64x2_t r = simde_vuzp2q_s64(a, b);
    simde_test_arm_neon_assert_equal_i64x2(r, simde_vld1q_s64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int64x2_t a = simde_test_arm_neon_random_i64x2();
    simde_int64x2_t b = simde_test_arm_neon_random_i64x2();
    simde_int64x2_t r = simde_vuzp2q_s64(a, b);

    simde_test_arm_neon_write_i64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_i64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_i64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C(222), UINT8_C(236), UINT8_C(203), UINT8_C(186), UINT8_C(216), UINT8_C(218), UINT8_C( 88), UINT8_C(216),
        UINT8_C(199), UINT8_C(141), UINT8_C( 87), UINT8_C(129), UINT8_C( 11), UINT8_C(113), UINT8_C(215), UINT8_C( 37) },
      { UINT8_C(103), UINT8_C( 87), UINT8_C(221), UINT8_C( 35), UINT8_C(248), UINT8_C( 47), UINT8_C(244), UINT8_C(217),
        UINT8_C( 30), UINT8_C( 82), UINT8_C(106), UINT8_C(233), UINT8_C( 90), UINT8_C(182), UINT8_C(233), UINT8_C( 56) },
      { UINT8_C(236), UINT8_C(186), UINT8_C(218), UINT8_C(216), UINT8_C(141), UINT8_C(129), UINT8_C(113), UINT8_C( 37),
        UINT8_C( 87), UINT8_C( 35), UINT8_C( 47), UINT8_C(217), UINT8_C( 82), UINT8_C(233), UINT8_C(182), UINT8_C( 56) } },
    { { UINT8_C(162), UINT8_C(180), UINT8_C(242), UINT8_C(122), UINT8_C(143), UINT8_C( 74), UINT8_C( 83), UINT8_C( 86),
        UINT8_C(215), UINT8_C(170), UINT8_C(215), UINT8_C(226), UINT8_C( 27), UINT8_C(175), UINT8_C(  7), UINT8_C(131) },
      { UINT8_C(  6), UINT8_C(229), UINT8_C(166), UINT8_C(254), UINT8_C( 20), UINT8_C(155), UINT8_C(216), UINT8_C( 50),
        UINT8_C(237), UINT8_C( 66), UINT8_C( 28), UINT8_C( 71), UINT8_C(248), UINT8_C(  5), UINT8_C(127), UINT8_C(154) },
      { UINT8_C(180), UINT8_C(122), UINT8_C( 74), UINT8_C( 86), UINT8_C(170), UINT8_C(226), UINT8_C(175), UINT8_C(131),
        UINT8_C(229), UINT8_C(254), UINT8_C(155), UINT8_C( 50), UINT8_C( 66), UINT8_C( 71), UINT8_C(  5), UINT8_C(154) } },
    { { UINT8_C(185), UINT8_C(113), UINT8_C( 21), UINT8_C( 72), UINT8_C(187), UINT8_C(104), UINT8_C(159), UINT8_C(146),
        UINT8_C( 18), UINT8_C(118), UINT8_C(116), UINT8_C( 45), UINT8_C( 37), UINT8_C(124), UINT8_C(176), UINT8_C( 44) },
      { UINT8_C( 97), UINT8_C( 87), UINT8_C( 42), UINT8_C(117), UINT8_C(242), UINT8_C(  2), UINT8_C(168), UINT8_C(223),
        UINT8_C( 69), UINT8_C(196), UINT8_C( 39), UINT8_C( 61), UINT8_C(201), UINT8_C(166), UINT8_C(216), UINT8_C(130) },
      { UINT8_C(113), UINT8_C( 72), UINT8_C(104), UINT8_C(146), UINT8_C(118), UINT8_C( 45), UINT8_C(124), UINT8_C( 44),
        UINT8_C( 87), UINT8_C(117), UINT8_C(  2), UINT8_C(223), UINT8_C(196), UINT8_C( 61), UINT8_C(166), UINT8_C(130) } },
    { { UINT8_C( 24), UINT8_C(237), UINT8_C(203), UINT8_C(211), UINT8_C( 85), UINT8_C(106), UINT8_C(102), UINT8_C(103),
        UINT8_C(224), UINT8_C(218), UINT8_C(148), UINT8_C(  6), UINT8_C( 86), UINT8_C( 69), UINT8_C( 50), UINT8_C(183) },
      { UINT8_C(156), UINT8_C( 92), UINT8_C( 45), UINT8_C(142), UINT8_C( 95), UINT8_C(213), UINT8_C(109), UINT8_C(164),
        UINT8_C(153), UINT8_C(148), UINT8_C(225), UINT8_C( 98), UINT8_C( 59), UINT8_C(185), UINT8_C(228), UINT8_C( 83) },
      { UINT8_C(237), UINT8_C(211), UINT8_C(106), UINT8_C(103), UINT8_C(218), UINT8_C(  6), UINT8_C( 69), UINT8_C(183),
        UINT8_C( 92), UINT8_C(142), UINT8_C(213), UINT8_C(164), UINT8_C(148), UINT8_C( 98), UINT8_C(185), UINT8_C( 83) } },
    { { UINT8_C(166), UINT8_C(175), UINT8_C( 38), UINT8_C(251), UINT8_C( 25), UINT8_C(140), UINT8_C( 98), UINT8_C(250),
        UINT8_C(103), UINT8_C(247), UINT8_C(  0), UINT8_C(189), UINT8_C( 60), UINT8_C( 50), UINT8_C(117), UINT8_C(216) },
      { UINT8_C(142), UINT8_C(162), UINT8_C(102), UINT8_C(237), UINT8_C(119), UINT8_C(211), UINT8_C(145), UINT8_C( 16),
        UINT8_C(104), UINT8_C(115), UINT8_C(114), UINT8_C(163), UINT8_C( 44), UINT8_C( 86), UINT8_C(246), UINT8_C(211) },
      { UINT8_C(175), UINT8_C(251), UINT8_C(140), UINT8_C(250), UINT8_C(247), UINT8_C(189), UINT8_C( 50), UINT8_C(216),
        UINT8_C(162), UINT8_C(237), UINT8_C(211), UINT8_C( 16), UINT8_C(115), UINT8_C(163), UINT8_C( 86), UINT8_C(211) } },
    { { UINT8_C(  6), UINT8_C( 28), UINT8_C(206), UINT8_C( 31), UINT8_C(169), UINT8_C( 49), UINT8_C( 25), UINT8_C( 16),
        UINT8_C( 40), UINT8_C( 25), UINT8_C(205), UINT8_C(100), UINT8_C( 75), UINT8_C( 66), UINT8_C( 60), UINT8_C(218) },
      { UINT8_C(228), UINT8_C(162), UINT8_C(199), UINT8_C( 91), UINT8_C(117), UINT8_C( 89), UINT8_C(107), UINT8_C(221),
        UINT8_C(204), UINT8_C(221), UINT8_C(128), UINT8_C(248), UINT8_C( 52), UINT8_C(118), UINT8_C(203), UINT8_C( 58) },
      { UINT8_C( 28), UINT8_C( 31), UINT8_C( 49), UINT8_C( 16), UINT8_C( 25), UINT8_C(100), UINT8_C( 66), UINT8_C(218),
        UINT8_C(162), UINT8_C( 91), UINT8_C( 89), UINT8_C(221), UINT8_C(221), UINT8_C(248), UINT8_C(118), UINT8_C( 58) } },
    { { UINT8_C(147), UINT8_C(154), UINT8_C( 89), UINT8_C( 60), UINT8_C(203), UINT8_C(115), UINT8_C( 76), UINT8_C(243),
        UINT8_C(140), UINT8_C( 25), UINT8_C( 87), UINT8_C(216), UINT8_C( 92), UINT8_C(147), UINT8_C(178), UINT8_C( 64) },
      { UINT8_C( 53), UINT8_C(121), UINT8_C(156), UINT8_C(170), UINT8_C(210), UINT8_C(  7), UINT8_C(136), UINT8_C(158),
        UINT8_C(229), UINT8_C(  8), UINT8_C(151), UINT8_C( 25), UINT8_C(127), UINT8_C( 98), UINT8_C( 83), UINT8_C( 18) },
      { UINT8_C(154), UINT8_C( 60), UINT8_C(115), UINT8_C(243), UINT8_C( 25), UINT8_C(216), UINT8_C(147), UINT8_C( 64),
        UINT8_C(121), UINT8_C(170), UINT8_C(  7), UINT8_C(158), UINT8_C(  8), UINT8_C( 25), UINT8_C( 98), UINT8_C( 18) } },
    { { UINT8_C(252), UINT8_C(172), UINT8_C( 78), UINT8_C(199), UINT8_C( 31), UINT8_C(154), UINT8_C(186), UINT8_C(172),
        UINT8_C(179), UINT8_C( 17), UINT8_C(132), UINT8_C( 15), UINT8_C(164), UINT8_C( 54), UINT8_C( 80), UINT8_C(217) },
      { UINT8_C(175), UINT8_C(236), UINT8_C(132), UINT8_C(130), UINT8_C(243), UINT8_C( 12), UINT8_C( 32), UINT8_C(216),
        UINT8_C( 20), UINT8_C(183), UINT8_C(241), UINT8_C(147), UINT8_C( 26), UINT8_C( 68), UINT8_C(165), UINT8_C( 22) },
      { UINT8_C(172), UINT8_C(199), UINT8_C(154), UINT8_C(172), UINT8_C( 17), UINT8_C( 15), UINT8_C( 54), UINT8_C(217),
        UINT8_C(236), UINT8_C(130), UINT8_C( 12), UINT8_C(216), UINT8_C(183), UINT8_C(147), UINT8_C( 68), UINT8_C( 22) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
    simde_uint8x16_t b = simde_vld1q_u8(test_vec[i].b);
    simde_uint8x16_t r = simde_vuzp2q_u8(a, b);

    simde_test_arm_neon_assert_equal_u8x16(r, simde_vld1q_u8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint8x16_t a = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t r = simde_vuzp2q_u8(a, b);

    simde_test_arm_neon_write_u8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t r[8];
  } test_vec[] = {
    { { UINT16_C(37226), UINT16_C(57568), UINT16_C(51742), UINT16_C(48634), UINT16_C(62066), UINT16_C( 8229), UINT16_C(12583), UINT16_C(19540) },
      { UINT16_C(48673), UINT16_C(18245), UINT16_C(29777), UINT16_C(48054), UINT16_C(41040), UINT16_C(22301), UINT16_C(43109), UINT16_C(53223) },
      { UINT16_C(57568), UINT16_C(48634), UINT16_C( 8229), UINT16_C(19540), UINT16_C(18245), UINT16_C(48054), UINT16_C(22301), UINT16_C(53223) } },
    { { UINT16_C(51001), UINT16_C(22448), UINT16_C(43665), UINT16_C( 1044), UINT16_C(14748), UINT16_C(49956), UINT16_C(31082), UINT16_C(35599) },
      { UINT16_C(21559), UINT16_C(35283), UINT16_C(35273), UINT16_C( 6468), UINT16_C(25129), UINT16_C(36465), UINT16_C(22538), UINT16_C(17246) },
      { UINT16_C(22448), UINT16_C( 1044), UINT16_C(49956), UINT16_C(35599), UINT16_C(35283), UINT16_C( 6468), UINT16_C(36465), UINT16_C(17246) } },
    { { UINT16_C( 3615), UINT16_C(45466), UINT16_C(44728), UINT16_C(21941), UINT16_C(55783), UINT16_C(21016), UINT16_C(10322), UINT16_C(35549) },
      { UINT16_C(45180), UINT16_C(17683), UINT16_C(22329), UINT16_C(25183), UINT16_C(53433), UINT16_C(50161), UINT16_C(20264), UINT16_C(18182) },
      { UINT16_C(45466), UINT16_C(21941), UINT16_C(21016), UINT16_C(35549), UINT16_C(17683), UINT16_C(25183), UINT16_C(50161), UINT16_C(18182) } },
    { { UINT16_C(41053), UINT16_C( 5624), UINT16_C(44366), UINT16_C(13930), UINT16_C(33671), UINT16_C(55688), UINT16_C(26027), UINT16_C(10083) },
      { UINT16_C(30230), UINT16_C(20333), UINT16_C(52430), UINT16_C(34738), UINT16_C(41884), UINT16_C(50251), UINT16_C(20978), UINT16_C(20235) },
      { UINT16_C( 5624), UINT16_C(13930), UINT16_C(55688), UINT16_C(10083), UINT16_C(20333), UINT16_C(34738), UINT16_C(50251), UINT16_C(20235) } },
    { { UINT16_C( 1266), UINT16_C(16484), UINT16_C(53169), UINT16_C(14454), UINT16_C(65106), UINT16_C(64786), UINT16_C(30052), UINT16_C(31268) },
      { UINT16_C(37356), UINT16_C(47817), UINT16_C(31581), UINT16_C(63809), UINT16_C(35870), UINT16_C( 4285), UINT16_C(51678), UINT16_C(53343) },
      { UINT16_C(16484), UINT16_C(14454), UINT16_C(64786), UINT16_C(31268), UINT16_C(47817), UINT16_C(63809), UINT16_C( 4285), UINT16_C(53343) } },
    { { UINT16_C(50381), UINT16_C(32272), UINT16_C(34707), UINT16_C(58807), UINT16_C(51589), UINT16_C(59874), UINT16_C( 1598), UINT16_C(10851) },
      { UINT16_C(11672), UINT16_C(62948), UINT16_C( 9896), UINT16_C(51183), UINT16_C(44210), UINT16_C(37079), UINT16_C(14197), UINT16_C(16992) },
      { UINT16_C(32272), UINT16_C(58807), UINT16_C(59874), UINT16_C(10851), UINT16_C(62948), UINT16_C(51183), UINT16_C(37079), UINT16_C(16992) } },
    { { UINT16_C(29179), UINT16_C(36545), UINT16_C(30968), UINT16_C(32115), UINT16_C(21825), UINT16_C(32615), UINT16_C(51803), UINT16_C(62378) },
      { UINT16_C(36599), UINT16_C(41193), UINT16_C(55476), UINT16_C(26471), UINT16_C(16004), UINT16_C(64247), UINT16_C(22645), UINT16_C(28732) },
      { UINT16_C(36545), UINT16_C(32115), UINT16_C(32615), UINT16_C(62378), UINT16_C(41193), UINT16_C(26471), UINT16_C(64247), UINT16_C(28732) } },
    { { UINT16_C(64969), UINT16_C(49662), UINT16_C(29045), UINT16_C(46654), UINT16_C(42438), UINT16_C( 8758), UINT16_C(57456), UINT16_C(26389) },
      { UINT16_C(65134), UINT16_C( 8967), UINT16_C(28374), UINT16_C(23434), UINT16_C(33197), UINT16_C( 8789), UINT16_C(37337), UINT16_C(41619) },
      { UINT16_C(49662), UINT16_C(46654), UINT16_C( 8758), UINT16_C(26389), UINT16_C( 8967), UINT16_C(23434), UINT16_C( 8789), UINT16_C(41619) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
    simde_uint16x8_t b = simde_vld1q_u16(test_vec[i].b);
    simde_uint16x8_t r = simde_vuzp2q_u16(a, b);
    simde_test_arm_neon_assert_equal_u16x8(r, simde_vld1q_u16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint16x8_t a = simde_test_arm_neon_random_u16x8();
    simde_uint16x8_t b = simde_test_arm_neon_random_u16x8();
    simde_uint16x8_t r = simde_vuzp2q_u16(a, b);

    simde_test_arm_neon_write_u16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t r[4];
  } test_vec[] = {
    { { UINT32_C(2900651911), UINT32_C(2436311970), UINT32_C(3817606193), UINT32_C(2719667300) },
      { UINT32_C(2172837903), UINT32_C(3994048712), UINT32_C( 856971193), UINT32_C(2581448722) },
      { UINT32_C(2436311970), UINT32_C(2719667300), UINT32_C(3994048712), UINT32_C(2581448722) } },
    { { UINT32_C(3662070072), UINT32_C( 510361069), UINT32_C(3976329353), UINT32_C(3700366284) },
      { UINT32_C(3294433787), UINT32_C( 598895978), UINT32_C(3596011204), UINT32_C(3329241998) },
      { UINT32_C( 510361069), UINT32_C(3700366284), UINT32_C( 598895978), UINT32_C(3329241998) } },
    { { UINT32_C(3802183413), UINT32_C(3170896947), UINT32_C(3500802308), UINT32_C( 413940253) },
      { UINT32_C(3051096651), UINT32_C(1020890743), UINT32_C(3809619796), UINT32_C(1487503971) },
      { UINT32_C(3170896947), UINT32_C( 413940253), UINT32_C(1020890743), UINT32_C(1487503971) } },
    { { UINT32_C(1815759416), UINT32_C(1512651350), UINT32_C(1479201595), UINT32_C(1500632845) },
      { UINT32_C(1477332449), UINT32_C( 815065052), UINT32_C(2048108311), UINT32_C(1657978153) },
      { UINT32_C(1512651350), UINT32_C(1500632845), UINT32_C( 815065052), UINT32_C(1657978153) } },
    { { UINT32_C(1573784583), UINT32_C(2176317254), UINT32_C(3638223306), UINT32_C(2570144696) },
      { UINT32_C(1962033048), UINT32_C(1051035175), UINT32_C(1471723565), UINT32_C(2092534389) },
      { UINT32_C(2176317254), UINT32_C(2570144696), UINT32_C(1051035175), UINT32_C(2092534389) } },
    { { UINT32_C(3705243542), UINT32_C(1214091390), UINT32_C( 706754418), UINT32_C( 465850754) },
      { UINT32_C(3096426129), UINT32_C(1794520124), UINT32_C(1656860397), UINT32_C(3470752312) },
      { UINT32_C(1214091390), UINT32_C( 465850754), UINT32_C(1794520124), UINT32_C(3470752312) } },
    { { UINT32_C(2141894657), UINT32_C(3150382921), UINT32_C(3253069887), UINT32_C(3403458873) },
      { UINT32_C(2625793119), UINT32_C(2366011552), UINT32_C(1592837926), UINT32_C(1110232897) },
      { UINT32_C(3150382921), UINT32_C(3403458873), UINT32_C(2366011552), UINT32_C(1110232897) } },
    { { UINT32_C(3502364295), UINT32_C( 495683806), UINT32_C(2866704752), UINT32_C(2054470426) },
      { UINT32_C(3340171047), UINT32_C(2522160239), UINT32_C( 619988451), UINT32_C(2607161620) },
      { UINT32_C( 495683806), UINT32_C(2054470426), UINT32_C(2522160239), UINT32_C(2607161620) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
    simde_uint32x4_t b = simde_vld1q_u32(test_vec[i].b);
    simde_uint32x4_t r = simde_vuzp2q_u32(a, b);

    simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint32x4_t a = simde_test_arm_neon_random_u32x4();
    simde_uint32x4_t b = simde_test_arm_neon_random_u32x4();
    simde_uint32x4_t r = simde_vuzp2q_u32(a, b);

    simde_test_arm_neon_write_u32x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint64_t a[2];
    uint64_t b[2];
    uint64_t r[2];
  } test_vec[] = {
    { { UINT64_C(10128971028910510737), UINT64_C(17729527479315999417) },
      { UINT64_C( 3335331942345100554), UINT64_C(11269845798600382417) },
      { UINT64_C(17729527479315999417), UINT64_C(11269845798600382417) } },
    { { UINT64_C(16475121993802503579), UINT64_C(14326970468804119694) },
      { UINT64_C(11373276584639549932), UINT64_C(18139705864536774166) },
      { UINT64_C(14326970468804119694), UINT64_C(18139705864536774166) } },
    { { UINT64_C( 9372473455084277507), UINT64_C( 3532002181234206082) },
      { UINT64_C(14910203097960200578), UINT64_C(16492371921639289732) },
      { UINT64_C( 3532002181234206082), UINT64_C(16492371921639289732) } },
    { { UINT64_C( 3220394418092766011), UINT64_C(14069084986605703112) },
      { UINT64_C( 5381235056558806823), UINT64_C( 9544269215124331695) },
      { UINT64_C(14069084986605703112), UINT64_C( 9544269215124331695) } },
    { { UINT64_C( 8203135926171567617), UINT64_C(15454311783178649971) },
      { UINT64_C( 3883619683466119637), UINT64_C( 2579500605500691200) },
      { UINT64_C(15454311783178649971), UINT64_C( 2579500605500691200) } },
    { { UINT64_C( 6330836097350664128), UINT64_C(17108193226076674790) },
      { UINT64_C( 9640075422859797005), UINT64_C( 9927792619412164225) },
      { UINT64_C(17108193226076674790), UINT64_C( 9927792619412164225) } },
    { { UINT64_C( 2401771254059341082), UINT64_C(17306527302493298728) },
      { UINT64_C(11839765661985519172), UINT64_C(15144777308092964314) },
      { UINT64_C(17306527302493298728), UINT64_C(15144777308092964314) } },
    { { UINT64_C( 1656802321261076643), UINT64_C( 2042527392187463044) },
      { UINT64_C(  144455106247973689), UINT64_C(18076835750634408275) },
      { UINT64_C( 2042527392187463044), UINT64_C(18076835750634408275) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
    simde_uint64x2_t b = simde_vld1q_u64(test_vec[i].b);
    simde_uint64x2_t r = simde_vuzp2q_u64(a, b);
    simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint64x2_t a = simde_test_arm_neon_random_u64x2();
    simde_uint64x2_t b = simde_test_arm_neon_random_u64x2();
    simde_uint64x2_t r = simde_vuzp2q_u64(a, b);

    simde_test_arm_neon_write_u64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_u64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_u64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly8_t a[8];
    simde_poly8_t b[8];
    simde_poly8_t r[8];
  } test_vec[] = {
    { { SIMDE_POLY8_C( 32), SIMDE_POLY8_C(115), SIMDE_POLY8_C( 94), SIMDE_POLY8_C(134), SIMDE_POLY8_C(188), SIMDE_POLY8_C(  5), SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 50) },
      { SIMDE_POLY8_C( 84), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(113), SIMDE_POLY8_C(241),    SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(122), SIMDE_POLY8_C( 84) },
      { SIMDE_POLY8_C(115), SIMDE_POLY8_C(134), SIMDE_POLY8_C(  5), SIMDE_POLY8_C( 50), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(241), SIMDE_POLY8_C( 18), SIMDE_POLY8_C( 84) } },
    { { SIMDE_POLY8_C( 24), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(106), SIMDE_POLY8_C(201), SIMDE_POLY8_C( 70), SIMDE_POLY8_C(150), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(152) },
      { SIMDE_POLY8_C(111), SIMDE_POLY8_C(245), SIMDE_POLY8_C(121), SIMDE_POLY8_C(191), SIMDE_POLY8_C(114), SIMDE_POLY8_C(111), SIMDE_POLY8_C( 11), SIMDE_POLY8_C(146) },
      { SIMDE_POLY8_C( 59), SIMDE_POLY8_C(201), SIMDE_POLY8_C(150), SIMDE_POLY8_C(152), SIMDE_POLY8_C(245), SIMDE_POLY8_C(191), SIMDE_POLY8_C(111), SIMDE_POLY8_C(146) } },
    { { SIMDE_POLY8_C(226), SIMDE_POLY8_C(105), SIMDE_POLY8_C( 24), SIMDE_POLY8_C(158), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(208), SIMDE_POLY8_C(194) },
      { SIMDE_POLY8_C( 79), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(180), SIMDE_POLY8_C( 78), SIMDE_POLY8_C( 84), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(162), SIMDE_POLY8_C(108) },
      { SIMDE_POLY8_C(105), SIMDE_POLY8_C(158), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 66), SIMDE_POLY8_C( 78), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(108) } },
    { { SIMDE_POLY8_C(105), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(176), SIMDE_POLY8_C(162), SIMDE_POLY8_C(139), SIMDE_POLY8_C( 72), SIMDE_POLY8_C( 17) },
      { SIMDE_POLY8_C(128), SIMDE_POLY8_C(193), SIMDE_POLY8_C(209), SIMDE_POLY8_C(242), SIMDE_POLY8_C( 48), SIMDE_POLY8_C(220), SIMDE_POLY8_C(132), SIMDE_POLY8_C( 18) },
      { SIMDE_POLY8_C( 12), SIMDE_POLY8_C(176), SIMDE_POLY8_C(139), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(193), SIMDE_POLY8_C(242), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 18) } },
    { { SIMDE_POLY8_C( 69), SIMDE_POLY8_C(156), SIMDE_POLY8_C(176), SIMDE_POLY8_C(180), SIMDE_POLY8_C(209), SIMDE_POLY8_C(129), SIMDE_POLY8_C(118), SIMDE_POLY8_C( 32) },
      { SIMDE_POLY8_C(195), SIMDE_POLY8_C( 42), SIMDE_POLY8_C(111), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(131), SIMDE_POLY8_C(194) },
      { SIMDE_POLY8_C(156), SIMDE_POLY8_C(180), SIMDE_POLY8_C(129), SIMDE_POLY8_C( 32), SIMDE_POLY8_C( 42), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(194) } },
    { { SIMDE_POLY8_C( 30), SIMDE_POLY8_C(184), SIMDE_POLY8_C(114), SIMDE_POLY8_C(192), SIMDE_POLY8_C( 67), SIMDE_POLY8_C(186), SIMDE_POLY8_C(210), SIMDE_POLY8_C(195) },
      { SIMDE_POLY8_C(124), SIMDE_POLY8_C(163), SIMDE_POLY8_C(182), SIMDE_POLY8_C(172), SIMDE_POLY8_C(127), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(191), SIMDE_POLY8_C(196) },
      { SIMDE_POLY8_C(184), SIMDE_POLY8_C(192), SIMDE_POLY8_C(186), SIMDE_POLY8_C(195), SIMDE_POLY8_C(163), SIMDE_POLY8_C(172), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(196) } },
    { { SIMDE_POLY8_C(215), SIMDE_POLY8_C(111), SIMDE_POLY8_C(120), SIMDE_POLY8_C(168), SIMDE_POLY8_C(240), SIMDE_POLY8_C(239), SIMDE_POLY8_C(200), SIMDE_POLY8_C(179) },
      { SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 55), SIMDE_POLY8_C(202), SIMDE_POLY8_C(114), SIMDE_POLY8_C( 73), SIMDE_POLY8_C( 77), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(103) },
      { SIMDE_POLY8_C(111), SIMDE_POLY8_C(168), SIMDE_POLY8_C(239), SIMDE_POLY8_C(179), SIMDE_POLY8_C( 55), SIMDE_POLY8_C(114), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(103) } },
    { { SIMDE_POLY8_C(  5), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 39), SIMDE_POLY8_C( 72), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(249), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(222) },
      { SIMDE_POLY8_C(156), SIMDE_POLY8_C(194), SIMDE_POLY8_C(138), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(252), SIMDE_POLY8_C( 73), SIMDE_POLY8_C(224), SIMDE_POLY8_C(211) },
      { SIMDE_POLY8_C(167), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(249), SIMDE_POLY8_C(222), SIMDE_POLY8_C(194), SIMDE_POLY8_C( 27), SIMDE_POLY8_C( 73), SIMDE_POLY8_C(211) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly8x8_t a = simde_vld1_p8(test_vec[i].a);
    simde_poly8x8_t b = simde_vld1_p8(test_vec[i].b);
    simde_poly8x8_t r = simde_vuzp2_p8(a, b);

    simde_test_arm_neon_assert_equal_p8x8(r, simde_vld1_p8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly8x8_t a = simde_test_arm_neon_random_p8x8();
    simde_poly8x8_t b = simde_test_arm_neon_random_p8x8();
    simde_poly8x8_t r = simde_vuzp2_p8(a, b);

    simde_test_arm_neon_write_p8x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_p8x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_p8x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly16_t a[4];
    simde_poly16_t b[4];
    simde_poly16_t r[4];
  } test_vec[] = {
    { { SIMDE_POLY16_C( 5562), SIMDE_POLY16_C(29929), SIMDE_POLY16_C(59535), SIMDE_POLY16_C( 4681) },
      { SIMDE_POLY16_C( 4562), SIMDE_POLY16_C(56009), SIMDE_POLY16_C(26174), SIMDE_POLY16_C(13284) },
      { SIMDE_POLY16_C(29929), SIMDE_POLY16_C( 4681), SIMDE_POLY16_C(56009), SIMDE_POLY16_C(13284) } },
    { { SIMDE_POLY16_C( 5231), SIMDE_POLY16_C( 5283), SIMDE_POLY16_C(50924), SIMDE_POLY16_C(52138) },
      { SIMDE_POLY16_C(51348), SIMDE_POLY16_C(34623), SIMDE_POLY16_C(61476), SIMDE_POLY16_C(57252) },
      { SIMDE_POLY16_C( 5283), SIMDE_POLY16_C(52138), SIMDE_POLY16_C(34623), SIMDE_POLY16_C(57252) } },
    { { SIMDE_POLY16_C(36102), SIMDE_POLY16_C(38227), SIMDE_POLY16_C(40053), SIMDE_POLY16_C(18343) },
      { SIMDE_POLY16_C(28845), SIMDE_POLY16_C(60193), SIMDE_POLY16_C( 1494), SIMDE_POLY16_C(17950) },
      { SIMDE_POLY16_C(38227), SIMDE_POLY16_C(18343), SIMDE_POLY16_C(60193), SIMDE_POLY16_C(17950) } },
    { { SIMDE_POLY16_C(49434), SIMDE_POLY16_C( 1626), SIMDE_POLY16_C( 1159), SIMDE_POLY16_C( 7122) },
      { SIMDE_POLY16_C( 4556), SIMDE_POLY16_C(61603), SIMDE_POLY16_C(18177), SIMDE_POLY16_C( 1999) },
      { SIMDE_POLY16_C( 1626), SIMDE_POLY16_C( 7122), SIMDE_POLY16_C(61603), SIMDE_POLY16_C( 1999) } },
    { { SIMDE_POLY16_C( 8916), SIMDE_POLY16_C(18844), SIMDE_POLY16_C(17342), SIMDE_POLY16_C(27536) },
      { SIMDE_POLY16_C(45748), SIMDE_POLY16_C(35414), SIMDE_POLY16_C(29879), SIMDE_POLY16_C(53712) },
      { SIMDE_POLY16_C(18844), SIMDE_POLY16_C(27536), SIMDE_POLY16_C(35414), SIMDE_POLY16_C(53712) } },
    { { SIMDE_POLY16_C(10805), SIMDE_POLY16_C(48344), SIMDE_POLY16_C(43566), SIMDE_POLY16_C(64216) },
      { SIMDE_POLY16_C(31675), SIMDE_POLY16_C(48363), SIMDE_POLY16_C(47810), SIMDE_POLY16_C(38596) },
      { SIMDE_POLY16_C(48344), SIMDE_POLY16_C(64216), SIMDE_POLY16_C(48363), SIMDE_POLY16_C(38596) } },
    { { SIMDE_POLY16_C(24797), SIMDE_POLY16_C(39903), SIMDE_POLY16_C(28580), SIMDE_POLY16_C(22535) },
      { SIMDE_POLY16_C(23841), SIMDE_POLY16_C(55778), SIMDE_POLY16_C(46034), SIMDE_POLY16_C( 1962) },
      { SIMDE_POLY16_C(39903), SIMDE_POLY16_C(22535), SIMDE_POLY16_C(55778), SIMDE_POLY16_C( 1962) } },
    { { SIMDE_POLY16_C(33501), SIMDE_POLY16_C( 3268), SIMDE_POLY16_C(39980), SIMDE_POLY16_C(59142) },
      { SIMDE_POLY16_C(61719), SIMDE_POLY16_C(55716), SIMDE_POLY16_C(26796), SIMDE_POLY16_C(35183) },
      { SIMDE_POLY16_C( 3268), SIMDE_POLY16_C(59142), SIMDE_POLY16_C(55716), SIMDE_POLY16_C(35183) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly16x4_t a = simde_vld1_p16(test_vec[i].a);
    simde_poly16x4_t b = simde_vld1_p16(test_vec[i].b);
    simde_poly16x4_t r = simde_vuzp2_p16(a, b);
    simde_test_arm_neon_assert_equal_p16x4(r, simde_vld1_p16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly16x4_t a = simde_test_arm_neon_random_p16x4();
    simde_poly16x4_t b = simde_test_arm_neon_random_p16x4();
    simde_poly16x4_t r = simde_vuzp2_p16(a, b);

    simde_test_arm_neon_write_p16x4(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_p16x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_p16x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_p8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly8_t a[16];
    simde_poly8_t b[16];
    simde_poly8_t r[16];
  } test_vec[] = {
    { { SIMDE_POLY8_C(222), SIMDE_POLY8_C(236), SIMDE_POLY8_C(203), SIMDE_POLY8_C(186), SIMDE_POLY8_C(216), SIMDE_POLY8_C(218), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(216),
        SIMDE_POLY8_C(199), SIMDE_POLY8_C(141), SIMDE_POLY8_C( 87), SIMDE_POLY8_C(129), SIMDE_POLY8_C( 11), SIMDE_POLY8_C(113), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 37) },
      { SIMDE_POLY8_C(103), SIMDE_POLY8_C( 87), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(244), SIMDE_POLY8_C(217),
        SIMDE_POLY8_C( 30), SIMDE_POLY8_C( 82), SIMDE_POLY8_C(106), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(182), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 56) },
      { SIMDE_POLY8_C(236), SIMDE_POLY8_C(186), SIMDE_POLY8_C(218), SIMDE_POLY8_C(216), SIMDE_POLY8_C(141), SIMDE_POLY8_C(129), SIMDE_POLY8_C(113), SIMDE_POLY8_C( 37),
        SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 35), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(217), SIMDE_POLY8_C( 82), SIMDE_POLY8_C(233), SIMDE_POLY8_C(182), SIMDE_POLY8_C( 56) } },
    { { SIMDE_POLY8_C(162), SIMDE_POLY8_C(180), SIMDE_POLY8_C(242), SIMDE_POLY8_C(122), SIMDE_POLY8_C(143), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 83), SIMDE_POLY8_C( 86),
        SIMDE_POLY8_C(215), SIMDE_POLY8_C(170), SIMDE_POLY8_C(215), SIMDE_POLY8_C(226), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(175), SIMDE_POLY8_C(  7), SIMDE_POLY8_C(131) },
      { SIMDE_POLY8_C(  6), SIMDE_POLY8_C(229), SIMDE_POLY8_C(166), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(155), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 50),
        SIMDE_POLY8_C(237), SIMDE_POLY8_C( 66), SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 71), SIMDE_POLY8_C(248), SIMDE_POLY8_C(  5), SIMDE_POLY8_C(127), SIMDE_POLY8_C(154) },
      { SIMDE_POLY8_C(180), SIMDE_POLY8_C(122), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(170), SIMDE_POLY8_C(226), SIMDE_POLY8_C(175), SIMDE_POLY8_C(131),
        SIMDE_POLY8_C(229), SIMDE_POLY8_C(254), SIMDE_POLY8_C(155), SIMDE_POLY8_C( 50), SIMDE_POLY8_C( 66), SIMDE_POLY8_C( 71), SIMDE_POLY8_C(  5), SIMDE_POLY8_C(154) } },
    { { SIMDE_POLY8_C(185), SIMDE_POLY8_C(113), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(187), SIMDE_POLY8_C(104), SIMDE_POLY8_C(159), SIMDE_POLY8_C(146),
        SIMDE_POLY8_C( 18), SIMDE_POLY8_C(118), SIMDE_POLY8_C(116), SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 37), SIMDE_POLY8_C(124), SIMDE_POLY8_C(176), SIMDE_POLY8_C( 44) },
      { SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 42), SIMDE_POLY8_C(117), SIMDE_POLY8_C(242), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(168), SIMDE_POLY8_C(223),
        SIMDE_POLY8_C( 69), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 39), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(201), SIMDE_POLY8_C(166), SIMDE_POLY8_C(216), SIMDE_POLY8_C(130) },
      { SIMDE_POLY8_C(113), SIMDE_POLY8_C( 72), SIMDE_POLY8_C(104), SIMDE_POLY8_C(146), SIMDE_POLY8_C(118), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(124), SIMDE_POLY8_C( 44),
        SIMDE_POLY8_C( 87), SIMDE_POLY8_C(117), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(223), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(166), SIMDE_POLY8_C(130) } },
    { { SIMDE_POLY8_C( 24), SIMDE_POLY8_C(237), SIMDE_POLY8_C(203), SIMDE_POLY8_C(211), SIMDE_POLY8_C( 85), SIMDE_POLY8_C(106), SIMDE_POLY8_C(102), SIMDE_POLY8_C(103),
        SIMDE_POLY8_C(224), SIMDE_POLY8_C(218), SIMDE_POLY8_C(148), SIMDE_POLY8_C(  6), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 69), SIMDE_POLY8_C( 50), SIMDE_POLY8_C(183) },
      { SIMDE_POLY8_C(156), SIMDE_POLY8_C( 92), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(142), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(213), SIMDE_POLY8_C(109), SIMDE_POLY8_C(164),
        SIMDE_POLY8_C(153), SIMDE_POLY8_C(148), SIMDE_POLY8_C(225), SIMDE_POLY8_C( 98), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(185), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 83) },
      { SIMDE_POLY8_C(237), SIMDE_POLY8_C(211), SIMDE_POLY8_C(106), SIMDE_POLY8_C(103), SIMDE_POLY8_C(218), SIMDE_POLY8_C(  6), SIMDE_POLY8_C( 69), SIMDE_POLY8_C(183),
        SIMDE_POLY8_C( 92), SIMDE_POLY8_C(142), SIMDE_POLY8_C(213), SIMDE_POLY8_C(164), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(185), SIMDE_POLY8_C( 83) } },
    { { SIMDE_POLY8_C(166), SIMDE_POLY8_C(175), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(251), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 98), SIMDE_POLY8_C(250),
        SIMDE_POLY8_C(103), SIMDE_POLY8_C(247), SIMDE_POLY8_C(  0), SIMDE_POLY8_C(189), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 50), SIMDE_POLY8_C(117), SIMDE_POLY8_C(216) },
      { SIMDE_POLY8_C(142), SIMDE_POLY8_C(162), SIMDE_POLY8_C(102), SIMDE_POLY8_C(237), SIMDE_POLY8_C(119), SIMDE_POLY8_C(211), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 16),
        SIMDE_POLY8_C(104), SIMDE_POLY8_C(115), SIMDE_POLY8_C(114), SIMDE_POLY8_C(163), SIMDE_POLY8_C( 44), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(246), SIMDE_POLY8_C(211) },
      { SIMDE_POLY8_C(175), SIMDE_POLY8_C(251), SIMDE_POLY8_C(140), SIMDE_POLY8_C(250), SIMDE_POLY8_C(247), SIMDE_POLY8_C(189), SIMDE_POLY8_C( 50), SIMDE_POLY8_C(216),
        SIMDE_POLY8_C(162), SIMDE_POLY8_C(237), SIMDE_POLY8_C(211), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(115), SIMDE_POLY8_C(163), SIMDE_POLY8_C( 86), SIMDE_POLY8_C(211) } },
    { { SIMDE_POLY8_C(  6), SIMDE_POLY8_C( 28), SIMDE_POLY8_C(206), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(169), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 16),
        SIMDE_POLY8_C( 40), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(205), SIMDE_POLY8_C(100), SIMDE_POLY8_C( 75), SIMDE_POLY8_C( 66), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(218) },
      { SIMDE_POLY8_C(228), SIMDE_POLY8_C(162), SIMDE_POLY8_C(199), SIMDE_POLY8_C( 91), SIMDE_POLY8_C(117), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(107), SIMDE_POLY8_C(221),
        SIMDE_POLY8_C(204), SIMDE_POLY8_C(221), SIMDE_POLY8_C(128), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 52), SIMDE_POLY8_C(118), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 58) },
      { SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 31), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(100), SIMDE_POLY8_C( 66), SIMDE_POLY8_C(218),
        SIMDE_POLY8_C(162), SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(221), SIMDE_POLY8_C(221), SIMDE_POLY8_C(248), SIMDE_POLY8_C(118), SIMDE_POLY8_C( 58) } },
    { { SIMDE_POLY8_C(147), SIMDE_POLY8_C(154), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(203), SIMDE_POLY8_C(115), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(243),
        SIMDE_POLY8_C(140), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 87), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(147), SIMDE_POLY8_C(178), SIMDE_POLY8_C( 64) },
      { SIMDE_POLY8_C( 53), SIMDE_POLY8_C(121), SIMDE_POLY8_C(156), SIMDE_POLY8_C(170), SIMDE_POLY8_C(210), SIMDE_POLY8_C(  7), SIMDE_POLY8_C(136), SIMDE_POLY8_C(158),
        SIMDE_POLY8_C(229), SIMDE_POLY8_C(  8), SIMDE_POLY8_C(151), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(127), SIMDE_POLY8_C( 98), SIMDE_POLY8_C( 83), SIMDE_POLY8_C( 18) },
      { SIMDE_POLY8_C(154), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(115), SIMDE_POLY8_C(243), SIMDE_POLY8_C( 25), SIMDE_POLY8_C(216), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 64),
        SIMDE_POLY8_C(121), SIMDE_POLY8_C(170), SIMDE_POLY8_C(  7), SIMDE_POLY8_C(158), SIMDE_POLY8_C(  8), SIMDE_POLY8_C( 25), SIMDE_POLY8_C( 98), SIMDE_POLY8_C( 18) } },
    { { SIMDE_POLY8_C(252), SIMDE_POLY8_C(172), SIMDE_POLY8_C( 78), SIMDE_POLY8_C(199), SIMDE_POLY8_C( 31), SIMDE_POLY8_C(154), SIMDE_POLY8_C(186), SIMDE_POLY8_C(172),
        SIMDE_POLY8_C(179), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(132), SIMDE_POLY8_C( 15), SIMDE_POLY8_C(164), SIMDE_POLY8_C( 54), SIMDE_POLY8_C( 80), SIMDE_POLY8_C(217) },
      { SIMDE_POLY8_C(175), SIMDE_POLY8_C(236), SIMDE_POLY8_C(132), SIMDE_POLY8_C(130), SIMDE_POLY8_C(243), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 32), SIMDE_POLY8_C(216),
        SIMDE_POLY8_C( 20), SIMDE_POLY8_C(183), SIMDE_POLY8_C(241), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 26), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(165), SIMDE_POLY8_C( 22) },
      { SIMDE_POLY8_C(172), SIMDE_POLY8_C(199), SIMDE_POLY8_C(154), SIMDE_POLY8_C(172), SIMDE_POLY8_C( 17), SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 54), SIMDE_POLY8_C(217),
        SIMDE_POLY8_C(236), SIMDE_POLY8_C(130), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(216), SIMDE_POLY8_C(183), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 68), SIMDE_POLY8_C( 22) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly8x16_t a = simde_vld1q_p8(test_vec[i].a);
    simde_poly8x16_t b = simde_vld1q_p8(test_vec[i].b);
    simde_poly8x16_t r = simde_vuzp2q_p8(a, b);

    simde_test_arm_neon_assert_equal_p8x16(r, simde_vld1q_p8(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly8x16_t a = simde_test_arm_neon_random_p8x16();
    simde_poly8x16_t b = simde_test_arm_neon_random_p8x16();
    simde_poly8x16_t r = simde_vuzp2q_p8(a, b);

    simde_test_arm_neon_write_p8x16(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_p8x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_p8x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_p16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly16_t a[8];
    simde_poly16_t b[8];
    simde_poly16_t r[8];
  } test_vec[] = {
    { { SIMDE_POLY16_C(37226), SIMDE_POLY16_C(57568), SIMDE_POLY16_C(51742), SIMDE_POLY16_C(48634), SIMDE_POLY16_C(62066), SIMDE_POLY16_C( 8229), SIMDE_POLY16_C(12583), SIMDE_POLY16_C(19540) },
      { SIMDE_POLY16_C(48673), SIMDE_POLY16_C(18245), SIMDE_POLY16_C(29777), SIMDE_POLY16_C(48054), SIMDE_POLY16_C(41040), SIMDE_POLY16_C(22301), SIMDE_POLY16_C(43109), SIMDE_POLY16_C(53223) },
      { SIMDE_POLY16_C(57568), SIMDE_POLY16_C(48634), SIMDE_POLY16_C( 8229), SIMDE_POLY16_C(19540), SIMDE_POLY16_C(18245), SIMDE_POLY16_C(48054), SIMDE_POLY16_C(22301), SIMDE_POLY16_C(53223) } },
    { { SIMDE_POLY16_C(51001), SIMDE_POLY16_C(22448), SIMDE_POLY16_C(43665), SIMDE_POLY16_C( 1044), SIMDE_POLY16_C(14748), SIMDE_POLY16_C(49956), SIMDE_POLY16_C(31082), SIMDE_POLY16_C(35599) },
      { SIMDE_POLY16_C(21559), SIMDE_POLY16_C(35283), SIMDE_POLY16_C(35273), SIMDE_POLY16_C( 6468), SIMDE_POLY16_C(25129), SIMDE_POLY16_C(36465), SIMDE_POLY16_C(22538), SIMDE_POLY16_C(17246) },
      { SIMDE_POLY16_C(22448), SIMDE_POLY16_C( 1044), SIMDE_POLY16_C(49956), SIMDE_POLY16_C(35599), SIMDE_POLY16_C(35283), SIMDE_POLY16_C( 6468), SIMDE_POLY16_C(36465), SIMDE_POLY16_C(17246) } },
    { { SIMDE_POLY16_C( 3615), SIMDE_POLY16_C(45466), SIMDE_POLY16_C(44728), SIMDE_POLY16_C(21941), SIMDE_POLY16_C(55783), SIMDE_POLY16_C(21016), SIMDE_POLY16_C(10322), SIMDE_POLY16_C(35549) },
      { SIMDE_POLY16_C(45180), SIMDE_POLY16_C(17683), SIMDE_POLY16_C(22329), SIMDE_POLY16_C(25183), SIMDE_POLY16_C(53433), SIMDE_POLY16_C(50161), SIMDE_POLY16_C(20264), SIMDE_POLY16_C(18182) },
      { SIMDE_POLY16_C(45466), SIMDE_POLY16_C(21941), SIMDE_POLY16_C(21016), SIMDE_POLY16_C(35549), SIMDE_POLY16_C(17683), SIMDE_POLY16_C(25183), SIMDE_POLY16_C(50161), SIMDE_POLY16_C(18182) } },
    { { SIMDE_POLY16_C(41053), SIMDE_POLY16_C( 5624), SIMDE_POLY16_C(44366), SIMDE_POLY16_C(13930), SIMDE_POLY16_C(33671), SIMDE_POLY16_C(55688), SIMDE_POLY16_C(26027), SIMDE_POLY16_C(10083) },
      { SIMDE_POLY16_C(30230), SIMDE_POLY16_C(20333), SIMDE_POLY16_C(52430), SIMDE_POLY16_C(34738), SIMDE_POLY16_C(41884), SIMDE_POLY16_C(50251), SIMDE_POLY16_C(20978), SIMDE_POLY16_C(20235) },
      { SIMDE_POLY16_C( 5624), SIMDE_POLY16_C(13930), SIMDE_POLY16_C(55688), SIMDE_POLY16_C(10083), SIMDE_POLY16_C(20333), SIMDE_POLY16_C(34738), SIMDE_POLY16_C(50251), SIMDE_POLY16_C(20235) } },
    { { SIMDE_POLY16_C( 1266), SIMDE_POLY16_C(16484), SIMDE_POLY16_C(53169), SIMDE_POLY16_C(14454), SIMDE_POLY16_C(65106), SIMDE_POLY16_C(64786), SIMDE_POLY16_C(30052), SIMDE_POLY16_C(31268) },
      { SIMDE_POLY16_C(37356), SIMDE_POLY16_C(47817), SIMDE_POLY16_C(31581), SIMDE_POLY16_C(63809), SIMDE_POLY16_C(35870), SIMDE_POLY16_C( 4285), SIMDE_POLY16_C(51678), SIMDE_POLY16_C(53343) },
      { SIMDE_POLY16_C(16484), SIMDE_POLY16_C(14454), SIMDE_POLY16_C(64786), SIMDE_POLY16_C(31268), SIMDE_POLY16_C(47817), SIMDE_POLY16_C(63809), SIMDE_POLY16_C( 4285), SIMDE_POLY16_C(53343) } },
    { { SIMDE_POLY16_C(50381), SIMDE_POLY16_C(32272), SIMDE_POLY16_C(34707), SIMDE_POLY16_C(58807), SIMDE_POLY16_C(51589), SIMDE_POLY16_C(59874), SIMDE_POLY16_C( 1598), SIMDE_POLY16_C(10851) },
      { SIMDE_POLY16_C(11672), SIMDE_POLY16_C(62948), SIMDE_POLY16_C( 9896), SIMDE_POLY16_C(51183), SIMDE_POLY16_C(44210), SIMDE_POLY16_C(37079), SIMDE_POLY16_C(14197), SIMDE_POLY16_C(16992) },
      { SIMDE_POLY16_C(32272), SIMDE_POLY16_C(58807), SIMDE_POLY16_C(59874), SIMDE_POLY16_C(10851), SIMDE_POLY16_C(62948), SIMDE_POLY16_C(51183), SIMDE_POLY16_C(37079), SIMDE_POLY16_C(16992) } },
    { { SIMDE_POLY16_C(29179), SIMDE_POLY16_C(36545), SIMDE_POLY16_C(30968), SIMDE_POLY16_C(32115), SIMDE_POLY16_C(21825), SIMDE_POLY16_C(32615), SIMDE_POLY16_C(51803), SIMDE_POLY16_C(62378) },
      { SIMDE_POLY16_C(36599), SIMDE_POLY16_C(41193), SIMDE_POLY16_C(55476), SIMDE_POLY16_C(26471), SIMDE_POLY16_C(16004), SIMDE_POLY16_C(64247), SIMDE_POLY16_C(22645), SIMDE_POLY16_C(28732) },
      { SIMDE_POLY16_C(36545), SIMDE_POLY16_C(32115), SIMDE_POLY16_C(32615), SIMDE_POLY16_C(62378), SIMDE_POLY16_C(41193), SIMDE_POLY16_C(26471), SIMDE_POLY16_C(64247), SIMDE_POLY16_C(28732) } },
    { { SIMDE_POLY16_C(64969), SIMDE_POLY16_C(49662), SIMDE_POLY16_C(29045), SIMDE_POLY16_C(46654), SIMDE_POLY16_C(42438), SIMDE_POLY16_C( 8758), SIMDE_POLY16_C(57456), SIMDE_POLY16_C(26389) },
      { SIMDE_POLY16_C(65134), SIMDE_POLY16_C( 8967), SIMDE_POLY16_C(28374), SIMDE_POLY16_C(23434), SIMDE_POLY16_C(33197), SIMDE_POLY16_C( 8789), SIMDE_POLY16_C(37337), SIMDE_POLY16_C(41619) },
      { SIMDE_POLY16_C(49662), SIMDE_POLY16_C(46654), SIMDE_POLY16_C( 8758), SIMDE_POLY16_C(26389), SIMDE_POLY16_C( 8967), SIMDE_POLY16_C(23434), SIMDE_POLY16_C( 8789), SIMDE_POLY16_C(41619) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly16x8_t a = simde_vld1q_p16(test_vec[i].a);
    simde_poly16x8_t b = simde_vld1q_p16(test_vec[i].b);
    simde_poly16x8_t r = simde_vuzp2q_p16(a, b);
    simde_test_arm_neon_assert_equal_p16x8(r, simde_vld1q_p16(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly16x8_t a = simde_test_arm_neon_random_p16x8();
    simde_poly16x8_t b = simde_test_arm_neon_random_p16x8();
    simde_poly16x8_t r = simde_vuzp2q_p16(a, b);

    simde_test_arm_neon_write_p16x8(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_p16x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_p16x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_vuzp2q_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly64_t a[2];
    simde_poly64_t b[2];
    simde_poly64_t r[2];
  } test_vec[] = {
    { { SIMDE_POLY64_C(10128971028910510737), SIMDE_POLY64_C(17729527479315999417) },
      { SIMDE_POLY64_C( 3335331942345100554), SIMDE_POLY64_C(11269845798600382417) },
      { SIMDE_POLY64_C(17729527479315999417), SIMDE_POLY64_C(11269845798600382417) } },
    { { SIMDE_POLY64_C(16475121993802503579), SIMDE_POLY64_C(14326970468804119694) },
      { SIMDE_POLY64_C(11373276584639549932), SIMDE_POLY64_C(18139705864536774166) },
      { SIMDE_POLY64_C(14326970468804119694), SIMDE_POLY64_C(18139705864536774166) } },
    { { SIMDE_POLY64_C( 9372473455084277507), SIMDE_POLY64_C( 3532002181234206082) },
      { SIMDE_POLY64_C(14910203097960200578), SIMDE_POLY64_C(16492371921639289732) },
      { SIMDE_POLY64_C( 3532002181234206082), SIMDE_POLY64_C(16492371921639289732) } },
    { { SIMDE_POLY64_C( 3220394418092766011), SIMDE_POLY64_C(14069084986605703112) },
      { SIMDE_POLY64_C( 5381235056558806823), SIMDE_POLY64_C( 9544269215124331695) },
      { SIMDE_POLY64_C(14069084986605703112), SIMDE_POLY64_C( 9544269215124331695) } },
    { { SIMDE_POLY64_C( 8203135926171567617), SIMDE_POLY64_C(15454311783178649971) },
      { SIMDE_POLY64_C( 3883619683466119637), SIMDE_POLY64_C( 2579500605500691200) },
      { SIMDE_POLY64_C(15454311783178649971), SIMDE_POLY64_C( 2579500605500691200) } },
    { { SIMDE_POLY64_C( 6330836097350664128), SIMDE_POLY64_C(17108193226076674790) },
      { SIMDE_POLY64_C( 9640075422859797005), SIMDE_POLY64_C( 9927792619412164225) },
      { SIMDE_POLY64_C(17108193226076674790), SIMDE_POLY64_C( 9927792619412164225) } },
    { { SIMDE_POLY64_C( 2401771254059341082), SIMDE_POLY64_C(17306527302493298728) },
      { SIMDE_POLY64_C(11839765661985519172), SIMDE_POLY64_C(15144777308092964314) },
      { SIMDE_POLY64_C(17306527302493298728), SIMDE_POLY64_C(15144777308092964314) } },
    { { SIMDE_POLY64_C( 1656802321261076643), SIMDE_POLY64_C( 2042527392187463044) },
      { SIMDE_POLY64_C(  144455106247973689), SIMDE_POLY64_C(18076835750634408275) },
      { SIMDE_POLY64_C( 2042527392187463044), SIMDE_POLY64_C(18076835750634408275) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly64x2_t a = simde_vld1q_p64(test_vec[i].a);
    simde_poly64x2_t b = simde_vld1q_p64(test_vec[i].b);
    simde_poly64x2_t r = simde_vuzp2q_p64(a, b);
    simde_test_arm_neon_assert_equal_p64x2(r, simde_vld1q_p64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly64x2_t a = simde_test_arm_neon_random_p64x2();
    simde_poly64x2_t b = simde_test_arm_neon_random_p64x2();
    simde_poly64x2_t r = simde_vuzp2q_p64(a, b);

    simde_test_arm_neon_write_p64x2(2, a, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_arm_neon_write_p64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_arm_neon_write_p64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vuzp2q_p64)
SIMDE_TEST_FUNC_LIST_END

#include "test-neon-footer.h"