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

#include <test/arm/neon/test-neon.h>
#include <simde/arm/neon/trn1.h>

static int
test_simde_vtrn1_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( 11.105), SIMDE_FLOAT16_VALUE( - 63.267), SIMDE_FLOAT16_VALUE( - 15.443), SIMDE_FLOAT16_VALUE( - 77.497) },
      {  SIMDE_FLOAT16_VALUE( 99.692), SIMDE_FLOAT16_VALUE( - 68.474), SIMDE_FLOAT16_VALUE( - 55.887), SIMDE_FLOAT16_VALUE( - 21.106) },
      {  SIMDE_FLOAT16_VALUE( 11.105),  SIMDE_FLOAT16_VALUE( 99.692), SIMDE_FLOAT16_VALUE( - 15.443), SIMDE_FLOAT16_VALUE( - 55.887) } },
    { { SIMDE_FLOAT16_VALUE( - 52.862), SIMDE_FLOAT16_VALUE( - 88.095),  SIMDE_FLOAT16_VALUE( 55.948), SIMDE_FLOAT16_VALUE( - 84.989) },
      { SIMDE_FLOAT16_VALUE( - 27.479), SIMDE_FLOAT16_VALUE( - 14.155),  SIMDE_FLOAT16_VALUE( 73.644), SIMDE_FLOAT16_VALUE( - 71.624) },
      { SIMDE_FLOAT16_VALUE( - 52.862), SIMDE_FLOAT16_VALUE( - 27.479),  SIMDE_FLOAT16_VALUE( 55.948),  SIMDE_FLOAT16_VALUE( 73.644) } },
    { {  SIMDE_FLOAT16_VALUE( 57.467), SIMDE_FLOAT16_VALUE( - 90.025),  SIMDE_FLOAT16_VALUE( 11.725),  SIMDE_FLOAT16_VALUE( 82.468) },
      {  SIMDE_FLOAT16_VALUE( 85.913), SIMDE_FLOAT16_VALUE( - 65.687), SIMDE_FLOAT16_VALUE( - 18.534), SIMDE_FLOAT16_VALUE( - 19.093) },
      {  SIMDE_FLOAT16_VALUE( 57.467),  SIMDE_FLOAT16_VALUE( 85.913),  SIMDE_FLOAT16_VALUE( 11.725), SIMDE_FLOAT16_VALUE( - 18.534) } },
    { { SIMDE_FLOAT16_VALUE( - 27.762),  SIMDE_FLOAT16_VALUE( 58.179), SIMDE_FLOAT16_VALUE( - 53.292), SIMDE_FLOAT16_VALUE( - 33.595) },
      { SIMDE_FLOAT16_VALUE( - 49.071), SIMDE_FLOAT16_VALUE( - 66.212), SIMDE_FLOAT16_VALUE( - 65.087),  SIMDE_FLOAT16_VALUE( 86.615) },
      { SIMDE_FLOAT16_VALUE( - 27.762), SIMDE_FLOAT16_VALUE( - 49.071), SIMDE_FLOAT16_VALUE( - 53.292), SIMDE_FLOAT16_VALUE( - 65.087) } },
    { {  SIMDE_FLOAT16_VALUE( 38.277), SIMDE_FLOAT16_VALUE( - 95.558),  SIMDE_FLOAT16_VALUE( 26.475), SIMDE_FLOAT16_VALUE( - 96.782) },
      {  SIMDE_FLOAT16_VALUE( 68.464), SIMDE_FLOAT16_VALUE( - 65.232),  SIMDE_FLOAT16_VALUE( 26.296),  SIMDE_FLOAT16_VALUE( 11.376) },
      {  SIMDE_FLOAT16_VALUE( 38.277),  SIMDE_FLOAT16_VALUE( 68.464),  SIMDE_FLOAT16_VALUE( 26.475),  SIMDE_FLOAT16_VALUE( 26.296) } },
    { { SIMDE_FLOAT16_VALUE( - 48.285),  SIMDE_FLOAT16_VALUE( 24.604),  SIMDE_FLOAT16_VALUE( 69.617),  SIMDE_FLOAT16_VALUE( 66.002) },
      {  SIMDE_FLOAT16_VALUE(  0.920), SIMDE_FLOAT16_VALUE( - 90.358),  SIMDE_FLOAT16_VALUE(  2.468), SIMDE_FLOAT16_VALUE( - 37.903) },
      { SIMDE_FLOAT16_VALUE( - 48.285),  SIMDE_FLOAT16_VALUE(  0.920),  SIMDE_FLOAT16_VALUE( 69.617),  SIMDE_FLOAT16_VALUE(  2.468) } },
    { { SIMDE_FLOAT16_VALUE( - 46.735), SIMDE_FLOAT16_VALUE( - 76.326), SIMDE_FLOAT16_VALUE( - 33.544),  SIMDE_FLOAT16_VALUE(  0.423) },
      { SIMDE_FLOAT16_VALUE( - 37.682), SIMDE_FLOAT16_VALUE( - 51.421),  SIMDE_FLOAT16_VALUE( 98.911),  SIMDE_FLOAT16_VALUE( 97.679) },
      { SIMDE_FLOAT16_VALUE( - 46.735), SIMDE_FLOAT16_VALUE( - 37.682), SIMDE_FLOAT16_VALUE( - 33.544),  SIMDE_FLOAT16_VALUE( 98.911) } },
    { { SIMDE_FLOAT16_VALUE( - 98.472), SIMDE_FLOAT16_VALUE( -  2.386), SIMDE_FLOAT16_VALUE( - 66.666),  SIMDE_FLOAT16_VALUE( 27.183) },
      {  SIMDE_FLOAT16_VALUE( 23.202),  SIMDE_FLOAT16_VALUE(  1.710),  SIMDE_FLOAT16_VALUE( 58.950), SIMDE_FLOAT16_VALUE( - 44.528) },
      { SIMDE_FLOAT16_VALUE( - 98.472),  SIMDE_FLOAT16_VALUE( 23.202), SIMDE_FLOAT16_VALUE( - 66.666),  SIMDE_FLOAT16_VALUE( 58.950) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float16x4_t a = simde_vld1_f16(test_vec[i].a);
    simde_float16x4_t b = simde_vld1_f16(test_vec[i].b);
    simde_float16x4_t r = simde_vtrn1_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_vtrn1_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_vtrn1_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(  -734.98), SIMDE_FLOAT32_C(   365.45) },
      { SIMDE_FLOAT32_C(  -158.72), SIMDE_FLOAT32_C(   801.49) },
      { SIMDE_FLOAT32_C(  -734.98), SIMDE_FLOAT32_C(  -158.72) } },
    { { SIMDE_FLOAT32_C(  -244.32), SIMDE_FLOAT32_C(   246.47) },
      { SIMDE_FLOAT32_C(  -998.98), SIMDE_FLOAT32_C(  -876.14) },
      { SIMDE_FLOAT32_C(  -244.32), SIMDE_FLOAT32_C(  -998.98) } },
    { { SIMDE_FLOAT32_C(   821.58), SIMDE_FLOAT32_C(   188.36) },
      { SIMDE_FLOAT32_C(   526.46), SIMDE_FLOAT32_C(   806.12) },
      { SIMDE_FLOAT32_C(   821.58), SIMDE_FLOAT32_C(   526.46) } },
    { { SIMDE_FLOAT32_C(   231.60), SIMDE_FLOAT32_C(  -192.02) },
      { SIMDE_FLOAT32_C(  -230.26), SIMDE_FLOAT32_C(  -950.64) },
      { SIMDE_FLOAT32_C(   231.60), SIMDE_FLOAT32_C(  -230.26) } },
    { { SIMDE_FLOAT32_C(   514.95), SIMDE_FLOAT32_C(  -326.95) },
      { SIMDE_FLOAT32_C(  -930.10), SIMDE_FLOAT32_C(   113.30) },
      { SIMDE_FLOAT32_C(   514.95), SIMDE_FLOAT32_C(  -930.10) } },
    { { SIMDE_FLOAT32_C(   562.02), SIMDE_FLOAT32_C(  -958.09) },
      { SIMDE_FLOAT32_C(   753.36), SIMDE_FLOAT32_C(  -955.88) },
      { SIMDE_FLOAT32_C(   562.02), SIMDE_FLOAT32_C(   753.36) } },
    { { SIMDE_FLOAT32_C(   690.44), SIMDE_FLOAT32_C(  -991.78) },
      { SIMDE_FLOAT32_C(   276.78), SIMDE_FLOAT32_C(   537.69) },
      { SIMDE_FLOAT32_C(   690.44), SIMDE_FLOAT32_C(   276.78) } },
    { { SIMDE_FLOAT32_C(   -86.37), SIMDE_FLOAT32_C(  -105.16) },
      { SIMDE_FLOAT32_C(   319.11), SIMDE_FLOAT32_C(   178.65) },
      { SIMDE_FLOAT32_C(   -86.37), SIMDE_FLOAT32_C(   319.11) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
    simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
    simde_float32x2_t r = simde_vtrn1_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_vtrn1_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_vtrn1_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[8];
    int8_t b[8];
    int8_t r[8];
  } test_vec[] = {
    { { -INT8_C(  60), -INT8_C(  45), -INT8_C(  88), -INT8_C(  68), -INT8_C(  80),  INT8_C(  32),  INT8_C(  27), -INT8_C(  59) },
      {  INT8_C(   0),  INT8_C(  78), -INT8_C(  30), -INT8_C(  82), -INT8_C( 119),  INT8_C(  46),  INT8_C(  17),  INT8_C(  49) },
      { -INT8_C(  60),  INT8_C(   0), -INT8_C(  88), -INT8_C(  30), -INT8_C(  80), -INT8_C( 119),  INT8_C(  27),  INT8_C(  17) } },
    { {  INT8_C( 101),  INT8_C(  29),  INT8_C(  88),  INT8_C( 118), -INT8_C( 106), -INT8_C(  13), -INT8_C(  99),  INT8_C( 125) },
      {  INT8_C(  71), -INT8_C(  38),  INT8_C( 116), -INT8_C(  26), -INT8_C(  54), -INT8_C( 111),  INT8_C(  13), -INT8_C( 114) },
      {  INT8_C( 101),  INT8_C(  71),  INT8_C(  88),  INT8_C( 116), -INT8_C( 106), -INT8_C(  54), -INT8_C(  99),  INT8_C(  13) } },
    { {  INT8_C( 101), -INT8_C(  75),  INT8_C(  75),  INT8_C(  21), -INT8_C(  43),  INT8_C( 102), -INT8_C(  37), -INT8_C(  42) },
      { -INT8_C(  75), -INT8_C(  67), -INT8_C( 124),  INT8_C(  62), -INT8_C(  20), -INT8_C( 107),  INT8_C( 112),  INT8_C(  81) },
      {  INT8_C( 101), -INT8_C(  75),  INT8_C(  75), -INT8_C( 124), -INT8_C(  43), -INT8_C(  20), -INT8_C(  37),  INT8_C( 112) } },
    { { -INT8_C(  77), -INT8_C(  56), -INT8_C(  57),  INT8_C(  73), -INT8_C(  69),  INT8_C( 100), -INT8_C(  58),  INT8_C(   2) },
      {  INT8_C(  62),  INT8_C(  58), -INT8_C(  23),  INT8_C(   8), -INT8_C(  52), -INT8_C(  10), -INT8_C( 105),  INT8_C(  49) },
      { -INT8_C(  77),  INT8_C(  62), -INT8_C(  57), -INT8_C(  23), -INT8_C(  69), -INT8_C(  52), -INT8_C(  58), -INT8_C( 105) } },
    { { -INT8_C(  84), -INT8_C(  30),  INT8_C(  70), -INT8_C( 127),  INT8_C(  72),  INT8_C(  33),  INT8_C(  87), -INT8_C(   3) },
      { -INT8_C(  33), -INT8_C(  37),  INT8_C(  60), -INT8_C(  53),  INT8_C( 113), -INT8_C(  84),  INT8_C(  28),  INT8_C(  36) },
      { -INT8_C(  84), -INT8_C(  33),  INT8_C(  70),  INT8_C(  60),  INT8_C(  72),  INT8_C( 113),  INT8_C(  87),  INT8_C(  28) } },
    { {  INT8_C( 116), -INT8_C(  29),  INT8_C( 109),  INT8_C(  47),  INT8_C(  71),  INT8_C(  51),  INT8_C(  50), -INT8_C( 123) },
      {  INT8_C( 110),  INT8_C(  27), -INT8_C( 115),  INT8_C(  58),  INT8_C(  17),  INT8_C(  36),  INT8_C( 107), -INT8_C(  67) },
      {  INT8_C( 116),  INT8_C( 110),  INT8_C( 109), -INT8_C( 115),  INT8_C(  71),  INT8_C(  17),  INT8_C(  50),  INT8_C( 107) } },
    { {  INT8_C(   6), -INT8_C(  79),  INT8_C(  63),  INT8_C(  79), -INT8_C(  45), -INT8_C( 106),  INT8_C(  76), -INT8_C(  78) },
      {  INT8_C( 114), -INT8_C( 120),  INT8_C( 125), -INT8_C(  29),  INT8_C(  52), -INT8_C( 103),  INT8_C(   7), -INT8_C(  88) },
      {  INT8_C(   6),  INT8_C( 114),  INT8_C(  63),  INT8_C( 125), -INT8_C(  45),  INT8_C(  52),  INT8_C(  76),  INT8_C(   7) } },
    { {  INT8_C( 124),  INT8_C( 116), -INT8_C(  40), -INT8_C(  61), -INT8_C(  89),  INT8_C(  10),  INT8_C(  72),  INT8_C(  21) },
      {  INT8_C(  37), -INT8_C(  43),  INT8_C(  79),  INT8_C(  54), -INT8_C(   6), -INT8_C(  70), -INT8_C(  12),  INT8_C(   0) },
      {  INT8_C( 124),  INT8_C(  37), -INT8_C(  40),  INT8_C(  79), -INT8_C(  89), -INT8_C(   6),  INT8_C(  72), -INT8_C(  12) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[4];
    int16_t b[4];
    int16_t r[4];
  } test_vec[] = {
    { { -INT16_C( 12600),  INT16_C( 17726),  INT16_C( 25964), -INT16_C( 31246) },
      {  INT16_C( 29446),  INT16_C( 19730),  INT16_C(  5918),  INT16_C( 11654) },
      { -INT16_C( 12600),  INT16_C( 29446),  INT16_C( 25964),  INT16_C(  5918) } },
    { {  INT16_C( 20514),  INT16_C( 22734), -INT16_C(  2490), -INT16_C( 23811) },
      { -INT16_C( 13108),  INT16_C( 28476), -INT16_C( 13288), -INT16_C(  8175) },
      {  INT16_C( 20514), -INT16_C( 13108), -INT16_C(  2490), -INT16_C( 13288) } },
    { {  INT16_C( 20378),  INT16_C(  1574),  INT16_C(  6324), -INT16_C( 17781) },
      { -INT16_C( 24948), -INT16_C( 22008), -INT16_C( 29003), -INT16_C( 10280) },
      {  INT16_C( 20378), -INT16_C( 24948),  INT16_C(  6324), -INT16_C( 29003) } },
    { { -INT16_C( 22817),  INT16_C(  9519),  INT16_C( 11676),  INT16_C( 26823) },
      {  INT16_C(  1273),  INT16_C(  4823), -INT16_C(  5936),  INT16_C( 27378) },
      { -INT16_C( 22817),  INT16_C(  1273),  INT16_C( 11676), -INT16_C(  5936) } },
    { {  INT16_C(  6199), -INT16_C(  5264), -INT16_C(   975), -INT16_C( 16986) },
      { -INT16_C( 20838),  INT16_C( 20327),  INT16_C( 16188),  INT16_C(  6951) },
      {  INT16_C(  6199), -INT16_C( 20838), -INT16_C(   975),  INT16_C( 16188) } },
    { {  INT16_C( 22245), -INT16_C( 32447),  INT16_C(  2179),  INT16_C( 32233) },
      { -INT16_C( 16372), -INT16_C(  9073), -INT16_C( 32344), -INT16_C(  8378) },
      {  INT16_C( 22245), -INT16_C( 16372),  INT16_C(  2179), -INT16_C( 32344) } },
    { { -INT16_C( 18534), -INT16_C( 13365),  INT16_C( 29107),  INT16_C( 19848) },
      { -INT16_C(  4321),  INT16_C( 23452), -INT16_C( 15569),  INT16_C(  5239) },
      { -INT16_C( 18534), -INT16_C(  4321),  INT16_C( 29107), -INT16_C( 15569) } },
    { { -INT16_C( 18406), -INT16_C( 25194),  INT16_C( 32704), -INT16_C( 13030) },
      { -INT16_C( 22208), -INT16_C(  5975), -INT16_C(  4053), -INT16_C( 14904) },
      { -INT16_C( 18406), -INT16_C( 22208),  INT16_C( 32704), -INT16_C(  4053) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[2];
    int32_t b[2];
    int32_t r[2];
  } test_vec[] = {
    { { -INT32_C(  2113992025),  INT32_C(  1335496731) },
      { -INT32_C(   441354692), -INT32_C(   150353327) },
      { -INT32_C(  2113992025), -INT32_C(   441354692) } },
    { {  INT32_C(   131230526), -INT32_C(  1810676118) },
      {  INT32_C(     2093845), -INT32_C(  1520903682) },
      {  INT32_C(   131230526),  INT32_C(     2093845) } },
    { { -INT32_C(    14264092), -INT32_C(  1538342552) },
      { -INT32_C(  2004287433),  INT32_C(   159421386) },
      { -INT32_C(    14264092), -INT32_C(  2004287433) } },
    { {  INT32_C(  1762677502), -INT32_C(  1375919208) },
      {  INT32_C(   363666710), -INT32_C(   625342986) },
      {  INT32_C(  1762677502),  INT32_C(   363666710) } },
    { { -INT32_C(   975511203), -INT32_C(   647419742) },
      { -INT32_C(   211684568), -INT32_C(  2063801978) },
      { -INT32_C(   975511203), -INT32_C(   211684568) } },
    { { -INT32_C(   873657293),  INT32_C(  1182329647) },
      { -INT32_C(    27581176), -INT32_C(  1999039189) },
      { -INT32_C(   873657293), -INT32_C(    27581176) } },
    { { -INT32_C(  1739672586),  INT32_C(    74561499) },
      {  INT32_C(   821547946), -INT32_C(   390728780) },
      { -INT32_C(  1739672586),  INT32_C(   821547946) } },
    { {  INT32_C(   783524607), -INT32_C(  1787548531) },
      {  INT32_C(  2090127185), -INT32_C(   620401179) },
      {  INT32_C(   783524607),  INT32_C(  2090127185) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[8];
    uint8_t b[8];
    uint8_t r[8];
  } test_vec[] = {
    { { UINT8_C(180), UINT8_C(234), UINT8_C( 38), UINT8_C(184), UINT8_C(112), UINT8_C( 40), UINT8_C(124), UINT8_C( 20) },
      { UINT8_C( 30), UINT8_C(250), UINT8_C( 91), UINT8_C( 78), UINT8_C(166), UINT8_C(229), UINT8_C(128), UINT8_C(117) },
      { UINT8_C(180), UINT8_C( 30), UINT8_C( 38), UINT8_C( 91), UINT8_C(112), UINT8_C(166), UINT8_C(124), UINT8_C(128) } },
    { { UINT8_C( 51), UINT8_C(233), UINT8_C(232), UINT8_C( 60), UINT8_C(220), UINT8_C( 27), UINT8_C(182), UINT8_C(252) },
      { UINT8_C( 75), UINT8_C( 64), UINT8_C(212), UINT8_C(237), UINT8_C( 88), UINT8_C( 50), UINT8_C( 94), UINT8_C( 12) },
      { UINT8_C( 51), UINT8_C( 75), UINT8_C(232), UINT8_C(212), UINT8_C(220), UINT8_C( 88), UINT8_C(182), UINT8_C( 94) } },
    { { UINT8_C( 28), UINT8_C(133), UINT8_C(196), UINT8_C(140), UINT8_C(173), UINT8_C( 64), UINT8_C(161), UINT8_C(204) },
      { UINT8_C( 59), UINT8_C(252), UINT8_C( 26), UINT8_C(225), UINT8_C(225), UINT8_C(154), UINT8_C( 86), UINT8_C( 21) },
      { UINT8_C( 28), UINT8_C( 59), UINT8_C(196), UINT8_C( 26), UINT8_C(173), UINT8_C(225), UINT8_C(161), UINT8_C( 86) } },
    { { UINT8_C(132), UINT8_C( 62), UINT8_C( 81), UINT8_C( 96), UINT8_C( 89), UINT8_C(  7), UINT8_C( 92), UINT8_C(164) },
      { UINT8_C( 71), UINT8_C( 49), UINT8_C(145), UINT8_C(159), UINT8_C( 99), UINT8_C(240), UINT8_C(171), UINT8_C(127) },
      { UINT8_C(132), UINT8_C( 71), UINT8_C( 81), UINT8_C(145), UINT8_C( 89), UINT8_C( 99), UINT8_C( 92), UINT8_C(171) } },
    { { UINT8_C(117), UINT8_C(111), UINT8_C( 12), UINT8_C( 34), UINT8_C(176), UINT8_C(173), UINT8_C(238), UINT8_C(235) },
      { UINT8_C(169), UINT8_C(  9), UINT8_C(204), UINT8_C(138), UINT8_C(163), UINT8_C( 34), UINT8_C(159), UINT8_C( 39) },
      { UINT8_C(117), UINT8_C(169), UINT8_C( 12), UINT8_C(204), UINT8_C(176), UINT8_C(163), UINT8_C(238), UINT8_C(159) } },
    { { UINT8_C( 97), UINT8_C(240), UINT8_C(136), UINT8_C(186), UINT8_C(247), UINT8_C(228), UINT8_C( 95), UINT8_C( 62) },
      { UINT8_C( 21), UINT8_C(240), UINT8_C(221), UINT8_C(120), UINT8_C(224), UINT8_C(136), UINT8_C(248), UINT8_C( 85) },
      { UINT8_C( 97), UINT8_C( 21), UINT8_C(136), UINT8_C(221), UINT8_C(247), UINT8_C(224), UINT8_C( 95), UINT8_C(248) } },
    { { UINT8_C(248), UINT8_C(  4), UINT8_C(120), UINT8_C(168), UINT8_C(177), UINT8_C(102), UINT8_C(147), UINT8_C( 90) },
      { UINT8_C(111), UINT8_C( 95), UINT8_C(228), UINT8_C( 19), UINT8_C(129), UINT8_C(132), UINT8_C( 58), UINT8_C(226) },
      { UINT8_C(248), UINT8_C(111), UINT8_C(120), UINT8_C(228), UINT8_C(177), UINT8_C(129), UINT8_C(147), UINT8_C( 58) } },
    { { UINT8_C(116), UINT8_C(194), UINT8_C(157), UINT8_C(108), UINT8_C(167), UINT8_C(252), UINT8_C(170), UINT8_C(188) },
      { UINT8_C(236), UINT8_C(136), UINT8_C( 53), UINT8_C(205), UINT8_C( 16), UINT8_C( 45), UINT8_C( 34), UINT8_C(  8) },
      { UINT8_C(116), UINT8_C(236), UINT8_C(157), UINT8_C( 53), UINT8_C(167), UINT8_C( 16), UINT8_C(170), UINT8_C( 34) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t r[4];
  } test_vec[] = {
    { { UINT16_C(60788), UINT16_C(40466), UINT16_C(30557), UINT16_C(47308) },
      { UINT16_C(27512), UINT16_C( 3061), UINT16_C(41915), UINT16_C(15633) },
      { UINT16_C(60788), UINT16_C(27512), UINT16_C(30557), UINT16_C(41915) } },
    { { UINT16_C(31826), UINT16_C(40911), UINT16_C(11794), UINT16_C( 5983) },
      { UINT16_C(15515), UINT16_C(15720), UINT16_C(44460), UINT16_C( 8198) },
      { UINT16_C(31826), UINT16_C(15515), UINT16_C(11794), UINT16_C(44460) } },
    { { UINT16_C( 6298), UINT16_C(63678), UINT16_C(35471), UINT16_C( 1968) },
      { UINT16_C(42485), UINT16_C(45331), UINT16_C( 9289), UINT16_C(39918) },
      { UINT16_C( 6298), UINT16_C(42485), UINT16_C(35471), UINT16_C( 9289) } },
    { { UINT16_C(48544), UINT16_C(45627), UINT16_C(39659), UINT16_C(34762) },
      { UINT16_C(13015), UINT16_C(33732), UINT16_C(51936), UINT16_C(31395) },
      { UINT16_C(48544), UINT16_C(13015), UINT16_C(39659), UINT16_C(51936) } },
    { { UINT16_C(25058), UINT16_C(29298), UINT16_C( 8940), UINT16_C(57721) },
      { UINT16_C(36040), UINT16_C( 4498), UINT16_C(32944), UINT16_C(20908) },
      { UINT16_C(25058), UINT16_C(36040), UINT16_C( 8940), UINT16_C(32944) } },
    { { UINT16_C(59197), UINT16_C(10499), UINT16_C(52610), UINT16_C(22960) },
      { UINT16_C(29696), UINT16_C(57564), UINT16_C(32575), UINT16_C( 8538) },
      { UINT16_C(59197), UINT16_C(29696), UINT16_C(52610), UINT16_C(32575) } },
    { { UINT16_C(52704), UINT16_C(52371), UINT16_C( 3567), UINT16_C(47022) },
      { UINT16_C(16537), UINT16_C(19144), UINT16_C(30145), UINT16_C(65179) },
      { UINT16_C(52704), UINT16_C(16537), UINT16_C( 3567), UINT16_C(30145) } },
    { { UINT16_C(40540), UINT16_C(56871), UINT16_C(55148), UINT16_C(27703) },
      { UINT16_C( 4940), UINT16_C(35660), UINT16_C(42642), UINT16_C(29612) },
      { UINT16_C(40540), UINT16_C( 4940), UINT16_C(55148), UINT16_C(42642) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t r[2];
  } test_vec[] = {
    { { UINT32_C( 434122982), UINT32_C(2452681820) },
      { UINT32_C(2633101907), UINT32_C(3594086343) },
      { UINT32_C( 434122982), UINT32_C(2633101907) } },
    { { UINT32_C(3976061469), UINT32_C(1299237744) },
      { UINT32_C(3511335039), UINT32_C(2688013498) },
      { UINT32_C(3976061469), UINT32_C(3511335039) } },
    { { UINT32_C(1622808580), UINT32_C(1626532364) },
      { UINT32_C(2768036828), UINT32_C(1736062282) },
      { UINT32_C(1622808580), UINT32_C(2768036828) } },
    { { UINT32_C(2270394135), UINT32_C(3251946562) },
      { UINT32_C( 915545980), UINT32_C(4158049011) },
      { UINT32_C(2270394135), UINT32_C( 915545980) } },
    { { UINT32_C(3998716130), UINT32_C(1464748410) },
      { UINT32_C(1996180012), UINT32_C(2547873151) },
      { UINT32_C(3998716130), UINT32_C(1996180012) } },
    { { UINT32_C( 773730540), UINT32_C(1894773748) },
      { UINT32_C(  94798354), UINT32_C( 788299084) },
      { UINT32_C( 773730540), UINT32_C(  94798354) } },
    { { UINT32_C(2283557645), UINT32_C(3370085276) },
      { UINT32_C( 893311669), UINT32_C(1003232079) },
      { UINT32_C(2283557645), UINT32_C( 893311669) } },
    { { UINT32_C(1080683083), UINT32_C(4021311709) },
      { UINT32_C( 653547482), UINT32_C(3780440276) },
      { UINT32_C(1080683083), UINT32_C( 653547482) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1q_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( - 50.625),  SIMDE_FLOAT16_VALUE( 30.747),  SIMDE_FLOAT16_VALUE( 18.487),  SIMDE_FLOAT16_VALUE( 57.491),
        SIMDE_FLOAT16_VALUE( - 21.129),  SIMDE_FLOAT16_VALUE( 15.440), SIMDE_FLOAT16_VALUE( - 52.593), SIMDE_FLOAT16_VALUE( -  4.727) },
      {  SIMDE_FLOAT16_VALUE( 44.277), SIMDE_FLOAT16_VALUE( - 25.789), SIMDE_FLOAT16_VALUE( - 25.136),  SIMDE_FLOAT16_VALUE( 33.647),
        SIMDE_FLOAT16_VALUE( - 95.841),  SIMDE_FLOAT16_VALUE( 52.244), SIMDE_FLOAT16_VALUE( - 21.627),  SIMDE_FLOAT16_VALUE( 66.122) },
      { SIMDE_FLOAT16_VALUE( - 50.625),  SIMDE_FLOAT16_VALUE( 44.277),  SIMDE_FLOAT16_VALUE( 18.487), SIMDE_FLOAT16_VALUE( - 25.136),
        SIMDE_FLOAT16_VALUE( - 21.129), SIMDE_FLOAT16_VALUE( - 95.841), SIMDE_FLOAT16_VALUE( - 52.593), SIMDE_FLOAT16_VALUE( - 21.627) } },
    { { SIMDE_FLOAT16_VALUE( -  6.913), SIMDE_FLOAT16_VALUE( - 94.272),  SIMDE_FLOAT16_VALUE( 11.297),  SIMDE_FLOAT16_VALUE(  3.058),
        SIMDE_FLOAT16_VALUE( -  5.001), SIMDE_FLOAT16_VALUE( -  7.243),  SIMDE_FLOAT16_VALUE( 48.542), SIMDE_FLOAT16_VALUE( - 21.366) },
      {  SIMDE_FLOAT16_VALUE( 18.542),  SIMDE_FLOAT16_VALUE( 92.836), SIMDE_FLOAT16_VALUE( - 53.782), SIMDE_FLOAT16_VALUE( - 54.711),
         SIMDE_FLOAT16_VALUE( 46.595),  SIMDE_FLOAT16_VALUE( 50.270),  SIMDE_FLOAT16_VALUE( 64.443), SIMDE_FLOAT16_VALUE( - 32.873) },
      { SIMDE_FLOAT16_VALUE( -  6.913),  SIMDE_FLOAT16_VALUE( 18.542),  SIMDE_FLOAT16_VALUE( 11.297), SIMDE_FLOAT16_VALUE( - 53.782),
        SIMDE_FLOAT16_VALUE( -  5.001),  SIMDE_FLOAT16_VALUE( 46.595),  SIMDE_FLOAT16_VALUE( 48.542),  SIMDE_FLOAT16_VALUE( 64.443) } },
    { {  SIMDE_FLOAT16_VALUE( 92.715),  SIMDE_FLOAT16_VALUE( 49.477),  SIMDE_FLOAT16_VALUE( 85.205),  SIMDE_FLOAT16_VALUE( 90.565),
        SIMDE_FLOAT16_VALUE( - 47.228), SIMDE_FLOAT16_VALUE( - 61.293),  SIMDE_FLOAT16_VALUE( 80.419),  SIMDE_FLOAT16_VALUE( 32.831) },
      { SIMDE_FLOAT16_VALUE( - 59.790),  SIMDE_FLOAT16_VALUE( 90.991),  SIMDE_FLOAT16_VALUE(  9.151),  SIMDE_FLOAT16_VALUE( 81.903),
         SIMDE_FLOAT16_VALUE( 36.535), SIMDE_FLOAT16_VALUE( -  5.406), SIMDE_FLOAT16_VALUE( - 73.592),  SIMDE_FLOAT16_VALUE( 52.041) },
      {  SIMDE_FLOAT16_VALUE( 92.715), SIMDE_FLOAT16_VALUE( - 59.790),  SIMDE_FLOAT16_VALUE( 85.205),  SIMDE_FLOAT16_VALUE(  9.151),
        SIMDE_FLOAT16_VALUE( - 47.228),  SIMDE_FLOAT16_VALUE( 36.535),  SIMDE_FLOAT16_VALUE( 80.419), SIMDE_FLOAT16_VALUE( - 73.592) } },
    { { SIMDE_FLOAT16_VALUE( -  5.048), SIMDE_FLOAT16_VALUE( - 15.367), SIMDE_FLOAT16_VALUE( - 85.673),  SIMDE_FLOAT16_VALUE( 94.930),
         SIMDE_FLOAT16_VALUE( 82.348), SIMDE_FLOAT16_VALUE( -  3.141),  SIMDE_FLOAT16_VALUE( 83.294),  SIMDE_FLOAT16_VALUE( 25.936) },
      {  SIMDE_FLOAT16_VALUE( 96.385), SIMDE_FLOAT16_VALUE( - 79.579), SIMDE_FLOAT16_VALUE( -  4.256), SIMDE_FLOAT16_VALUE( - 34.022),
         SIMDE_FLOAT16_VALUE( 82.922), SIMDE_FLOAT16_VALUE( -  1.174),  SIMDE_FLOAT16_VALUE( 40.213),  SIMDE_FLOAT16_VALUE( 55.100) },
      { SIMDE_FLOAT16_VALUE( -  5.048),  SIMDE_FLOAT16_VALUE( 96.385), SIMDE_FLOAT16_VALUE( - 85.673), SIMDE_FLOAT16_VALUE( -  4.256),
         SIMDE_FLOAT16_VALUE( 82.348),  SIMDE_FLOAT16_VALUE( 82.922),  SIMDE_FLOAT16_VALUE( 83.294),  SIMDE_FLOAT16_VALUE( 40.213) } },
    { {  SIMDE_FLOAT16_VALUE( 19.062),  SIMDE_FLOAT16_VALUE( 43.816), SIMDE_FLOAT16_VALUE( - 30.166), SIMDE_FLOAT16_VALUE( - 39.978),
        SIMDE_FLOAT16_VALUE( - 39.433),  SIMDE_FLOAT16_VALUE( 11.691),  SIMDE_FLOAT16_VALUE(  7.837),  SIMDE_FLOAT16_VALUE( 17.290) },
      {  SIMDE_FLOAT16_VALUE(  8.433),  SIMDE_FLOAT16_VALUE( 16.426), SIMDE_FLOAT16_VALUE( - 43.558),  SIMDE_FLOAT16_VALUE( 96.327),
        SIMDE_FLOAT16_VALUE( - 25.953), SIMDE_FLOAT16_VALUE( - 22.456), SIMDE_FLOAT16_VALUE( - 81.824),  SIMDE_FLOAT16_VALUE( 87.942) },
      {  SIMDE_FLOAT16_VALUE( 19.062),  SIMDE_FLOAT16_VALUE(  8.433), SIMDE_FLOAT16_VALUE( - 30.166), SIMDE_FLOAT16_VALUE( - 43.558),
        SIMDE_FLOAT16_VALUE( - 39.433), SIMDE_FLOAT16_VALUE( - 25.953),  SIMDE_FLOAT16_VALUE(  7.837), SIMDE_FLOAT16_VALUE( - 81.824) } },
    { { SIMDE_FLOAT16_VALUE( - 11.648), SIMDE_FLOAT16_VALUE( - 29.171),  SIMDE_FLOAT16_VALUE( 80.053), SIMDE_FLOAT16_VALUE( - 68.578),
        SIMDE_FLOAT16_VALUE( - 48.654), SIMDE_FLOAT16_VALUE( - 99.755), SIMDE_FLOAT16_VALUE( - 90.352),  SIMDE_FLOAT16_VALUE( 89.383) },
      { SIMDE_FLOAT16_VALUE( - 33.866), SIMDE_FLOAT16_VALUE( - 47.474), SIMDE_FLOAT16_VALUE( - 66.626), SIMDE_FLOAT16_VALUE( - 97.760),
        SIMDE_FLOAT16_VALUE( - 84.997),  SIMDE_FLOAT16_VALUE( 67.434), SIMDE_FLOAT16_VALUE( - 97.087), SIMDE_FLOAT16_VALUE( - 32.962) },
      { SIMDE_FLOAT16_VALUE( - 11.648), SIMDE_FLOAT16_VALUE( - 33.866),  SIMDE_FLOAT16_VALUE( 80.053), SIMDE_FLOAT16_VALUE( - 66.626),
        SIMDE_FLOAT16_VALUE( - 48.654), SIMDE_FLOAT16_VALUE( - 84.997), SIMDE_FLOAT16_VALUE( - 90.352), SIMDE_FLOAT16_VALUE( - 97.087) } },
    { {  SIMDE_FLOAT16_VALUE( 99.618), SIMDE_FLOAT16_VALUE( - 77.016), SIMDE_FLOAT16_VALUE( - 80.554), SIMDE_FLOAT16_VALUE( - 81.723),
         SIMDE_FLOAT16_VALUE( 10.169),  SIMDE_FLOAT16_VALUE( 23.695), SIMDE_FLOAT16_VALUE( - 19.190),  SIMDE_FLOAT16_VALUE( 95.941) },
      { SIMDE_FLOAT16_VALUE( - 51.304), SIMDE_FLOAT16_VALUE( - 96.429),  SIMDE_FLOAT16_VALUE( 13.144), SIMDE_FLOAT16_VALUE( -  7.245),
         SIMDE_FLOAT16_VALUE( 29.744),  SIMDE_FLOAT16_VALUE( 29.133),  SIMDE_FLOAT16_VALUE( 74.282), SIMDE_FLOAT16_VALUE( - 74.127) },
      {  SIMDE_FLOAT16_VALUE( 99.618), SIMDE_FLOAT16_VALUE( - 51.304), SIMDE_FLOAT16_VALUE( - 80.554),  SIMDE_FLOAT16_VALUE( 13.144),
         SIMDE_FLOAT16_VALUE( 10.169),  SIMDE_FLOAT16_VALUE( 29.744), SIMDE_FLOAT16_VALUE( - 19.190),  SIMDE_FLOAT16_VALUE( 74.282) } },
    { {  SIMDE_FLOAT16_VALUE( 83.161), SIMDE_FLOAT16_VALUE( -  1.215),  SIMDE_FLOAT16_VALUE( 78.312), SIMDE_FLOAT16_VALUE( - 84.448),
         SIMDE_FLOAT16_VALUE( 81.889),  SIMDE_FLOAT16_VALUE(  3.516),  SIMDE_FLOAT16_VALUE( 29.221), SIMDE_FLOAT16_VALUE( - 43.978) },
      {  SIMDE_FLOAT16_VALUE(  5.808), SIMDE_FLOAT16_VALUE( - 80.158), SIMDE_FLOAT16_VALUE( - 16.019),  SIMDE_FLOAT16_VALUE( 94.441),
         SIMDE_FLOAT16_VALUE( 76.241),  SIMDE_FLOAT16_VALUE( 17.818), SIMDE_FLOAT16_VALUE( - 76.931),  SIMDE_FLOAT16_VALUE( 91.708) },
      {  SIMDE_FLOAT16_VALUE( 83.161),  SIMDE_FLOAT16_VALUE(  5.808),  SIMDE_FLOAT16_VALUE( 78.312), SIMDE_FLOAT16_VALUE( - 16.019),
         SIMDE_FLOAT16_VALUE( 81.889),  SIMDE_FLOAT16_VALUE( 76.241),  SIMDE_FLOAT16_VALUE( 29.221), SIMDE_FLOAT16_VALUE( - 76.931) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_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(  -522.18), SIMDE_FLOAT32_C(   365.36), SIMDE_FLOAT32_C(  -879.25), SIMDE_FLOAT32_C(  -911.32) },
      { SIMDE_FLOAT32_C(   508.26), SIMDE_FLOAT32_C(   535.56), SIMDE_FLOAT32_C(  -927.14), SIMDE_FLOAT32_C(  -145.00) },
      { SIMDE_FLOAT32_C(  -522.18), SIMDE_FLOAT32_C(   508.26), SIMDE_FLOAT32_C(  -879.25), SIMDE_FLOAT32_C(  -927.14) } },
    { { SIMDE_FLOAT32_C(  -644.24), SIMDE_FLOAT32_C(   758.58), SIMDE_FLOAT32_C(   592.05), SIMDE_FLOAT32_C(   670.85) },
      { SIMDE_FLOAT32_C(   408.23), SIMDE_FLOAT32_C(  -493.59), SIMDE_FLOAT32_C(  -660.12), SIMDE_FLOAT32_C(   163.68) },
      { SIMDE_FLOAT32_C(  -644.24), SIMDE_FLOAT32_C(   408.23), SIMDE_FLOAT32_C(   592.05), SIMDE_FLOAT32_C(  -660.12) } },
    { { SIMDE_FLOAT32_C(  -787.94), SIMDE_FLOAT32_C(  -882.32), SIMDE_FLOAT32_C(   367.24), SIMDE_FLOAT32_C(   -16.83) },
      { SIMDE_FLOAT32_C(  -482.56), SIMDE_FLOAT32_C(   -96.42), SIMDE_FLOAT32_C(  -722.75), SIMDE_FLOAT32_C(  -446.06) },
      { SIMDE_FLOAT32_C(  -787.94), SIMDE_FLOAT32_C(  -482.56), SIMDE_FLOAT32_C(   367.24), SIMDE_FLOAT32_C(  -722.75) } },
    { { SIMDE_FLOAT32_C(   -23.04), SIMDE_FLOAT32_C(   914.12), SIMDE_FLOAT32_C(   495.70), SIMDE_FLOAT32_C(   665.01) },
      { SIMDE_FLOAT32_C(   292.03), SIMDE_FLOAT32_C(  -265.04), SIMDE_FLOAT32_C(   537.61), SIMDE_FLOAT32_C(   769.84) },
      { SIMDE_FLOAT32_C(   -23.04), SIMDE_FLOAT32_C(   292.03), SIMDE_FLOAT32_C(   495.70), SIMDE_FLOAT32_C(   537.61) } },
    { { SIMDE_FLOAT32_C(  -899.68), SIMDE_FLOAT32_C(   658.36), SIMDE_FLOAT32_C(   858.52), SIMDE_FLOAT32_C(   608.58) },
      { SIMDE_FLOAT32_C(   193.92), SIMDE_FLOAT32_C(   931.38), SIMDE_FLOAT32_C(  -536.43), SIMDE_FLOAT32_C(   549.69) },
      { SIMDE_FLOAT32_C(  -899.68), SIMDE_FLOAT32_C(   193.92), SIMDE_FLOAT32_C(   858.52), SIMDE_FLOAT32_C(  -536.43) } },
    { { SIMDE_FLOAT32_C(   689.97), SIMDE_FLOAT32_C(  -944.37), SIMDE_FLOAT32_C(   220.54), SIMDE_FLOAT32_C(    98.20) },
      { SIMDE_FLOAT32_C(  -437.96), SIMDE_FLOAT32_C(   560.42), SIMDE_FLOAT32_C(  -738.12), SIMDE_FLOAT32_C(  -225.90) },
      { SIMDE_FLOAT32_C(   689.97), SIMDE_FLOAT32_C(  -437.96), SIMDE_FLOAT32_C(   220.54), SIMDE_FLOAT32_C(  -738.12) } },
    { { SIMDE_FLOAT32_C(   678.09), SIMDE_FLOAT32_C(   629.12), SIMDE_FLOAT32_C(   757.27), SIMDE_FLOAT32_C(  -804.46) },
      { SIMDE_FLOAT32_C(  -467.30), SIMDE_FLOAT32_C(  -965.48), SIMDE_FLOAT32_C(  -250.52), SIMDE_FLOAT32_C(   509.67) },
      { SIMDE_FLOAT32_C(   678.09), SIMDE_FLOAT32_C(  -467.30), SIMDE_FLOAT32_C(   757.27), SIMDE_FLOAT32_C(  -250.52) } },
    { { SIMDE_FLOAT32_C(   948.64), SIMDE_FLOAT32_C(  -754.82), SIMDE_FLOAT32_C(   174.67), SIMDE_FLOAT32_C(   240.67) },
      { SIMDE_FLOAT32_C(   -19.85), SIMDE_FLOAT32_C(  -287.72), SIMDE_FLOAT32_C(    10.52), SIMDE_FLOAT32_C(    80.47) },
      { SIMDE_FLOAT32_C(   948.64), SIMDE_FLOAT32_C(   -19.85), SIMDE_FLOAT32_C(   174.67), SIMDE_FLOAT32_C(    10.52) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_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(  -499.12), SIMDE_FLOAT64_C(  -611.84) },
      { SIMDE_FLOAT64_C(   618.92), SIMDE_FLOAT64_C(  -353.88) },
      { SIMDE_FLOAT64_C(  -499.12), SIMDE_FLOAT64_C(   618.92) } },
    { { SIMDE_FLOAT64_C(   542.91), SIMDE_FLOAT64_C(   443.42) },
      { SIMDE_FLOAT64_C(  -774.93), SIMDE_FLOAT64_C(   219.66) },
      { SIMDE_FLOAT64_C(   542.91), SIMDE_FLOAT64_C(  -774.93) } },
    { { SIMDE_FLOAT64_C(    43.30), SIMDE_FLOAT64_C(   437.28) },
      { SIMDE_FLOAT64_C(   412.68), SIMDE_FLOAT64_C(  -401.41) },
      { SIMDE_FLOAT64_C(    43.30), SIMDE_FLOAT64_C(   412.68) } },
    { { SIMDE_FLOAT64_C(   823.43), SIMDE_FLOAT64_C(   254.13) },
      { SIMDE_FLOAT64_C(  -356.45), SIMDE_FLOAT64_C(   862.90) },
      { SIMDE_FLOAT64_C(   823.43), SIMDE_FLOAT64_C(  -356.45) } },
    { { SIMDE_FLOAT64_C(   -30.73), SIMDE_FLOAT64_C(   631.32) },
      { SIMDE_FLOAT64_C(   321.40), SIMDE_FLOAT64_C(   984.72) },
      { SIMDE_FLOAT64_C(   -30.73), SIMDE_FLOAT64_C(   321.40) } },
    { { SIMDE_FLOAT64_C(   283.84), SIMDE_FLOAT64_C(  -391.31) },
      { SIMDE_FLOAT64_C(   957.98), SIMDE_FLOAT64_C(   515.26) },
      { SIMDE_FLOAT64_C(   283.84), SIMDE_FLOAT64_C(   957.98) } },
    { { SIMDE_FLOAT64_C(  -327.25), SIMDE_FLOAT64_C(  -666.99) },
      { SIMDE_FLOAT64_C(  -844.37), SIMDE_FLOAT64_C(  -877.10) },
      { SIMDE_FLOAT64_C(  -327.25), SIMDE_FLOAT64_C(  -844.37) } },
    { { SIMDE_FLOAT64_C(   397.41), SIMDE_FLOAT64_C(  -596.55) },
      { SIMDE_FLOAT64_C(   732.55), SIMDE_FLOAT64_C(   898.29) },
      { SIMDE_FLOAT64_C(   397.41), SIMDE_FLOAT64_C(   732.55) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[16];
    int8_t b[16];
    int8_t r[16];
  } test_vec[] = {
    { { -INT8_C(   5),  INT8_C(  91), -INT8_C(  64), -INT8_C(  51), -INT8_C(  31), -INT8_C( 105), -INT8_C(  45),  INT8_C(  96),
         INT8_C(   5), -INT8_C( 120),  INT8_C(  11),  INT8_C(  81), -INT8_C(  40),  INT8_C(  33),  INT8_C( 126), -INT8_C(  48) },
      { -INT8_C(   4), -INT8_C(  12),  INT8_C(  64), -INT8_C(  88),  INT8_C(  17),  INT8_C(  67), -INT8_C(  83),  INT8_C( 106),
         INT8_C(  71), -INT8_C( 114),  INT8_C(   1),  INT8_C(  60),  INT8_C(  54),  INT8_C(  81),  INT8_C( 123),  INT8_C(  49) },
      { -INT8_C(   5), -INT8_C(   4), -INT8_C(  64),  INT8_C(  64), -INT8_C(  31),  INT8_C(  17), -INT8_C(  45), -INT8_C(  83),
         INT8_C(   5),  INT8_C(  71),  INT8_C(  11),  INT8_C(   1), -INT8_C(  40),  INT8_C(  54),  INT8_C( 126),  INT8_C( 123) } },
    { { -INT8_C(  84),  INT8_C(  59), -INT8_C(   2), -INT8_C( 115), -INT8_C(  46), -INT8_C(  47), -INT8_C(  19), -INT8_C(  40),
         INT8_C(  89), -INT8_C(   8),  INT8_C(  41),  INT8_C(  50),  INT8_C(  25), -INT8_C(  89),  INT8_C(   2),  INT8_C(  21) },
      { -INT8_C( 101),  INT8_C(  67), -INT8_C(  67), -INT8_C(  83), -INT8_C( 122),  INT8_C( 107),  INT8_C(  23), -INT8_C(  50),
        -INT8_C(   7),  INT8_C(  25),  INT8_C(  10),  INT8_C(  47),  INT8_C( 106), -INT8_C( 123),  INT8_C(  97),  INT8_C(  22) },
      { -INT8_C(  84), -INT8_C( 101), -INT8_C(   2), -INT8_C(  67), -INT8_C(  46), -INT8_C( 122), -INT8_C(  19),  INT8_C(  23),
         INT8_C(  89), -INT8_C(   7),  INT8_C(  41),  INT8_C(  10),  INT8_C(  25),  INT8_C( 106),  INT8_C(   2),  INT8_C(  97) } },
    { { -INT8_C(  64),  INT8_C(  95), -INT8_C(  93), -INT8_C( 110),  INT8_C(  49), -INT8_C( 111),  INT8_C( 106), -INT8_C( 118),
        -INT8_C( 119), -INT8_C( 109), -INT8_C(  68), -INT8_C(  93),  INT8_C(  59), -INT8_C(  65), -INT8_C(  72), -INT8_C(  42) },
      {  INT8_C(   2),  INT8_C( 118), -INT8_C( 125), -INT8_C( 120), -INT8_C(  31), -INT8_C( 101),  INT8_C(  86), -INT8_C(  38),
        -INT8_C(  76),  INT8_C(  96),  INT8_C(   9),  INT8_C(  30), -INT8_C(  27),  INT8_C( 106),  INT8_C(  52), -INT8_C(  91) },
      { -INT8_C(  64),  INT8_C(   2), -INT8_C(  93), -INT8_C( 125),  INT8_C(  49), -INT8_C(  31),  INT8_C( 106),  INT8_C(  86),
        -INT8_C( 119), -INT8_C(  76), -INT8_C(  68),  INT8_C(   9),  INT8_C(  59), -INT8_C(  27), -INT8_C(  72),  INT8_C(  52) } },
    { { -INT8_C(  54), -INT8_C(  41),  INT8_C(  56), -INT8_C(   5),  INT8_C( 104), -INT8_C(  94), -INT8_C( 123), -INT8_C(  14),
         INT8_C(  54),  INT8_C(  66), -INT8_C( 107),  INT8_C( 113),  INT8_C(   1),  INT8_C(  77),  INT8_C(  71),  INT8_C(   3) },
      { -INT8_C(  61), -INT8_C(  53), -INT8_C( 117), -INT8_C(  92),  INT8_C( 102), -INT8_C(  30),  INT8_C( 126),  INT8_C(  26),
         INT8_C(  66), -INT8_C( 120),  INT8_C(  56),  INT8_C(  40), -INT8_C(  14),  INT8_C( 108), -INT8_C(  51), -INT8_C(  68) },
      { -INT8_C(  54), -INT8_C(  61),  INT8_C(  56), -INT8_C( 117),  INT8_C( 104),  INT8_C( 102), -INT8_C( 123),  INT8_C( 126),
         INT8_C(  54),  INT8_C(  66), -INT8_C( 107),  INT8_C(  56),  INT8_C(   1), -INT8_C(  14),  INT8_C(  71), -INT8_C(  51) } },
    { {  INT8_C(  67),  INT8_C(   5), -INT8_C(  73), -INT8_C(  84), -INT8_C(  88),  INT8_C(  61), -INT8_C(  98), -INT8_C(  34),
             INT8_MAX,  INT8_C(  51),  INT8_C(  79),      INT8_MIN,      INT8_MIN, -INT8_C( 106), -INT8_C( 125),  INT8_C(  68) },
      {  INT8_C(  97),  INT8_C(  14), -INT8_C(  24), -INT8_C(  57), -INT8_C(  16),  INT8_C( 103), -INT8_C(  31),  INT8_C(  51),
        -INT8_C(  17),  INT8_C(  25),  INT8_C(  91), -INT8_C(  31), -INT8_C( 123),  INT8_C(  40), -INT8_C(  98), -INT8_C(  55) },
      {  INT8_C(  67),  INT8_C(  97), -INT8_C(  73), -INT8_C(  24), -INT8_C(  88), -INT8_C(  16), -INT8_C(  98), -INT8_C(  31),
             INT8_MAX, -INT8_C(  17),  INT8_C(  79),  INT8_C(  91),      INT8_MIN, -INT8_C( 123), -INT8_C( 125), -INT8_C(  98) } },
    { {  INT8_C(  46),  INT8_C(  85),  INT8_C( 117), -INT8_C(  42), -INT8_C( 110),  INT8_C(  19), -INT8_C(  76),  INT8_C(  17),
         INT8_C(  70),  INT8_C(   3), -INT8_C( 111), -INT8_C(  58), -INT8_C( 103),  INT8_C(  20),  INT8_C(  10), -INT8_C(   5) },
      {  INT8_C(  35), -INT8_C(  13), -INT8_C(  62),  INT8_C(  19),  INT8_C(  90), -INT8_C(  92),  INT8_C(  70),  INT8_C(  73),
        -INT8_C(  67), -INT8_C(  95),  INT8_C(  42),  INT8_C(  67), -INT8_C(  54), -INT8_C(  56),  INT8_C(  12), -INT8_C(   8) },
      {  INT8_C(  46),  INT8_C(  35),  INT8_C( 117), -INT8_C(  62), -INT8_C( 110),  INT8_C(  90), -INT8_C(  76),  INT8_C(  70),
         INT8_C(  70), -INT8_C(  67), -INT8_C( 111),  INT8_C(  42), -INT8_C( 103), -INT8_C(  54),  INT8_C(  10),  INT8_C(  12) } },
    { {  INT8_C(  30), -INT8_C( 127), -INT8_C(  50), -INT8_C(  80), -INT8_C( 108), -INT8_C( 126), -INT8_C(  62), -INT8_C(  38),
        -INT8_C( 123),  INT8_C(  83), -INT8_C(  96),  INT8_C(  30),  INT8_C( 104), -INT8_C(  85),  INT8_C(  25), -INT8_C( 117) },
      { -INT8_C(  98), -INT8_C(  36), -INT8_C(  98), -INT8_C(   8),      INT8_MIN, -INT8_C(  27),  INT8_C(  65),  INT8_C(  61),
        -INT8_C( 122),  INT8_C( 107),      INT8_MIN,  INT8_C(  80),  INT8_C(  52), -INT8_C( 116),  INT8_C(  72),  INT8_C(  82) },
      {  INT8_C(  30), -INT8_C(  98), -INT8_C(  50), -INT8_C(  98), -INT8_C( 108),      INT8_MIN, -INT8_C(  62),  INT8_C(  65),
        -INT8_C( 123), -INT8_C( 122), -INT8_C(  96),      INT8_MIN,  INT8_C( 104),  INT8_C(  52),  INT8_C(  25),  INT8_C(  72) } },
    { {  INT8_C(  13),  INT8_C(  22),  INT8_C(   2), -INT8_C(  95), -INT8_C( 104), -INT8_C(  60),  INT8_C( 123),  INT8_C(  29),
         INT8_C(  24),  INT8_C(  28),  INT8_C(  60),      INT8_MIN, -INT8_C(  57),  INT8_C(  85),  INT8_C(  11),  INT8_C( 101) },
      {  INT8_C(  49), -INT8_C(  87),  INT8_C(  93), -INT8_C(  79), -INT8_C( 114), -INT8_C(  98), -INT8_C(  17),  INT8_C(  21),
         INT8_C(   9),  INT8_C( 111),  INT8_C( 101),  INT8_C(  61), -INT8_C(   4), -INT8_C(  82), -INT8_C( 113),  INT8_C(   9) },
      {  INT8_C(  13),  INT8_C(  49),  INT8_C(   2),  INT8_C(  93), -INT8_C( 104), -INT8_C( 114),  INT8_C( 123), -INT8_C(  17),
         INT8_C(  24),  INT8_C(   9),  INT8_C(  60),  INT8_C( 101), -INT8_C(  57), -INT8_C(   4),  INT8_C(  11), -INT8_C( 113) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[8];
    int16_t b[8];
    int16_t r[8];
  } test_vec[] = {
    { {  INT16_C( 14817), -INT16_C( 15912),  INT16_C(  6827), -INT16_C( 16841), -INT16_C( 15885),  INT16_C(  6412),  INT16_C( 12676),  INT16_C( 26747) },
      {  INT16_C( 31336),  INT16_C( 23842),  INT16_C( 32211), -INT16_C( 23641),  INT16_C( 22041), -INT16_C( 28634), -INT16_C(  6631), -INT16_C(  1058) },
      {  INT16_C( 14817),  INT16_C( 31336),  INT16_C(  6827),  INT16_C( 32211), -INT16_C( 15885),  INT16_C( 22041),  INT16_C( 12676), -INT16_C(  6631) } },
    { { -INT16_C( 18913), -INT16_C( 13636), -INT16_C(  3119), -INT16_C( 15224), -INT16_C( 27468),  INT16_C( 14558),  INT16_C( 22981),  INT16_C( 11680) },
      { -INT16_C( 15405), -INT16_C( 22902),  INT16_C( 12864),  INT16_C( 22857),  INT16_C( 28552), -INT16_C( 24086), -INT16_C( 14251),  INT16_C( 29852) },
      { -INT16_C( 18913), -INT16_C( 15405), -INT16_C(  3119),  INT16_C( 12864), -INT16_C( 27468),  INT16_C( 28552),  INT16_C( 22981), -INT16_C( 14251) } },
    { {  INT16_C( 22655),  INT16_C( 20543), -INT16_C( 14517),  INT16_C(    20), -INT16_C(  3492),  INT16_C(  8504), -INT16_C(  9908),  INT16_C(  8015) },
      { -INT16_C(  9828), -INT16_C(  9018),  INT16_C(  3851), -INT16_C( 27850),  INT16_C(  8319), -INT16_C( 11211), -INT16_C( 11800),  INT16_C( 26441) },
      {  INT16_C( 22655), -INT16_C(  9828), -INT16_C( 14517),  INT16_C(  3851), -INT16_C(  3492),  INT16_C(  8319), -INT16_C(  9908), -INT16_C( 11800) } },
    { { -INT16_C( 30678),  INT16_C( 30135), -INT16_C( 13233), -INT16_C( 21643), -INT16_C( 20802),  INT16_C(  2765),  INT16_C(  7303),  INT16_C(  9002) },
      { -INT16_C(  3851),  INT16_C(   511),  INT16_C( 13823),  INT16_C( 32404), -INT16_C( 13995),  INT16_C( 15955), -INT16_C( 25445), -INT16_C( 14939) },
      { -INT16_C( 30678), -INT16_C(  3851), -INT16_C( 13233),  INT16_C( 13823), -INT16_C( 20802), -INT16_C( 13995),  INT16_C(  7303), -INT16_C( 25445) } },
    { {  INT16_C( 23844),  INT16_C( 29498), -INT16_C( 20439), -INT16_C(  6369), -INT16_C(  5026), -INT16_C(  6670),  INT16_C(  7176), -INT16_C(   760) },
      {  INT16_C(  1804),  INT16_C(  3070), -INT16_C( 27843), -INT16_C( 28022), -INT16_C(  8868), -INT16_C(  2096),  INT16_C( 30329), -INT16_C( 25156) },
      {  INT16_C( 23844),  INT16_C(  1804), -INT16_C( 20439), -INT16_C( 27843), -INT16_C(  5026), -INT16_C(  8868),  INT16_C(  7176),  INT16_C( 30329) } },
    { { -INT16_C(  2093), -INT16_C(  1008),  INT16_C( 12199),  INT16_C(  1507), -INT16_C( 10981),  INT16_C(  9194), -INT16_C(  3343), -INT16_C(   735) },
      {  INT16_C(  8185),  INT16_C( 13833), -INT16_C( 27726),  INT16_C(  4041), -INT16_C( 26256), -INT16_C(  5882), -INT16_C( 15601), -INT16_C(  7546) },
      { -INT16_C(  2093),  INT16_C(  8185),  INT16_C( 12199), -INT16_C( 27726), -INT16_C( 10981), -INT16_C( 26256), -INT16_C(  3343), -INT16_C( 15601) } },
    { { -INT16_C( 26950),  INT16_C( 25054), -INT16_C( 15674), -INT16_C(  7834),  INT16_C( 20631), -INT16_C( 30459),  INT16_C(  9794),  INT16_C( 15238) },
      { -INT16_C( 28859), -INT16_C(  1934),  INT16_C( 15138), -INT16_C( 28153),  INT16_C(  3540), -INT16_C(  7045),  INT16_C(   464), -INT16_C( 30010) },
      { -INT16_C( 26950), -INT16_C( 28859), -INT16_C( 15674),  INT16_C( 15138),  INT16_C( 20631),  INT16_C(  3540),  INT16_C(  9794),  INT16_C(   464) } },
    { { -INT16_C( 23144),  INT16_C( 24299),  INT16_C( 20839), -INT16_C(   449),  INT16_C( 17569), -INT16_C(  7289),  INT16_C(  3690), -INT16_C( 20449) },
      { -INT16_C( 28259), -INT16_C( 16216), -INT16_C( 20532), -INT16_C( 24494), -INT16_C( 12612), -INT16_C( 29308),  INT16_C( 19407),  INT16_C( 26391) },
      { -INT16_C( 23144), -INT16_C( 28259),  INT16_C( 20839), -INT16_C( 20532),  INT16_C( 17569), -INT16_C( 12612),  INT16_C(  3690),  INT16_C( 19407) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[4];
    int32_t b[4];
    int32_t r[4];
  } test_vec[] = {
    { { -INT32_C(  1341418916),  INT32_C(   777003733), -INT32_C(  1026009579),  INT32_C(  1018759377) },
      { -INT32_C(   587710840), -INT32_C(  1130803257),  INT32_C(   296467978),  INT32_C(   730158286) },
      { -INT32_C(  1341418916), -INT32_C(   587710840), -INT32_C(  1026009579),  INT32_C(   296467978) } },
    { { -INT32_C(  1126461209), -INT32_C(   924111949),  INT32_C(  1401668482),  INT32_C(  1418675403) },
      {  INT32_C(  1227917186), -INT32_C(   536426026),  INT32_C(  1441902983), -INT32_C(   310348026) },
      { -INT32_C(  1126461209),  INT32_C(  1227917186),  INT32_C(  1401668482),  INT32_C(  1441902983) } },
    { { -INT32_C(  1163306233),  INT32_C(   159618183),  INT32_C(   593235544), -INT32_C(   730338478) },
      {  INT32_C(  1209968498), -INT32_C(   148364176), -INT32_C(   615704107), -INT32_C(  1731670640) },
      { -INT32_C(  1163306233),  INT32_C(  1209968498),  INT32_C(   593235544), -INT32_C(   615704107) } },
    { { -INT32_C(  1336774103),  INT32_C(  1589236998),  INT32_C(   897717731),  INT32_C(  1913321728) },
      {  INT32_C(   297412769),  INT32_C(   554295884), -INT32_C(  1929554181),  INT32_C(  1277478179) },
      { -INT32_C(  1336774103),  INT32_C(   297412769),  INT32_C(   897717731), -INT32_C(  1929554181) } },
    { {  INT32_C(  1056732727),  INT32_C(   798799180), -INT32_C(   899342646), -INT32_C(  1187221736) },
      { -INT32_C(   473237865), -INT32_C(   737881128),  INT32_C(  1298137385), -INT32_C(    23493433) },
      {  INT32_C(  1056732727), -INT32_C(   473237865), -INT32_C(   899342646),  INT32_C(  1298137385) } },
    { {  INT32_C(  1178375930),  INT32_C(   376887627),  INT32_C(   266394615), -INT32_C(   506978998) },
      { -INT32_C(   322661613), -INT32_C(  1866413978), -INT32_C(  1847779126), -INT32_C(  1634765148) },
      {  INT32_C(  1178375930), -INT32_C(   322661613),  INT32_C(   266394615), -INT32_C(  1847779126) } },
    { {  INT32_C(  1491454988), -INT32_C(  1670489179), -INT32_C(  2136191434),  INT32_C(  2137093227) },
      {  INT32_C(  1852515591), -INT32_C(  1208079379), -INT32_C(   280437941),  INT32_C(  1586354257) },
      {  INT32_C(  1491454988),  INT32_C(  1852515591), -INT32_C(  2136191434), -INT32_C(   280437941) } },
    { {  INT32_C(  1236693668),  INT32_C(    65348813), -INT32_C(   561802894),  INT32_C(   224257030) },
      { -INT32_C(   142882807),  INT32_C(  1051621875), -INT32_C(  1506937004),  INT32_C(  1929689807) },
      {  INT32_C(  1236693668), -INT32_C(   142882807), -INT32_C(   561802894), -INT32_C(  1506937004) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int64_t a[2];
    int64_t b[2];
    int64_t r[2];
  } test_vec[] = {
    { {  INT64_C( 2370942768217045703),  INT64_C( 3834060604335488599) },
      {  INT64_C( 5962793575161641133),  INT64_C( 2451362664542500656) },
      {  INT64_C( 2370942768217045703),  INT64_C( 5962793575161641133) } },
    { { -INT64_C(   91528125595492425),  INT64_C( 8454808771016685138) },
      {  INT64_C( 1997428809620116027),  INT64_C( 2503757759122402625) },
      { -INT64_C(   91528125595492425),  INT64_C( 1997428809620116027) } },
    { { -INT64_C( 3375599107157742718),  INT64_C( 3758894877307401709) },
      {  INT64_C( 4548726874596619289), -INT64_C( 2068388762230178113) },
      { -INT64_C( 3375599107157742718),  INT64_C( 4548726874596619289) } },
    { {  INT64_C( 7752440428129683270), -INT64_C( 1741121954605135960) },
      { -INT64_C( 9134413012119359234), -INT64_C(  464162460032952246) },
      {  INT64_C( 7752440428129683270), -INT64_C( 9134413012119359234) } },
    { {  INT64_C( 8495572088113830653),  INT64_C( 5733906210614609629) },
      { -INT64_C( 3197405612916048547),  INT64_C( 4488976398999767712) },
      {  INT64_C( 8495572088113830653), -INT64_C( 3197405612916048547) } },
    { {  INT64_C( 4533049365362183078),  INT64_C( 5280325345817001894) },
      { -INT64_C( 4948321176345078792), -INT64_C( 8876213478574075309) },
      {  INT64_C( 4533049365362183078), -INT64_C( 4948321176345078792) } },
    { { -INT64_C( 3385053066255955098),  INT64_C( 6995515642783330015) },
      { -INT64_C( 2776126643429474653),  INT64_C( 5146839089142400778) },
      { -INT64_C( 3385053066255955098), -INT64_C( 2776126643429474653) } },
    { {  INT64_C( 2649826617627403465),  INT64_C( 4813228284004306689) },
      { -INT64_C( 1088892655976271997),  INT64_C( 6352686333166178304) },
      {  INT64_C( 2649826617627403465), -INT64_C( 1088892655976271997) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C( 32), UINT8_C(105), UINT8_C( 60), UINT8_C( 17), UINT8_C(121), UINT8_C(145), UINT8_C( 45), UINT8_C(135),
        UINT8_C(225), UINT8_C( 38), UINT8_C(228), UINT8_C( 88), UINT8_C(200), UINT8_C(213), UINT8_C(147), UINT8_C(151) },
      { UINT8_C(177), UINT8_C(122), UINT8_C(147), UINT8_C( 63), UINT8_C(245), UINT8_C(244), UINT8_C(140), UINT8_C(165),
        UINT8_C(180), UINT8_C( 76), UINT8_C( 77), UINT8_C(249), UINT8_C( 12), UINT8_C( 91), UINT8_C( 53), UINT8_C( 45) },
      { UINT8_C( 32), UINT8_C(177), UINT8_C( 60), UINT8_C(147), UINT8_C(121), UINT8_C(245), UINT8_C( 45), UINT8_C(140),
        UINT8_C(225), UINT8_C(180), UINT8_C(228), UINT8_C( 77), UINT8_C(200), UINT8_C( 12), UINT8_C(147), UINT8_C( 53) } },
    { { UINT8_C(196), UINT8_C(113), UINT8_C( 62), UINT8_C( 61), UINT8_C(  2), UINT8_C(108), UINT8_C(196), UINT8_C(228),
        UINT8_C(146), UINT8_C(168), UINT8_C( 60), UINT8_C( 90), UINT8_C(126), UINT8_C(207), UINT8_C(241), UINT8_C( 47) },
      { UINT8_C( 73), UINT8_C(133), UINT8_C(110), UINT8_C( 62), UINT8_C(121), UINT8_C(251), UINT8_C(227), UINT8_C( 45),
        UINT8_C( 71), UINT8_C( 49), UINT8_C( 38), UINT8_C( 83), UINT8_C(140), UINT8_C( 91), UINT8_C(128), UINT8_C( 80) },
      { UINT8_C(196), UINT8_C( 73), UINT8_C( 62), UINT8_C(110), UINT8_C(  2), UINT8_C(121), UINT8_C(196), UINT8_C(227),
        UINT8_C(146), UINT8_C( 71), UINT8_C( 60), UINT8_C( 38), UINT8_C(126), UINT8_C(140), UINT8_C(241), UINT8_C(128) } },
    { { UINT8_C(204), UINT8_C(191), UINT8_C(141), UINT8_C(206), UINT8_C( 43), UINT8_C( 81), UINT8_C(178), UINT8_C(189),
        UINT8_C(250), UINT8_C(238), UINT8_C( 23), UINT8_C(120), UINT8_C(189), UINT8_C(  9), UINT8_C(167), UINT8_C(  7) },
      { UINT8_C(142), UINT8_C( 21), UINT8_C( 69), UINT8_C(  7), UINT8_C( 16), UINT8_C( 41), UINT8_C( 52), UINT8_C( 87),
        UINT8_C( 90), UINT8_C( 90), UINT8_C(171), UINT8_C(230), UINT8_C(181), UINT8_C( 43), UINT8_C( 54), UINT8_C(129) },
      { UINT8_C(204), UINT8_C(142), UINT8_C(141), UINT8_C( 69), UINT8_C( 43), UINT8_C( 16), UINT8_C(178), UINT8_C( 52),
        UINT8_C(250), UINT8_C( 90), UINT8_C( 23), UINT8_C(171), UINT8_C(189), UINT8_C(181), UINT8_C(167), UINT8_C( 54) } },
    { { UINT8_C(234), UINT8_C(195), UINT8_C( 79), UINT8_C( 21), UINT8_C( 20), UINT8_C(  2), UINT8_C(210), UINT8_C( 14),
        UINT8_C(240), UINT8_C(234), UINT8_C(134), UINT8_C(174), UINT8_C(243), UINT8_C( 45), UINT8_C(181), UINT8_C(129) },
      { UINT8_C( 67), UINT8_C(250), UINT8_C(136), UINT8_C( 83), UINT8_C( 35), UINT8_C(188), UINT8_C(171), UINT8_C(125),
        UINT8_C( 22), UINT8_C( 86), UINT8_C( 99), UINT8_C(203), UINT8_C(129), UINT8_C(153), UINT8_C( 76), UINT8_C(108) },
      { UINT8_C(234), UINT8_C( 67), UINT8_C( 79), UINT8_C(136), UINT8_C( 20), UINT8_C( 35), UINT8_C(210), UINT8_C(171),
        UINT8_C(240), UINT8_C( 22), UINT8_C(134), UINT8_C( 99), UINT8_C(243), UINT8_C(129), UINT8_C(181), UINT8_C( 76) } },
    { { UINT8_C( 92), UINT8_C(155), UINT8_C(129), UINT8_C(113), UINT8_C(157), UINT8_C( 84), UINT8_C(127), UINT8_C(142),
        UINT8_C( 62), UINT8_C(  6), UINT8_C( 60), UINT8_C( 49), UINT8_C( 51), UINT8_C(241), UINT8_C(178), UINT8_C(118) },
      { UINT8_C(235), UINT8_C( 58), UINT8_C(202), UINT8_C( 15), UINT8_C(246), UINT8_C(117), UINT8_C(140), UINT8_C( 12),
        UINT8_C(203), UINT8_C(240), UINT8_C(215), UINT8_C( 76), UINT8_C(137), UINT8_C( 35), UINT8_C(184), UINT8_C(230) },
      { UINT8_C( 92), UINT8_C(235), UINT8_C(129), UINT8_C(202), UINT8_C(157), UINT8_C(246), UINT8_C(127), UINT8_C(140),
        UINT8_C( 62), UINT8_C(203), UINT8_C( 60), UINT8_C(215), UINT8_C( 51), UINT8_C(137), UINT8_C(178), UINT8_C(184) } },
    { { UINT8_C(190), UINT8_C( 58), UINT8_C( 87), UINT8_C( 92), UINT8_C(142), UINT8_C(214), UINT8_C(234), UINT8_C(204),
        UINT8_C(220), UINT8_C( 38), UINT8_C(253), UINT8_C( 16), UINT8_C( 23), UINT8_C(175), UINT8_C(134), UINT8_C(  2) },
      { UINT8_C(233), UINT8_C( 80), UINT8_C( 17), UINT8_C(223), UINT8_C(197), UINT8_C(158), UINT8_C(235), UINT8_C(144),
        UINT8_C(142), UINT8_C(194), UINT8_C(221), UINT8_C( 23), UINT8_C(229), UINT8_C(149), UINT8_C(253), UINT8_C(163) },
      { UINT8_C(190), UINT8_C(233), UINT8_C( 87), UINT8_C( 17), UINT8_C(142), UINT8_C(197), UINT8_C(234), UINT8_C(235),
        UINT8_C(220), UINT8_C(142), UINT8_C(253), UINT8_C(221), UINT8_C( 23), UINT8_C(229), UINT8_C(134), UINT8_C(253) } },
    { { UINT8_C(207), UINT8_C( 84),    UINT8_MAX, UINT8_C( 93), UINT8_C( 43), UINT8_C(233), UINT8_C( 41), UINT8_C(  7),
        UINT8_C( 15), UINT8_C( 38), UINT8_C( 23), UINT8_C( 38), UINT8_C(213), UINT8_C(158), UINT8_C( 41), UINT8_C(190) },
      { UINT8_C(238), UINT8_C( 58), UINT8_C(157), UINT8_C(180), UINT8_C(216), UINT8_C(136), UINT8_C( 68), UINT8_C(102),
        UINT8_C( 74), UINT8_C( 33), UINT8_C(126), UINT8_C( 47), UINT8_C(183), UINT8_C(123), UINT8_C(211), UINT8_C(134) },
      { UINT8_C(207), UINT8_C(238),    UINT8_MAX, UINT8_C(157), UINT8_C( 43), UINT8_C(216), UINT8_C( 41), UINT8_C( 68),
        UINT8_C( 15), UINT8_C( 74), UINT8_C( 23), UINT8_C(126), UINT8_C(213), UINT8_C(183), UINT8_C( 41), UINT8_C(211) } },
    { { UINT8_C(208), UINT8_C(210), UINT8_C(228), UINT8_C(251), UINT8_C(188), UINT8_C( 13), UINT8_C(  2), UINT8_C(203),
        UINT8_C( 52), UINT8_C( 26), UINT8_C(242), UINT8_C(  9), UINT8_C(184), UINT8_C( 27), UINT8_C(200), UINT8_C(166) },
      { UINT8_C( 85), UINT8_C(101), UINT8_C( 90), UINT8_C( 46), UINT8_C(238), UINT8_C(159), UINT8_C(148), UINT8_C( 56),
        UINT8_C(192), UINT8_C( 18), UINT8_C(104), UINT8_C(119), UINT8_C(142), UINT8_C( 59), UINT8_C(254), UINT8_C( 94) },
      { UINT8_C(208), UINT8_C( 85), UINT8_C(228), UINT8_C( 90), UINT8_C(188), UINT8_C(238), UINT8_C(  2), UINT8_C(148),
        UINT8_C( 52), UINT8_C(192), UINT8_C(242), UINT8_C(104), UINT8_C(184), UINT8_C(142), UINT8_C(200), UINT8_C(254) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t r[8];
  } test_vec[] = {
    { { UINT16_C(14167), UINT16_C(21279), UINT16_C(48551), UINT16_C(14943), UINT16_C(56959), UINT16_C( 3699), UINT16_C(63440), UINT16_C(55030) },
      { UINT16_C(40429), UINT16_C(42656), UINT16_C(10703), UINT16_C(50757), UINT16_C(39485), UINT16_C(24810), UINT16_C(45053), UINT16_C(22004) },
      { UINT16_C(14167), UINT16_C(40429), UINT16_C(48551), UINT16_C(10703), UINT16_C(56959), UINT16_C(39485), UINT16_C(63440), UINT16_C(45053) } },
    { { UINT16_C( 5094), UINT16_C(36264), UINT16_C( 2001), UINT16_C(20680), UINT16_C(15333), UINT16_C(46430), UINT16_C(21555), UINT16_C( 8331) },
      { UINT16_C(11505), UINT16_C(49351), UINT16_C( 3157), UINT16_C(37510), UINT16_C(28839), UINT16_C(42226), UINT16_C(59167), UINT16_C( 1785) },
      { UINT16_C( 5094), UINT16_C(11505), UINT16_C( 2001), UINT16_C( 3157), UINT16_C(15333), UINT16_C(28839), UINT16_C(21555), UINT16_C(59167) } },
    { { UINT16_C(41466), UINT16_C(52115), UINT16_C(23464), UINT16_C(36124), UINT16_C(31383), UINT16_C(51778), UINT16_C(52943), UINT16_C(49386) },
      { UINT16_C(45562), UINT16_C(20353), UINT16_C( 1982), UINT16_C(26082), UINT16_C(54392), UINT16_C(38665), UINT16_C(  955), UINT16_C(46749) },
      { UINT16_C(41466), UINT16_C(45562), UINT16_C(23464), UINT16_C( 1982), UINT16_C(31383), UINT16_C(54392), UINT16_C(52943), UINT16_C(  955) } },
    { { UINT16_C(12708), UINT16_C(19841), UINT16_C(40332), UINT16_C( 9178), UINT16_C( 7448), UINT16_C(59373), UINT16_C(55531), UINT16_C(58791) },
      { UINT16_C(10377), UINT16_C(18228), UINT16_C( 5680), UINT16_C(43180), UINT16_C(46827), UINT16_C(42559), UINT16_C(56761), UINT16_C(23900) },
      { UINT16_C(12708), UINT16_C(10377), UINT16_C(40332), UINT16_C( 5680), UINT16_C( 7448), UINT16_C(46827), UINT16_C(55531), UINT16_C(56761) } },
    { { UINT16_C(56846), UINT16_C(39594), UINT16_C(34171), UINT16_C(37822), UINT16_C(43938), UINT16_C(36218), UINT16_C( 8835), UINT16_C( 3442) },
      { UINT16_C(42570), UINT16_C(31316), UINT16_C(  445), UINT16_C(43042), UINT16_C(25271), UINT16_C(28750), UINT16_C(43839), UINT16_C(19917) },
      { UINT16_C(56846), UINT16_C(42570), UINT16_C(34171), UINT16_C(  445), UINT16_C(43938), UINT16_C(25271), UINT16_C( 8835), UINT16_C(43839) } },
    { { UINT16_C(30857), UINT16_C( 1255), UINT16_C(42493), UINT16_C(40856), UINT16_C( 4689), UINT16_C(54316), UINT16_C(40500), UINT16_C(32737) },
      { UINT16_C(13892), UINT16_C(  505), UINT16_C( 7223), UINT16_C(61097), UINT16_C(63614), UINT16_C(48478), UINT16_C(11171), UINT16_C(11274) },
      { UINT16_C(30857), UINT16_C(13892), UINT16_C(42493), UINT16_C( 7223), UINT16_C( 4689), UINT16_C(63614), UINT16_C(40500), UINT16_C(11171) } },
    { { UINT16_C(61859), UINT16_C(41008), UINT16_C(51351), UINT16_C(59455), UINT16_C(27611), UINT16_C( 4028), UINT16_C(40457), UINT16_C(20110) },
      { UINT16_C(35028), UINT16_C( 2895), UINT16_C(63908), UINT16_C( 8953), UINT16_C(22513), UINT16_C(38111), UINT16_C(59778), UINT16_C( 9920) },
      { UINT16_C(61859), UINT16_C(35028), UINT16_C(51351), UINT16_C(63908), UINT16_C(27611), UINT16_C(22513), UINT16_C(40457), UINT16_C(59778) } },
    { { UINT16_C(61658), UINT16_C(29126), UINT16_C( 1721), UINT16_C(37977), UINT16_C( 5745), UINT16_C(31651), UINT16_C(12980), UINT16_C(35017) },
      { UINT16_C( 6330), UINT16_C(24211), UINT16_C(35857), UINT16_C(  640), UINT16_C(24547), UINT16_C(26006), UINT16_C(22088), UINT16_C( 8843) },
      { UINT16_C(61658), UINT16_C( 6330), UINT16_C( 1721), UINT16_C(35857), UINT16_C( 5745), UINT16_C(24547), UINT16_C(12980), UINT16_C(22088) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t r[4];
  } test_vec[] = {
    { { UINT32_C( 497895404), UINT32_C(1842434419), UINT32_C(2057525496), UINT32_C(2082404662) },
      { UINT32_C( 744362374), UINT32_C(1722726623), UINT32_C(2688313178), UINT32_C(3645033197) },
      { UINT32_C( 497895404), UINT32_C( 744362374), UINT32_C(2057525496), UINT32_C(2688313178) } },
    { { UINT32_C(2230775569), UINT32_C( 955369280), UINT32_C(1454544160), UINT32_C( 366203278) },
      { UINT32_C(3242275298), UINT32_C(1143468009), UINT32_C(1155818583), UINT32_C(1058874926) },
      { UINT32_C(2230775569), UINT32_C(3242275298), UINT32_C(1454544160), UINT32_C(1155818583) } },
    { { UINT32_C(1438848021), UINT32_C(4220433883), UINT32_C(3629269066), UINT32_C(4092405009) },
      { UINT32_C(1068772950), UINT32_C(1971575838), UINT32_C(1857644608), UINT32_C(2762856078) },
      { UINT32_C(1438848021), UINT32_C(1068772950), UINT32_C(3629269066), UINT32_C(1857644608) } },
    { { UINT32_C(3338236138), UINT32_C(1874954021), UINT32_C(3645379528), UINT32_C(2395813176) },
      { UINT32_C(2194571620), UINT32_C(2650231133), UINT32_C(1208725689), UINT32_C(1911339142) },
      { UINT32_C(3338236138), UINT32_C(2194571620), UINT32_C(3645379528), UINT32_C(1208725689) } },
    { { UINT32_C(1312285993), UINT32_C( 901707885), UINT32_C(1141769740), UINT32_C(2681461563) },
      { UINT32_C(3122766173), UINT32_C(2891454706), UINT32_C(1341416392), UINT32_C(1170268188) },
      { UINT32_C(1312285993), UINT32_C(3122766173), UINT32_C(1141769740), UINT32_C(1341416392) } },
    { { UINT32_C( 848558021), UINT32_C(4217852399), UINT32_C(2470475351), UINT32_C(2922517329) },
      { UINT32_C(2791920820), UINT32_C( 894615916), UINT32_C(1082410532), UINT32_C(3968156710) },
      { UINT32_C( 848558021), UINT32_C(2791920820), UINT32_C(2470475351), UINT32_C(1082410532) } },
    { { UINT32_C( 706615611), UINT32_C(3257304682), UINT32_C(1297442556), UINT32_C( 771524473) },
      { UINT32_C(1221813723), UINT32_C(1249715750), UINT32_C(2475360620), UINT32_C(2155810885) },
      { UINT32_C( 706615611), UINT32_C(1221813723), UINT32_C(1297442556), UINT32_C(2475360620) } },
    { { UINT32_C(2494209321), UINT32_C( 525783075), UINT32_C(2943200054), UINT32_C( 249325874) },
      { UINT32_C(4099322062), UINT32_C(1111413718), UINT32_C( 433441236), UINT32_C(  60380378) },
      { UINT32_C(2494209321), UINT32_C(4099322062), UINT32_C(2943200054), UINT32_C( 433441236) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint64_t a[2];
    uint64_t b[2];
    uint64_t r[2];
  } test_vec[] = {
    { { UINT64_C( 4815427970974768462), UINT64_C( 6946629186605919678) },
      { UINT64_C(17577554379567712573), UINT64_C( 9507926976227586244) },
      { UINT64_C( 4815427970974768462), UINT64_C(17577554379567712573) } },
    { { UINT64_C(17783107680982229326), UINT64_C( 7694430944701500407) },
      { UINT64_C(14946435657532704485), UINT64_C( 1392019949421056920) },
      { UINT64_C(17783107680982229326), UINT64_C(14946435657532704485) } },
    { { UINT64_C(  720685969029384403), UINT64_C(13170277731653498159) },
      { UINT64_C( 4546836441613680191), UINT64_C(15944534928651032686) },
      { UINT64_C(  720685969029384403), UINT64_C( 4546836441613680191) } },
    { { UINT64_C( 8377513640867717158), UINT64_C( 3252891876890621085) },
      { UINT64_C( 6754432899425457110), UINT64_C( 5553173804405016872) },
      { UINT64_C( 8377513640867717158), UINT64_C( 6754432899425457110) } },
    { { UINT64_C( 9111002919100414135), UINT64_C(12652601303620206972) },
      { UINT64_C(14317480457102167653), UINT64_C(14926910591795282610) },
      { UINT64_C( 9111002919100414135), UINT64_C(14317480457102167653) } },
    { { UINT64_C(17465588781926821122), UINT64_C(14197020995446656893) },
      { UINT64_C(14728401471583891713), UINT64_C( 7779348683327627021) },
      { UINT64_C(17465588781926821122), UINT64_C(14728401471583891713) } },
    { { UINT64_C( 8854554042291961977), UINT64_C( 3541753660244507904) },
      { UINT64_C( 1724092549986008839), UINT64_C(15666108166636934036) },
      { UINT64_C( 8854554042291961977), UINT64_C( 1724092549986008839) } },
    { { UINT64_C( 7595788518996621554), UINT64_C( 1677572234304633318) },
      { UINT64_C(16235800240466695983), UINT64_C(12894166098514972345) },
      { UINT64_C( 7595788518996621554), UINT64_C(16235800240466695983) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1_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(180), SIMDE_POLY8_C(234), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(184), SIMDE_POLY8_C(112), SIMDE_POLY8_C( 40), SIMDE_POLY8_C(124), SIMDE_POLY8_C( 20) },
      { SIMDE_POLY8_C( 30), SIMDE_POLY8_C(250), SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 78), SIMDE_POLY8_C(166), SIMDE_POLY8_C(229), SIMDE_POLY8_C(128), SIMDE_POLY8_C(117) },
      { SIMDE_POLY8_C(180), SIMDE_POLY8_C( 30), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 91), SIMDE_POLY8_C(112), SIMDE_POLY8_C(166), SIMDE_POLY8_C(124), SIMDE_POLY8_C(128) } },
    { { SIMDE_POLY8_C( 51), SIMDE_POLY8_C(233), SIMDE_POLY8_C(232), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(182), SIMDE_POLY8_C(252) },
      { SIMDE_POLY8_C( 75), SIMDE_POLY8_C( 64), SIMDE_POLY8_C(212), SIMDE_POLY8_C(237), SIMDE_POLY8_C( 88), SIMDE_POLY8_C( 50), SIMDE_POLY8_C( 94), SIMDE_POLY8_C( 12) },
      { SIMDE_POLY8_C( 51), SIMDE_POLY8_C( 75), SIMDE_POLY8_C(232), SIMDE_POLY8_C(212), SIMDE_POLY8_C(220), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(182), SIMDE_POLY8_C( 94) } },
    { { SIMDE_POLY8_C( 28), SIMDE_POLY8_C(133), SIMDE_POLY8_C(196), SIMDE_POLY8_C(140), SIMDE_POLY8_C(173), SIMDE_POLY8_C( 64), SIMDE_POLY8_C(161), SIMDE_POLY8_C(204) },
      { SIMDE_POLY8_C( 59), SIMDE_POLY8_C(252), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(225), SIMDE_POLY8_C(225), SIMDE_POLY8_C(154), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 21) },
      { SIMDE_POLY8_C( 28), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(196), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(173), SIMDE_POLY8_C(225), SIMDE_POLY8_C(161), SIMDE_POLY8_C( 86) } },
    { { SIMDE_POLY8_C(132), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 81), SIMDE_POLY8_C( 96), SIMDE_POLY8_C( 89), SIMDE_POLY8_C(  7), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(164) },
      { SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 49), SIMDE_POLY8_C(145), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(240), SIMDE_POLY8_C(171), SIMDE_POLY8_C(127) },
      { SIMDE_POLY8_C(132), SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 81), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 89), SIMDE_POLY8_C( 99), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(171) } },
    { { SIMDE_POLY8_C(117), SIMDE_POLY8_C(111), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(176), SIMDE_POLY8_C(173), SIMDE_POLY8_C(238), SIMDE_POLY8_C(235) },
      { SIMDE_POLY8_C(169), SIMDE_POLY8_C(  9), SIMDE_POLY8_C(204), SIMDE_POLY8_C(138), SIMDE_POLY8_C(163), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(159), SIMDE_POLY8_C( 39) },
      { SIMDE_POLY8_C(117), SIMDE_POLY8_C(169), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(204), SIMDE_POLY8_C(176), SIMDE_POLY8_C(163), SIMDE_POLY8_C(238), SIMDE_POLY8_C(159) } },
    { { SIMDE_POLY8_C( 97), SIMDE_POLY8_C(240), SIMDE_POLY8_C(136), SIMDE_POLY8_C(186), SIMDE_POLY8_C(247), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 95), SIMDE_POLY8_C( 62) },
      { SIMDE_POLY8_C( 21), SIMDE_POLY8_C(240), SIMDE_POLY8_C(221), SIMDE_POLY8_C(120), SIMDE_POLY8_C(224), SIMDE_POLY8_C(136), SIMDE_POLY8_C(248), SIMDE_POLY8_C( 85) },
      { SIMDE_POLY8_C( 97), SIMDE_POLY8_C( 21), SIMDE_POLY8_C(136), SIMDE_POLY8_C(221), SIMDE_POLY8_C(247), SIMDE_POLY8_C(224), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(248) } },
    { { SIMDE_POLY8_C(248), SIMDE_POLY8_C(  4), SIMDE_POLY8_C(120), SIMDE_POLY8_C(168), SIMDE_POLY8_C(177), SIMDE_POLY8_C(102), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 90) },
      { SIMDE_POLY8_C(111), SIMDE_POLY8_C( 95), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 19), SIMDE_POLY8_C(129), SIMDE_POLY8_C(132), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(226) },
      { SIMDE_POLY8_C(248), SIMDE_POLY8_C(111), SIMDE_POLY8_C(120), SIMDE_POLY8_C(228), SIMDE_POLY8_C(177), SIMDE_POLY8_C(129), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 58) } },
    { { SIMDE_POLY8_C(116), SIMDE_POLY8_C(194), SIMDE_POLY8_C(157), SIMDE_POLY8_C(108), SIMDE_POLY8_C(167), SIMDE_POLY8_C(252), SIMDE_POLY8_C(170), SIMDE_POLY8_C(188) },
      { SIMDE_POLY8_C(236), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(205), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 45), SIMDE_POLY8_C( 34), SIMDE_POLY8_C(  8) },
      { SIMDE_POLY8_C(116), SIMDE_POLY8_C(236), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 53), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(170), SIMDE_POLY8_C( 34) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1_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(60788), SIMDE_POLY16_C(40466), SIMDE_POLY16_C(30557), SIMDE_POLY16_C(47308) },
      { SIMDE_POLY16_C(27512), SIMDE_POLY16_C( 3061), SIMDE_POLY16_C(41915), SIMDE_POLY16_C(15633) },
      { SIMDE_POLY16_C(60788), SIMDE_POLY16_C(27512), SIMDE_POLY16_C(30557), SIMDE_POLY16_C(41915) } },
    { { SIMDE_POLY16_C(31826), SIMDE_POLY16_C(40911), SIMDE_POLY16_C(11794), SIMDE_POLY16_C( 5983) },
      { SIMDE_POLY16_C(15515), SIMDE_POLY16_C(15720), SIMDE_POLY16_C(44460), SIMDE_POLY16_C( 8198) },
      { SIMDE_POLY16_C(31826), SIMDE_POLY16_C(15515), SIMDE_POLY16_C(11794), SIMDE_POLY16_C(44460) } },
    { { SIMDE_POLY16_C( 6298), SIMDE_POLY16_C(63678), SIMDE_POLY16_C(35471), SIMDE_POLY16_C( 1968) },
      { SIMDE_POLY16_C(42485), SIMDE_POLY16_C(45331), SIMDE_POLY16_C( 9289), SIMDE_POLY16_C(39918) },
      { SIMDE_POLY16_C( 6298), SIMDE_POLY16_C(42485), SIMDE_POLY16_C(35471), SIMDE_POLY16_C( 9289) } },
    { { SIMDE_POLY16_C(48544), SIMDE_POLY16_C(45627), SIMDE_POLY16_C(39659), SIMDE_POLY16_C(34762) },
      { SIMDE_POLY16_C(13015), SIMDE_POLY16_C(33732), SIMDE_POLY16_C(51936), SIMDE_POLY16_C(31395) },
      { SIMDE_POLY16_C(48544), SIMDE_POLY16_C(13015), SIMDE_POLY16_C(39659), SIMDE_POLY16_C(51936) } },
    { { SIMDE_POLY16_C(25058), SIMDE_POLY16_C(29298), SIMDE_POLY16_C( 8940), SIMDE_POLY16_C(57721) },
      { SIMDE_POLY16_C(36040), SIMDE_POLY16_C( 4498), SIMDE_POLY16_C(32944), SIMDE_POLY16_C(20908) },
      { SIMDE_POLY16_C(25058), SIMDE_POLY16_C(36040), SIMDE_POLY16_C( 8940), SIMDE_POLY16_C(32944) } },
    { { SIMDE_POLY16_C(59197), SIMDE_POLY16_C(10499), SIMDE_POLY16_C(52610), SIMDE_POLY16_C(22960) },
      { SIMDE_POLY16_C(29696), SIMDE_POLY16_C(57564), SIMDE_POLY16_C(32575), SIMDE_POLY16_C( 8538) },
      { SIMDE_POLY16_C(59197), SIMDE_POLY16_C(29696), SIMDE_POLY16_C(52610), SIMDE_POLY16_C(32575) } },
    { { SIMDE_POLY16_C(52704), SIMDE_POLY16_C(52371), SIMDE_POLY16_C( 3567), SIMDE_POLY16_C(47022) },
      { SIMDE_POLY16_C(16537), SIMDE_POLY16_C(19144), SIMDE_POLY16_C(30145), SIMDE_POLY16_C(65179) },
      { SIMDE_POLY16_C(52704), SIMDE_POLY16_C(16537), SIMDE_POLY16_C( 3567), SIMDE_POLY16_C(30145) } },
    { { SIMDE_POLY16_C(40540), SIMDE_POLY16_C(56871), SIMDE_POLY16_C(55148), SIMDE_POLY16_C(27703) },
      { SIMDE_POLY16_C( 4940), SIMDE_POLY16_C(35660), SIMDE_POLY16_C(42642), SIMDE_POLY16_C(29612) },
      { SIMDE_POLY16_C(40540), SIMDE_POLY16_C( 4940), SIMDE_POLY16_C(55148), SIMDE_POLY16_C(42642) } },
  };

  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_vtrn1_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_vtrn1_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_vtrn1q_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( 32), SIMDE_POLY8_C(105), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(121), SIMDE_POLY8_C(145), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(135),
        SIMDE_POLY8_C(225), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 88), SIMDE_POLY8_C(200), SIMDE_POLY8_C(213), SIMDE_POLY8_C(147), SIMDE_POLY8_C(151) },
      { SIMDE_POLY8_C(177), SIMDE_POLY8_C(122), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 63), SIMDE_POLY8_C(245), SIMDE_POLY8_C(244), SIMDE_POLY8_C(140), SIMDE_POLY8_C(165),
        SIMDE_POLY8_C(180), SIMDE_POLY8_C( 76), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(249), SIMDE_POLY8_C( 12), SIMDE_POLY8_C( 91), SIMDE_POLY8_C( 53), SIMDE_POLY8_C( 45) },
      { SIMDE_POLY8_C( 32), SIMDE_POLY8_C(177), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(147), SIMDE_POLY8_C(121), SIMDE_POLY8_C(245), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(140),
        SIMDE_POLY8_C(225), SIMDE_POLY8_C(180), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 77), SIMDE_POLY8_C(200), SIMDE_POLY8_C( 12), SIMDE_POLY8_C(147), SIMDE_POLY8_C( 53) } },
    { { SIMDE_POLY8_C(196), SIMDE_POLY8_C(113), SIMDE_POLY8_C( 62), SIMDE_POLY8_C( 61), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(108), SIMDE_POLY8_C(196), SIMDE_POLY8_C(228),
        SIMDE_POLY8_C(146), SIMDE_POLY8_C(168), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(126), SIMDE_POLY8_C(207), SIMDE_POLY8_C(241), SIMDE_POLY8_C( 47) },
      { SIMDE_POLY8_C( 73), SIMDE_POLY8_C(133), SIMDE_POLY8_C(110), SIMDE_POLY8_C( 62), SIMDE_POLY8_C(121), SIMDE_POLY8_C(251), SIMDE_POLY8_C(227), SIMDE_POLY8_C( 45),
        SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 83), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 91), SIMDE_POLY8_C(128), SIMDE_POLY8_C( 80) },
      { SIMDE_POLY8_C(196), SIMDE_POLY8_C( 73), SIMDE_POLY8_C( 62), SIMDE_POLY8_C(110), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(121), SIMDE_POLY8_C(196), SIMDE_POLY8_C(227),
        SIMDE_POLY8_C(146), SIMDE_POLY8_C( 71), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(126), SIMDE_POLY8_C(140), SIMDE_POLY8_C(241), SIMDE_POLY8_C(128) } },
    { { SIMDE_POLY8_C(204), SIMDE_POLY8_C(191), SIMDE_POLY8_C(141), SIMDE_POLY8_C(206), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 81), SIMDE_POLY8_C(178), SIMDE_POLY8_C(189),
        SIMDE_POLY8_C(250), SIMDE_POLY8_C(238), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(120), SIMDE_POLY8_C(189), SIMDE_POLY8_C(  9), SIMDE_POLY8_C(167), SIMDE_POLY8_C(  7) },
      { SIMDE_POLY8_C(142), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 69), SIMDE_POLY8_C(  7), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 41), SIMDE_POLY8_C( 52), SIMDE_POLY8_C( 87),
        SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(171), SIMDE_POLY8_C(230), SIMDE_POLY8_C(181), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 54), SIMDE_POLY8_C(129) },
      { SIMDE_POLY8_C(204), SIMDE_POLY8_C(142), SIMDE_POLY8_C(141), SIMDE_POLY8_C( 69), SIMDE_POLY8_C( 43), SIMDE_POLY8_C( 16), SIMDE_POLY8_C(178), SIMDE_POLY8_C( 52),
        SIMDE_POLY8_C(250), SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(171), SIMDE_POLY8_C(189), SIMDE_POLY8_C(181), SIMDE_POLY8_C(167), SIMDE_POLY8_C( 54) } },
    { { SIMDE_POLY8_C(234), SIMDE_POLY8_C(195), SIMDE_POLY8_C( 79), SIMDE_POLY8_C( 21), SIMDE_POLY8_C( 20), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(210), SIMDE_POLY8_C( 14),
        SIMDE_POLY8_C(240), SIMDE_POLY8_C(234), SIMDE_POLY8_C(134), SIMDE_POLY8_C(174), SIMDE_POLY8_C(243), SIMDE_POLY8_C( 45), SIMDE_POLY8_C(181), SIMDE_POLY8_C(129) },
      { SIMDE_POLY8_C( 67), SIMDE_POLY8_C(250), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 83), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(188), SIMDE_POLY8_C(171), SIMDE_POLY8_C(125),
        SIMDE_POLY8_C( 22), SIMDE_POLY8_C( 86), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(203), SIMDE_POLY8_C(129), SIMDE_POLY8_C(153), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(108) },
      { SIMDE_POLY8_C(234), SIMDE_POLY8_C( 67), SIMDE_POLY8_C( 79), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 20), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(210), SIMDE_POLY8_C(171),
        SIMDE_POLY8_C(240), SIMDE_POLY8_C( 22), SIMDE_POLY8_C(134), SIMDE_POLY8_C( 99), SIMDE_POLY8_C(243), SIMDE_POLY8_C(129), SIMDE_POLY8_C(181), SIMDE_POLY8_C( 76) } },
    { { SIMDE_POLY8_C( 92), SIMDE_POLY8_C(155), SIMDE_POLY8_C(129), SIMDE_POLY8_C(113), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 84), SIMDE_POLY8_C(127), SIMDE_POLY8_C(142),
        SIMDE_POLY8_C( 62), SIMDE_POLY8_C(  6), SIMDE_POLY8_C( 60), SIMDE_POLY8_C( 49), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(241), SIMDE_POLY8_C(178), SIMDE_POLY8_C(118) },
      { SIMDE_POLY8_C(235), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(202), SIMDE_POLY8_C( 15), SIMDE_POLY8_C(246), SIMDE_POLY8_C(117), SIMDE_POLY8_C(140), SIMDE_POLY8_C( 12),
        SIMDE_POLY8_C(203), SIMDE_POLY8_C(240), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 76), SIMDE_POLY8_C(137), SIMDE_POLY8_C( 35), SIMDE_POLY8_C(184), SIMDE_POLY8_C(230) },
      { SIMDE_POLY8_C( 92), SIMDE_POLY8_C(235), SIMDE_POLY8_C(129), SIMDE_POLY8_C(202), SIMDE_POLY8_C(157), SIMDE_POLY8_C(246), SIMDE_POLY8_C(127), SIMDE_POLY8_C(140),
        SIMDE_POLY8_C( 62), SIMDE_POLY8_C(203), SIMDE_POLY8_C( 60), SIMDE_POLY8_C(215), SIMDE_POLY8_C( 51), SIMDE_POLY8_C(137), SIMDE_POLY8_C(178), SIMDE_POLY8_C(184) } },
    { { SIMDE_POLY8_C(190), SIMDE_POLY8_C( 58), SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 92), SIMDE_POLY8_C(142), SIMDE_POLY8_C(214), SIMDE_POLY8_C(234), SIMDE_POLY8_C(204),
        SIMDE_POLY8_C(220), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(253), SIMDE_POLY8_C( 16), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(175), SIMDE_POLY8_C(134), SIMDE_POLY8_C(  2) },
      { SIMDE_POLY8_C(233), SIMDE_POLY8_C( 80), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(223), SIMDE_POLY8_C(197), SIMDE_POLY8_C(158), SIMDE_POLY8_C(235), SIMDE_POLY8_C(144),
        SIMDE_POLY8_C(142), SIMDE_POLY8_C(194), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(229), SIMDE_POLY8_C(149), SIMDE_POLY8_C(253), SIMDE_POLY8_C(163) },
      { SIMDE_POLY8_C(190), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 87), SIMDE_POLY8_C( 17), SIMDE_POLY8_C(142), SIMDE_POLY8_C(197), SIMDE_POLY8_C(234), SIMDE_POLY8_C(235),
        SIMDE_POLY8_C(220), SIMDE_POLY8_C(142), SIMDE_POLY8_C(253), SIMDE_POLY8_C(221), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(229), SIMDE_POLY8_C(134), SIMDE_POLY8_C(253) } },
    { { SIMDE_POLY8_C(207), SIMDE_POLY8_C( 84),    SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C( 93), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(233), SIMDE_POLY8_C( 41), SIMDE_POLY8_C(  7),
        SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 38), SIMDE_POLY8_C( 23), SIMDE_POLY8_C( 38), SIMDE_POLY8_C(213), SIMDE_POLY8_C(158), SIMDE_POLY8_C( 41), SIMDE_POLY8_C(190) },
      { SIMDE_POLY8_C(238), SIMDE_POLY8_C( 58), SIMDE_POLY8_C(157), SIMDE_POLY8_C(180), SIMDE_POLY8_C(216), SIMDE_POLY8_C(136), SIMDE_POLY8_C( 68), SIMDE_POLY8_C(102),
        SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 33), SIMDE_POLY8_C(126), SIMDE_POLY8_C( 47), SIMDE_POLY8_C(183), SIMDE_POLY8_C(123), SIMDE_POLY8_C(211), SIMDE_POLY8_C(134) },
      { SIMDE_POLY8_C(207), SIMDE_POLY8_C(238),    SIMDE_POLY8_C(UINT8_MAX), SIMDE_POLY8_C(157), SIMDE_POLY8_C( 43), SIMDE_POLY8_C(216), SIMDE_POLY8_C( 41), SIMDE_POLY8_C( 68),
        SIMDE_POLY8_C( 15), SIMDE_POLY8_C( 74), SIMDE_POLY8_C( 23), SIMDE_POLY8_C(126), SIMDE_POLY8_C(213), SIMDE_POLY8_C(183), SIMDE_POLY8_C( 41), SIMDE_POLY8_C(211) } },
    { { SIMDE_POLY8_C(208), SIMDE_POLY8_C(210), SIMDE_POLY8_C(228), SIMDE_POLY8_C(251), SIMDE_POLY8_C(188), SIMDE_POLY8_C( 13), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(203),
        SIMDE_POLY8_C( 52), SIMDE_POLY8_C( 26), SIMDE_POLY8_C(242), SIMDE_POLY8_C(  9), SIMDE_POLY8_C(184), SIMDE_POLY8_C( 27), SIMDE_POLY8_C(200), SIMDE_POLY8_C(166) },
      { SIMDE_POLY8_C( 85), SIMDE_POLY8_C(101), SIMDE_POLY8_C( 90), SIMDE_POLY8_C( 46), SIMDE_POLY8_C(238), SIMDE_POLY8_C(159), SIMDE_POLY8_C(148), SIMDE_POLY8_C( 56),
        SIMDE_POLY8_C(192), SIMDE_POLY8_C( 18), SIMDE_POLY8_C(104), SIMDE_POLY8_C(119), SIMDE_POLY8_C(142), SIMDE_POLY8_C( 59), SIMDE_POLY8_C(254), SIMDE_POLY8_C( 94) },
      { SIMDE_POLY8_C(208), SIMDE_POLY8_C( 85), SIMDE_POLY8_C(228), SIMDE_POLY8_C( 90), SIMDE_POLY8_C(188), SIMDE_POLY8_C(238), SIMDE_POLY8_C(  2), SIMDE_POLY8_C(148),
        SIMDE_POLY8_C( 52), SIMDE_POLY8_C(192), SIMDE_POLY8_C(242), SIMDE_POLY8_C(104), SIMDE_POLY8_C(184), SIMDE_POLY8_C(142), SIMDE_POLY8_C(200), SIMDE_POLY8_C(254) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_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(14167), SIMDE_POLY16_C(21279), SIMDE_POLY16_C(48551), SIMDE_POLY16_C(14943), SIMDE_POLY16_C(56959), SIMDE_POLY16_C( 3699), SIMDE_POLY16_C(63440), SIMDE_POLY16_C(55030) },
      { SIMDE_POLY16_C(40429), SIMDE_POLY16_C(42656), SIMDE_POLY16_C(10703), SIMDE_POLY16_C(50757), SIMDE_POLY16_C(39485), SIMDE_POLY16_C(24810), SIMDE_POLY16_C(45053), SIMDE_POLY16_C(22004) },
      { SIMDE_POLY16_C(14167), SIMDE_POLY16_C(40429), SIMDE_POLY16_C(48551), SIMDE_POLY16_C(10703), SIMDE_POLY16_C(56959), SIMDE_POLY16_C(39485), SIMDE_POLY16_C(63440), SIMDE_POLY16_C(45053) } },
    { { SIMDE_POLY16_C( 5094), SIMDE_POLY16_C(36264), SIMDE_POLY16_C( 2001), SIMDE_POLY16_C(20680), SIMDE_POLY16_C(15333), SIMDE_POLY16_C(46430), SIMDE_POLY16_C(21555), SIMDE_POLY16_C( 8331) },
      { SIMDE_POLY16_C(11505), SIMDE_POLY16_C(49351), SIMDE_POLY16_C( 3157), SIMDE_POLY16_C(37510), SIMDE_POLY16_C(28839), SIMDE_POLY16_C(42226), SIMDE_POLY16_C(59167), SIMDE_POLY16_C( 1785) },
      { SIMDE_POLY16_C( 5094), SIMDE_POLY16_C(11505), SIMDE_POLY16_C( 2001), SIMDE_POLY16_C( 3157), SIMDE_POLY16_C(15333), SIMDE_POLY16_C(28839), SIMDE_POLY16_C(21555), SIMDE_POLY16_C(59167) } },
    { { SIMDE_POLY16_C(41466), SIMDE_POLY16_C(52115), SIMDE_POLY16_C(23464), SIMDE_POLY16_C(36124), SIMDE_POLY16_C(31383), SIMDE_POLY16_C(51778), SIMDE_POLY16_C(52943), SIMDE_POLY16_C(49386) },
      { SIMDE_POLY16_C(45562), SIMDE_POLY16_C(20353), SIMDE_POLY16_C( 1982), SIMDE_POLY16_C(26082), SIMDE_POLY16_C(54392), SIMDE_POLY16_C(38665), SIMDE_POLY16_C(  955), SIMDE_POLY16_C(46749) },
      { SIMDE_POLY16_C(41466), SIMDE_POLY16_C(45562), SIMDE_POLY16_C(23464), SIMDE_POLY16_C( 1982), SIMDE_POLY16_C(31383), SIMDE_POLY16_C(54392), SIMDE_POLY16_C(52943), SIMDE_POLY16_C(  955) } },
    { { SIMDE_POLY16_C(12708), SIMDE_POLY16_C(19841), SIMDE_POLY16_C(40332), SIMDE_POLY16_C( 9178), SIMDE_POLY16_C( 7448), SIMDE_POLY16_C(59373), SIMDE_POLY16_C(55531), SIMDE_POLY16_C(58791) },
      { SIMDE_POLY16_C(10377), SIMDE_POLY16_C(18228), SIMDE_POLY16_C( 5680), SIMDE_POLY16_C(43180), SIMDE_POLY16_C(46827), SIMDE_POLY16_C(42559), SIMDE_POLY16_C(56761), SIMDE_POLY16_C(23900) },
      { SIMDE_POLY16_C(12708), SIMDE_POLY16_C(10377), SIMDE_POLY16_C(40332), SIMDE_POLY16_C( 5680), SIMDE_POLY16_C( 7448), SIMDE_POLY16_C(46827), SIMDE_POLY16_C(55531), SIMDE_POLY16_C(56761) } },
    { { SIMDE_POLY16_C(56846), SIMDE_POLY16_C(39594), SIMDE_POLY16_C(34171), SIMDE_POLY16_C(37822), SIMDE_POLY16_C(43938), SIMDE_POLY16_C(36218), SIMDE_POLY16_C( 8835), SIMDE_POLY16_C( 3442) },
      { SIMDE_POLY16_C(42570), SIMDE_POLY16_C(31316), SIMDE_POLY16_C(  445), SIMDE_POLY16_C(43042), SIMDE_POLY16_C(25271), SIMDE_POLY16_C(28750), SIMDE_POLY16_C(43839), SIMDE_POLY16_C(19917) },
      { SIMDE_POLY16_C(56846), SIMDE_POLY16_C(42570), SIMDE_POLY16_C(34171), SIMDE_POLY16_C(  445), SIMDE_POLY16_C(43938), SIMDE_POLY16_C(25271), SIMDE_POLY16_C( 8835), SIMDE_POLY16_C(43839) } },
    { { SIMDE_POLY16_C(30857), SIMDE_POLY16_C( 1255), SIMDE_POLY16_C(42493), SIMDE_POLY16_C(40856), SIMDE_POLY16_C( 4689), SIMDE_POLY16_C(54316), SIMDE_POLY16_C(40500), SIMDE_POLY16_C(32737) },
      { SIMDE_POLY16_C(13892), SIMDE_POLY16_C(  505), SIMDE_POLY16_C( 7223), SIMDE_POLY16_C(61097), SIMDE_POLY16_C(63614), SIMDE_POLY16_C(48478), SIMDE_POLY16_C(11171), SIMDE_POLY16_C(11274) },
      { SIMDE_POLY16_C(30857), SIMDE_POLY16_C(13892), SIMDE_POLY16_C(42493), SIMDE_POLY16_C( 7223), SIMDE_POLY16_C( 4689), SIMDE_POLY16_C(63614), SIMDE_POLY16_C(40500), SIMDE_POLY16_C(11171) } },
    { { SIMDE_POLY16_C(61859), SIMDE_POLY16_C(41008), SIMDE_POLY16_C(51351), SIMDE_POLY16_C(59455), SIMDE_POLY16_C(27611), SIMDE_POLY16_C( 4028), SIMDE_POLY16_C(40457), SIMDE_POLY16_C(20110) },
      { SIMDE_POLY16_C(35028), SIMDE_POLY16_C( 2895), SIMDE_POLY16_C(63908), SIMDE_POLY16_C( 8953), SIMDE_POLY16_C(22513), SIMDE_POLY16_C(38111), SIMDE_POLY16_C(59778), SIMDE_POLY16_C( 9920) },
      { SIMDE_POLY16_C(61859), SIMDE_POLY16_C(35028), SIMDE_POLY16_C(51351), SIMDE_POLY16_C(63908), SIMDE_POLY16_C(27611), SIMDE_POLY16_C(22513), SIMDE_POLY16_C(40457), SIMDE_POLY16_C(59778) } },
    { { SIMDE_POLY16_C(61658), SIMDE_POLY16_C(29126), SIMDE_POLY16_C( 1721), SIMDE_POLY16_C(37977), SIMDE_POLY16_C( 5745), SIMDE_POLY16_C(31651), SIMDE_POLY16_C(12980), SIMDE_POLY16_C(35017) },
      { SIMDE_POLY16_C( 6330), SIMDE_POLY16_C(24211), SIMDE_POLY16_C(35857), SIMDE_POLY16_C(  640), SIMDE_POLY16_C(24547), SIMDE_POLY16_C(26006), SIMDE_POLY16_C(22088), SIMDE_POLY16_C( 8843) },
      { SIMDE_POLY16_C(61658), SIMDE_POLY16_C( 6330), SIMDE_POLY16_C( 1721), SIMDE_POLY16_C(35857), SIMDE_POLY16_C( 5745), SIMDE_POLY16_C(24547), SIMDE_POLY16_C(12980), SIMDE_POLY16_C(22088) } },
  };

  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_vtrn1q_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_vtrn1q_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_vtrn1q_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( 4815427970974768462), SIMDE_POLY64_C( 6946629186605919678) },
      { SIMDE_POLY64_C(17577554379567712573), SIMDE_POLY64_C( 9507926976227586244) },
      { SIMDE_POLY64_C( 4815427970974768462), SIMDE_POLY64_C(17577554379567712573) } },
    { { SIMDE_POLY64_C(17783107680982229326), SIMDE_POLY64_C( 7694430944701500407) },
      { SIMDE_POLY64_C(14946435657532704485), SIMDE_POLY64_C( 1392019949421056920) },
      { SIMDE_POLY64_C(17783107680982229326), SIMDE_POLY64_C(14946435657532704485) } },
    { { SIMDE_POLY64_C(  720685969029384403), SIMDE_POLY64_C(13170277731653498159) },
      { SIMDE_POLY64_C( 4546836441613680191), SIMDE_POLY64_C(15944534928651032686) },
      { SIMDE_POLY64_C(  720685969029384403), SIMDE_POLY64_C( 4546836441613680191) } },
    { { SIMDE_POLY64_C( 8377513640867717158), SIMDE_POLY64_C( 3252891876890621085) },
      { SIMDE_POLY64_C( 6754432899425457110), SIMDE_POLY64_C( 5553173804405016872) },
      { SIMDE_POLY64_C( 8377513640867717158), SIMDE_POLY64_C( 6754432899425457110) } },
    { { SIMDE_POLY64_C( 9111002919100414135), SIMDE_POLY64_C(12652601303620206972) },
      { SIMDE_POLY64_C(14317480457102167653), SIMDE_POLY64_C(14926910591795282610) },
      { SIMDE_POLY64_C( 9111002919100414135), SIMDE_POLY64_C(14317480457102167653) } },
    { { SIMDE_POLY64_C(17465588781926821122), SIMDE_POLY64_C(14197020995446656893) },
      { SIMDE_POLY64_C(14728401471583891713), SIMDE_POLY64_C( 7779348683327627021) },
      { SIMDE_POLY64_C(17465588781926821122), SIMDE_POLY64_C(14728401471583891713) } },
    { { SIMDE_POLY64_C( 8854554042291961977), SIMDE_POLY64_C( 3541753660244507904) },
      { SIMDE_POLY64_C( 1724092549986008839), SIMDE_POLY64_C(15666108166636934036) },
      { SIMDE_POLY64_C( 8854554042291961977), SIMDE_POLY64_C( 1724092549986008839) } },
    { { SIMDE_POLY64_C( 7595788518996621554), SIMDE_POLY64_C( 1677572234304633318) },
      { SIMDE_POLY64_C(16235800240466695983), SIMDE_POLY64_C(12894166098514972345) },
      { SIMDE_POLY64_C( 7595788518996621554), SIMDE_POLY64_C(16235800240466695983) } },
  };

  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_vtrn1q_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_vtrn1q_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(vtrn1_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_u32)

SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vtrn1q_p64)
SIMDE_TEST_FUNC_LIST_END

#include <test/arm/neon/test-neon-footer.h>