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

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

static int
test_simde_vaddh_f16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float16_t a;
    simde_float16_t b;
    simde_float16_t r;
  } test_vec[] = {
    { SIMDE_FLOAT16_VALUE(   167.25),
      SIMDE_FLOAT16_VALUE(  -952.00),
      SIMDE_FLOAT16_VALUE(  -785.00) },
    { SIMDE_FLOAT16_VALUE(  -942.50),
      SIMDE_FLOAT16_VALUE(   623.50),
      SIMDE_FLOAT16_VALUE(  -319.00) },
    { SIMDE_FLOAT16_VALUE(    -1.52),
      SIMDE_FLOAT16_VALUE(  -118.88),
      SIMDE_FLOAT16_VALUE(  -120.38) },
    { SIMDE_FLOAT16_VALUE(  -734.00),
      SIMDE_FLOAT16_VALUE(   -63.38),
      SIMDE_FLOAT16_VALUE(  -797.50) },
    { SIMDE_FLOAT16_VALUE(  -352.00),
      SIMDE_FLOAT16_VALUE(   409.00),
      SIMDE_FLOAT16_VALUE(    57.00) },
    { SIMDE_FLOAT16_VALUE(   191.75),
      SIMDE_FLOAT16_VALUE(  -388.75),
      SIMDE_FLOAT16_VALUE(  -197.00) },
    { SIMDE_FLOAT16_VALUE(   835.50),
      SIMDE_FLOAT16_VALUE(  -550.50),
      SIMDE_FLOAT16_VALUE(   285.00) },
    { SIMDE_FLOAT16_VALUE(  -529.00),
      SIMDE_FLOAT16_VALUE(  -873.50),
      SIMDE_FLOAT16_VALUE( -1402.00) }
  };

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

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

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_float16_t a = simde_test_codegen_random_f16(-1000.0f, 1000.0f);
    simde_float16_t b = simde_test_codegen_random_f16(-1000.0f, 1000.0f);
    simde_float16_t r = simde_vaddh_f16(a, b);

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

static int
test_simde_vaddd_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    int64_t a;
    int64_t b;
    int64_t r;
  } test_vec[] = {
    { -INT64_C( 5376176558586261779),
      -INT64_C( 8975014256303024679),
       INT64_C( 4095553258820265158) },
    {  INT64_C( 4193233660194686354),
       INT64_C( 8392010986138408549),
      -INT64_C( 5861499427376456713) },
    { -INT64_C(  498686658264423049),
      -INT64_C(  235223563850804956),
      -INT64_C(  733910222115228005) },
    { -INT64_C( 7287872900825752874),
      -INT64_C( 5631607047233613604),
       INT64_C( 5527264125650185138) },
    {  INT64_C( 4017813484947424424),
      -INT64_C( 3919207051327069898),
       INT64_C(   98606433620354526) },
    { -INT64_C( 3110218261649903353),
       INT64_C( 1009950248106779417),
      -INT64_C( 2100268013543123936) },
    {  INT64_C( 8007005661493138900),
      -INT64_C( 4253741394523353286),
       INT64_C( 3753264266969785614) },
    { -INT64_C( 4311396562388294819),
       INT64_C( 5057573658044097211),
       INT64_C(  746177095655802392) }
  };

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

    simde_assert_equal_i64(r, test_vec[i].r);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    int64_t a = simde_test_codegen_random_i64();
    int64_t b = simde_test_codegen_random_i64();
    int64_t r = simde_vaddd_s64(a, b);

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

static int
test_simde_vaddd_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    uint64_t a;
    uint64_t b;
    uint64_t r;
  } test_vec[] = {
    { UINT64_C(15770000197539399473),
      UINT64_C(17536172067039799771),
      UINT64_C(14859428190869647628) },
    { UINT64_C(17353057886393621858),
      UINT64_C( 3930588065693821396),
      UINT64_C( 2836901878377891638) },
    { UINT64_C(16195923950262401352),
      UINT64_C( 3237477675399957348),
      UINT64_C(  986657551952807084) },
    { UINT64_C( 8959642801591104818),
      UINT64_C(17451817626807527669),
      UINT64_C( 7964716354689080871) },
    { UINT64_C(12821359242969338377),
      UINT64_C( 7809127654626125417),
      UINT64_C( 2183742823885912178) },
    { UINT64_C(11092975718023534798),
      UINT64_C( 1022251167223362963),
      UINT64_C(12115226885246897761) },
    { UINT64_C( 1266930590655711894),
      UINT64_C(12040272284058140784),
      UINT64_C(13307202874713852678) },
    { UINT64_C(12139750857182669372),
      UINT64_C( 7482753672160808133),
      UINT64_C( 1175760455633925889) }
  };

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

    simde_assert_equal_u64(r, test_vec[i].r);
  }

  return 0;
#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    uint64_t a = simde_test_codegen_random_u64();
    uint64_t b = simde_test_codegen_random_u64();
    uint64_t r = simde_vaddd_u64(a, b);

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

static int
test_simde_vadd_f16 (SIMDE_MUNIT_TEST_ARGS) {
  #if 1
    struct {
      simde_float16_t a[4];
      simde_float16_t b[4];
      simde_float16_t r[4];
    } test_vec[] = {
      { { SIMDE_FLOAT16_VALUE(   -49.28), SIMDE_FLOAT16_VALUE(  -109.00), SIMDE_FLOAT16_VALUE(  -626.50), SIMDE_FLOAT16_VALUE(  -567.00) },
      { SIMDE_FLOAT16_VALUE(  -178.88), SIMDE_FLOAT16_VALUE(    10.22), SIMDE_FLOAT16_VALUE(   976.50), SIMDE_FLOAT16_VALUE(   -31.19) },
      { SIMDE_FLOAT16_VALUE(  -228.12), SIMDE_FLOAT16_VALUE(   -98.75), SIMDE_FLOAT16_VALUE(   350.00), SIMDE_FLOAT16_VALUE(  -598.00) } },
    { { SIMDE_FLOAT16_VALUE(  -226.00), SIMDE_FLOAT16_VALUE(  -520.50), SIMDE_FLOAT16_VALUE(  -252.38), SIMDE_FLOAT16_VALUE(  -407.50) },
      { SIMDE_FLOAT16_VALUE(    89.44), SIMDE_FLOAT16_VALUE(  -200.50), SIMDE_FLOAT16_VALUE(  -439.75), SIMDE_FLOAT16_VALUE(  -450.75) },
      { SIMDE_FLOAT16_VALUE(  -136.50), SIMDE_FLOAT16_VALUE(  -721.00), SIMDE_FLOAT16_VALUE(  -692.00), SIMDE_FLOAT16_VALUE(  -858.00) } },
    { { SIMDE_FLOAT16_VALUE(  -833.00), SIMDE_FLOAT16_VALUE(  -714.00), SIMDE_FLOAT16_VALUE(   428.50), SIMDE_FLOAT16_VALUE(   871.50) },
      { SIMDE_FLOAT16_VALUE(  -157.12), SIMDE_FLOAT16_VALUE(   972.50), SIMDE_FLOAT16_VALUE(   298.75), SIMDE_FLOAT16_VALUE(  -919.50) },
      { SIMDE_FLOAT16_VALUE(  -990.00), SIMDE_FLOAT16_VALUE(   258.50), SIMDE_FLOAT16_VALUE(   727.00), SIMDE_FLOAT16_VALUE(   -48.00) } },
    { { SIMDE_FLOAT16_VALUE(   488.00), SIMDE_FLOAT16_VALUE(   112.56), SIMDE_FLOAT16_VALUE(    58.66), SIMDE_FLOAT16_VALUE(   879.50) },
      { SIMDE_FLOAT16_VALUE(   129.00), SIMDE_FLOAT16_VALUE(  -858.50), SIMDE_FLOAT16_VALUE(  -133.88), SIMDE_FLOAT16_VALUE(  -920.50) },
      { SIMDE_FLOAT16_VALUE(   617.00), SIMDE_FLOAT16_VALUE(  -746.00), SIMDE_FLOAT16_VALUE(   -75.25), SIMDE_FLOAT16_VALUE(   -41.00) } },
    { { SIMDE_FLOAT16_VALUE(    32.59), SIMDE_FLOAT16_VALUE(   239.50), SIMDE_FLOAT16_VALUE(  -487.50), SIMDE_FLOAT16_VALUE(   853.50) },
      { SIMDE_FLOAT16_VALUE(  -750.50), SIMDE_FLOAT16_VALUE(  -510.75), SIMDE_FLOAT16_VALUE(  -177.50), SIMDE_FLOAT16_VALUE(    23.77) },
      { SIMDE_FLOAT16_VALUE(  -718.00), SIMDE_FLOAT16_VALUE(  -271.25), SIMDE_FLOAT16_VALUE(  -665.00), SIMDE_FLOAT16_VALUE(   877.50) } },
    { { SIMDE_FLOAT16_VALUE(   -31.45), SIMDE_FLOAT16_VALUE(   570.00), SIMDE_FLOAT16_VALUE(   616.00), SIMDE_FLOAT16_VALUE(  -942.00) },
      { SIMDE_FLOAT16_VALUE(  -630.50), SIMDE_FLOAT16_VALUE(  -823.50), SIMDE_FLOAT16_VALUE(  -392.75), SIMDE_FLOAT16_VALUE(  -463.25) },
      { SIMDE_FLOAT16_VALUE(  -662.00), SIMDE_FLOAT16_VALUE(  -253.50), SIMDE_FLOAT16_VALUE(   223.25), SIMDE_FLOAT16_VALUE( -1405.00) } },
    { { SIMDE_FLOAT16_VALUE(  -537.50), SIMDE_FLOAT16_VALUE(  -964.50), SIMDE_FLOAT16_VALUE(  -592.00), SIMDE_FLOAT16_VALUE(   305.50) },
      { SIMDE_FLOAT16_VALUE(  -992.00), SIMDE_FLOAT16_VALUE(   707.00), SIMDE_FLOAT16_VALUE(   386.00), SIMDE_FLOAT16_VALUE(   496.00) },
      { SIMDE_FLOAT16_VALUE( -1530.00), SIMDE_FLOAT16_VALUE(  -257.50), SIMDE_FLOAT16_VALUE(  -206.00), SIMDE_FLOAT16_VALUE(   801.50) } },
    { { SIMDE_FLOAT16_VALUE(  -180.50), SIMDE_FLOAT16_VALUE(  -555.50), SIMDE_FLOAT16_VALUE(   375.50), SIMDE_FLOAT16_VALUE(   948.50) },
      { SIMDE_FLOAT16_VALUE(  -413.75), SIMDE_FLOAT16_VALUE(  -758.50), SIMDE_FLOAT16_VALUE(  -972.00), SIMDE_FLOAT16_VALUE(   619.00) },
      { SIMDE_FLOAT16_VALUE(  -594.00), SIMDE_FLOAT16_VALUE( -1314.00), SIMDE_FLOAT16_VALUE(  -596.50), SIMDE_FLOAT16_VALUE(  1568.00) } }
    };

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

      a = simde_vld1_f16(test_vec[i].a);
      b = simde_vld1_f16(test_vec[i].b);
      r = simde_vadd_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(-1000.0f, 1000.0f);
      simde_float16x4_t b = simde_test_arm_neon_random_f16x4(-1000.0f, 1000.0f);
      simde_float16x4_t r = simde_vadd_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_vadd_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(  -645.65), SIMDE_FLOAT32_C(   153.94) },
      { SIMDE_FLOAT32_C(   112.49), SIMDE_FLOAT32_C(  -617.76) },
      { SIMDE_FLOAT32_C(  -533.16), SIMDE_FLOAT32_C(  -463.81) } },
    { { SIMDE_FLOAT32_C(  -544.46), SIMDE_FLOAT32_C(   -10.20) },
      { SIMDE_FLOAT32_C(   -53.36), SIMDE_FLOAT32_C(  -475.60) },
      { SIMDE_FLOAT32_C(  -597.83), SIMDE_FLOAT32_C(  -485.80) } },
    { { SIMDE_FLOAT32_C(   567.70), SIMDE_FLOAT32_C(   173.84) },
      { SIMDE_FLOAT32_C(   812.81), SIMDE_FLOAT32_C(   166.74) },
      { SIMDE_FLOAT32_C(  1380.51), SIMDE_FLOAT32_C(   340.59) } },
    { { SIMDE_FLOAT32_C(  -854.69), SIMDE_FLOAT32_C(  -924.50) },
      { SIMDE_FLOAT32_C(   -17.33), SIMDE_FLOAT32_C(  -405.57) },
      { SIMDE_FLOAT32_C(  -872.02), SIMDE_FLOAT32_C( -1330.07) } },
    { { SIMDE_FLOAT32_C(   507.20), SIMDE_FLOAT32_C(  -886.90) },
      { SIMDE_FLOAT32_C(   991.64), SIMDE_FLOAT32_C(   755.28) },
      { SIMDE_FLOAT32_C(  1498.84), SIMDE_FLOAT32_C(  -131.62) } },
    { { SIMDE_FLOAT32_C(  -419.88), SIMDE_FLOAT32_C(   108.98) },
      { SIMDE_FLOAT32_C(   853.76), SIMDE_FLOAT32_C(   233.89) },
      { SIMDE_FLOAT32_C(   433.88), SIMDE_FLOAT32_C(   342.87) } },
    { { SIMDE_FLOAT32_C(  -196.90), SIMDE_FLOAT32_C(   244.58) },
      { SIMDE_FLOAT32_C(   298.75), SIMDE_FLOAT32_C(   867.12) },
      { SIMDE_FLOAT32_C(   101.85), SIMDE_FLOAT32_C(  1111.70) } },
    { { SIMDE_FLOAT32_C(    32.51), SIMDE_FLOAT32_C(  -749.49) },
      { SIMDE_FLOAT32_C(  -783.09), SIMDE_FLOAT32_C(   386.86) },
      { SIMDE_FLOAT32_C(  -750.58), SIMDE_FLOAT32_C(  -362.63) } }
  };

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

    a = simde_vld1_f32(test_vec[i].a);
    b = simde_vld1_f32(test_vec[i].b);
    r = simde_vadd_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_vadd_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_vadd_f64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_float64 a[1];
    simde_float64 b[1];
    simde_float64 r[1];
  } test_vec[] = {
    { { SIMDE_FLOAT64_C(   404.45) },
      { SIMDE_FLOAT64_C(   329.40) },
      { SIMDE_FLOAT64_C(   733.85) } },
    { { SIMDE_FLOAT64_C(   769.10) },
      { SIMDE_FLOAT64_C(   859.99) },
      { SIMDE_FLOAT64_C(  1629.09) } },
    { { SIMDE_FLOAT64_C(  -680.80) },
      { SIMDE_FLOAT64_C(  -284.26) },
      { SIMDE_FLOAT64_C(  -965.06) } },
    { { SIMDE_FLOAT64_C(  -615.61) },
      { SIMDE_FLOAT64_C(   886.90) },
      { SIMDE_FLOAT64_C(   271.29) } },
    { { SIMDE_FLOAT64_C(   889.58) },
      { SIMDE_FLOAT64_C(  -802.80) },
      { SIMDE_FLOAT64_C(    86.78) } },
    { { SIMDE_FLOAT64_C(    53.64) },
      { SIMDE_FLOAT64_C(  -965.11) },
      { SIMDE_FLOAT64_C(  -911.46) } },
    { { SIMDE_FLOAT64_C(  -727.30) },
      { SIMDE_FLOAT64_C(  -963.68) },
      { SIMDE_FLOAT64_C( -1690.98) } },
    { { SIMDE_FLOAT64_C(  -370.68) },
      { SIMDE_FLOAT64_C(   779.90) },
      { SIMDE_FLOAT64_C(   409.22) } }
  };

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

    simde_test_arm_neon_assert_equal_f64x1(r, simde_vld1_f64(test_vec[i].r), 1);
  }

  return 0;

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

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

static int
test_simde_vadd_s8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int8_t a[8];
    int8_t b[8];
    int8_t r[8];
  } test_vec[] = {
    { { -INT8_C(  51),  INT8_C(   8), -INT8_C(  16), -INT8_C(  79), -INT8_C( 121), -INT8_C( 101), -INT8_C(  47),  INT8_C( 115) },
      { -INT8_C( 103),  INT8_C(  43), -INT8_C(  76), -INT8_C(  98), -INT8_C(  75),  INT8_C(  79), -INT8_C(  61),  INT8_C( 120) },
      {  INT8_C( 102),  INT8_C(  51), -INT8_C(  92),  INT8_C(  79),  INT8_C(  60), -INT8_C(  22), -INT8_C( 108), -INT8_C(  21) } },
    { {  INT8_C(  28), -INT8_C( 124), -INT8_C(  17), -INT8_C( 117), -INT8_C( 124), -INT8_C(  22),  INT8_C( 125),  INT8_C( 109) },
      {  INT8_C(  14), -INT8_C( 125),  INT8_C(  88),  INT8_C( 115), -INT8_C(  23),  INT8_C( 119), -INT8_C(  31), -INT8_C(  73) },
      {  INT8_C(  42),  INT8_C(   7),  INT8_C(  71), -INT8_C(   2),  INT8_C( 109),  INT8_C(  97),  INT8_C(  94),  INT8_C(  36) } },
    { {      INT8_MAX, -INT8_C(  47),  INT8_C( 104),  INT8_C(   6),  INT8_C( 109),  INT8_C(  57),  INT8_C( 121),  INT8_C(   6) },
      {  INT8_C( 100),  INT8_C(  45), -INT8_C(  92),  INT8_C(  25),  INT8_C( 125),  INT8_C( 104), -INT8_C( 111), -INT8_C( 103) },
      { -INT8_C(  29), -INT8_C(   2),  INT8_C(  12),  INT8_C(  31), -INT8_C(  22), -INT8_C(  95),  INT8_C(  10), -INT8_C(  97) } },
    { { -INT8_C(  20),      INT8_MIN,  INT8_C(  37),  INT8_C( 112),  INT8_C( 106), -INT8_C(  94), -INT8_C(  35),  INT8_C( 120) },
      {  INT8_C(  37),  INT8_C(  54), -INT8_C(  20),  INT8_C(  14), -INT8_C(  83), -INT8_C(  51), -INT8_C(  59),  INT8_C(  44) },
      {  INT8_C(  17), -INT8_C(  74),  INT8_C(  17),  INT8_C( 126),  INT8_C(  23),  INT8_C( 111), -INT8_C(  94), -INT8_C(  92) } },
    { { -INT8_C(  98),  INT8_C(  45),  INT8_C(  51),  INT8_C(  11),  INT8_C( 102), -INT8_C(  84),  INT8_C(  17), -INT8_C(  53) },
      { -INT8_C(  38), -INT8_C(  74), -INT8_C(  28),  INT8_C(  87),  INT8_C(  30),  INT8_C( 118), -INT8_C(  16),  INT8_C(  10) },
      {  INT8_C( 120), -INT8_C(  29),  INT8_C(  23),  INT8_C(  98), -INT8_C( 124),  INT8_C(  34),  INT8_C(   1), -INT8_C(  43) } },
    { { -INT8_C(  10),  INT8_C(  21),  INT8_C( 122),  INT8_C(  97), -INT8_C(  73),  INT8_C(  88), -INT8_C(  39), -INT8_C(  36) },
      { -INT8_C( 114), -INT8_C(  59), -INT8_C(  21),  INT8_C(  59), -INT8_C( 110), -INT8_C(  80),  INT8_C( 103),  INT8_C(  49) },
      { -INT8_C( 124), -INT8_C(  38),  INT8_C( 101), -INT8_C( 100),  INT8_C(  73),  INT8_C(   8),  INT8_C(  64),  INT8_C(  13) } },
    { { -INT8_C(  34), -INT8_C( 102),  INT8_C(  60),  INT8_C(  68),  INT8_C(  71),  INT8_C(  78),  INT8_C(  15),  INT8_C(  33) },
      {  INT8_C(   4), -INT8_C(  12),  INT8_C( 120),  INT8_C(  34),  INT8_C( 106),  INT8_C( 104),  INT8_C(  44),  INT8_C(  96) },
      { -INT8_C(  30), -INT8_C( 114), -INT8_C(  76),  INT8_C( 102), -INT8_C(  79), -INT8_C(  74),  INT8_C(  59), -INT8_C( 127) } },
    { {  INT8_C( 126), -INT8_C(  90), -INT8_C(  63),  INT8_C(  53), -INT8_C(   2), -INT8_C( 101),  INT8_C(  18), -INT8_C( 116) },
      {  INT8_C(  96), -INT8_C(   3), -INT8_C(  57), -INT8_C(  13), -INT8_C(  83),  INT8_C(  47),  INT8_C(  36), -INT8_C( 117) },
      { -INT8_C(  34), -INT8_C(  93), -INT8_C( 120),  INT8_C(  40), -INT8_C(  85), -INT8_C(  54),  INT8_C(  54),  INT8_C(  23) } }
  };

  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_vadd_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_vadd_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_vadd_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[4];
    int16_t b[4];
    int16_t r[4];
  } test_vec[] = {
    { {  INT16_C( 24777),  INT16_C(  4304), -INT16_C(  8274), -INT16_C( 19919) },
      { -INT16_C( 22061),  INT16_C( 15828),  INT16_C(    18), -INT16_C( 28514) },
      {  INT16_C(  2716),  INT16_C( 20132), -INT16_C(  8256),  INT16_C( 17103) } },
    { {  INT16_C( 24487), -INT16_C( 23099), -INT16_C( 10246),  INT16_C( 23346) },
      { -INT16_C(  1580), -INT16_C( 32178),  INT16_C( 29224), -INT16_C(  3571) },
      {  INT16_C( 22907),  INT16_C( 10259),  INT16_C( 18978),  INT16_C( 19775) } },
    { { -INT16_C(  8750), -INT16_C( 32510),  INT16_C( 13501), -INT16_C( 28621) },
      {  INT16_C(  2269), -INT16_C(  4146),  INT16_C( 27656), -INT16_C( 20609) },
      { -INT16_C(  6481),  INT16_C( 28880), -INT16_C( 24379),  INT16_C( 16306) } },
    { {  INT16_C( 17867), -INT16_C( 14763), -INT16_C( 30948), -INT16_C(  3807) },
      {  INT16_C( 28544), -INT16_C( 22157), -INT16_C( 32543), -INT16_C( 19557) },
      { -INT16_C( 19125),  INT16_C( 28616),  INT16_C(  2045), -INT16_C( 23364) } },
    { { -INT16_C( 25250),  INT16_C(  6964),  INT16_C( 26833), -INT16_C( 20565) },
      {  INT16_C( 31088),  INT16_C( 30878),  INT16_C(  7909), -INT16_C( 20184) },
      {  INT16_C(  5838), -INT16_C( 27694), -INT16_C( 30794),  INT16_C( 24787) } },
    { {  INT16_C( 32099),  INT16_C( 32631), -INT16_C( 26620), -INT16_C( 31632) },
      { -INT16_C(  7417), -INT16_C(  6099), -INT16_C( 14236), -INT16_C( 15717) },
      {  INT16_C( 24682),  INT16_C( 26532),  INT16_C( 24680),  INT16_C( 18187) } },
    { { -INT16_C( 12186),  INT16_C( 14301), -INT16_C( 30664), -INT16_C( 22298) },
      { -INT16_C( 31486), -INT16_C(  6368),  INT16_C( 18595),  INT16_C(  1688) },
      {  INT16_C( 21864),  INT16_C(  7933), -INT16_C( 12069), -INT16_C( 20610) } },
    { {  INT16_C(  4037), -INT16_C( 13947), -INT16_C(  2393), -INT16_C( 20914) },
      {  INT16_C( 31705),  INT16_C( 15766),  INT16_C( 12868), -INT16_C( 21761) },
      { -INT16_C( 29794),  INT16_C(  1819),  INT16_C( 10475),  INT16_C( 22861) } }
  };

  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_vadd_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_vadd_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_vadd_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[2];
    int32_t b[2];
    int32_t r[2];
  } test_vec[] = {
    { {  INT32_C(   987880450),  INT32_C(  1742915685) },
      { -INT32_C(   263323059),  INT32_C(   284616523) },
      {  INT32_C(   724557391),  INT32_C(  2027532208) } },
    { { -INT32_C(  1629848586),  INT32_C(  1263282289) },
      { -INT32_C(   410459229),  INT32_C(   395413525) },
      { -INT32_C(  2040307815),  INT32_C(  1658695814) } },
    { { -INT32_C(   917408924), -INT32_C(  2010107077) },
      { -INT32_C(  2139586763),  INT32_C(  1553034854) },
      {  INT32_C(  1237971609), -INT32_C(   457072223) } },
    { {  INT32_C(  1543138281),  INT32_C(   916866963) },
      {  INT32_C(  1058942506),  INT32_C(   458665910) },
      { -INT32_C(  1692886509),  INT32_C(  1375532873) } },
    { {  INT32_C(  1575266082),  INT32_C(   266671578) },
      { -INT32_C(    91202156), -INT32_C(  1252646453) },
      {  INT32_C(  1484063926), -INT32_C(   985974875) } },
    { {  INT32_C(   521163148), -INT32_C(  1034570088) },
      { -INT32_C(  1694403612),  INT32_C(  1169577763) },
      { -INT32_C(  1173240464),  INT32_C(   135007675) } },
    { { -INT32_C(   660366594),  INT32_C(  1139247279) },
      { -INT32_C(  1321371674),  INT32_C(   610702488) },
      { -INT32_C(  1981738268),  INT32_C(  1749949767) } },
    { {  INT32_C(  2101573349),  INT32_C(   289380652) },
      {  INT32_C(   799817740), -INT32_C(  1787469161) },
      { -INT32_C(  1393576207), -INT32_C(  1498088509) } }
  };

  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_vadd_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_vadd_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_vadd_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int64_t a[1];
    int64_t b[1];
    int64_t r[1];
  } test_vec[] = {
    { { -INT64_C( 8723660904129029892) },
      { -INT64_C( 6446446838156874292) },
      {  INT64_C( 3276636331423647432) } },
    { {  INT64_C( 8237754855438142485) },
      {  INT64_C( 6759364693269282466) },
      { -INT64_C( 3449624525002126665) } },
    { {  INT64_C( 6581439727009348398) },
      {  INT64_C( 4723230566403575077) },
      { -INT64_C( 7142073780296628141) } },
    { { -INT64_C( 5481490900376703211) },
      { -INT64_C( 3201572641363423533) },
      { -INT64_C( 8683063541740126744) } },
    { { -INT64_C( 5124823067756684555) },
      { -INT64_C(    3892366966611835) },
      { -INT64_C( 5128715434723296390) } },
    { {  INT64_C( 2134538319889593818) },
      {  INT64_C( 4354666682578472181) },
      {  INT64_C( 6489205002468065999) } },
    { { -INT64_C( 8158375143962242948) },
      {  INT64_C( 7722040105862391106) },
      { -INT64_C(  436335038099851842) } },
    { {  INT64_C(   76268774866003111) },
      { -INT64_C( 4682326055126867838) },
      { -INT64_C( 4606057280260864727) } }
  };

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

    simde_test_arm_neon_assert_equal_i64x1(r, simde_vld1_s64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_int64x1_t a = simde_test_arm_neon_random_i64x1();
    simde_int64x1_t b = simde_test_arm_neon_random_i64x1();
    simde_int64x1_t r = simde_vadd_s64(a, b);

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

static int
test_simde_vadd_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C(145), UINT8_C(172), UINT8_C(192), UINT8_C(101), UINT8_C(103), UINT8_C( 94), UINT8_C(186), UINT8_C(229) },
      { UINT8_C(202), UINT8_C( 17), UINT8_C(115), UINT8_C( 16), UINT8_C(110), UINT8_C( 20), UINT8_C(220), UINT8_C(201) },
      { UINT8_C( 91), UINT8_C(189), UINT8_C( 51), UINT8_C(117), UINT8_C(213), UINT8_C(114), UINT8_C(150), UINT8_C(174) } },
    { { UINT8_C(228), UINT8_C(100), UINT8_C(144), UINT8_C(122), UINT8_C( 55), UINT8_C(227), UINT8_C(226), UINT8_C(153) },
      { UINT8_C( 24), UINT8_C(198), UINT8_C(165), UINT8_C( 23), UINT8_C(173), UINT8_C( 87), UINT8_C( 39), UINT8_C( 62) },
      { UINT8_C(252), UINT8_C( 42), UINT8_C( 53), UINT8_C(145), UINT8_C(228), UINT8_C( 58), UINT8_C(  9), UINT8_C(215) } },
    { { UINT8_C(  3), UINT8_C(231), UINT8_C(163), UINT8_C(106), UINT8_C( 69), UINT8_C( 93), UINT8_C( 80), UINT8_C( 15) },
      { UINT8_C(110), UINT8_C(195), UINT8_C( 31), UINT8_C(221), UINT8_C(216), UINT8_C(251), UINT8_C(166), UINT8_C(188) },
      { UINT8_C(113), UINT8_C(170), UINT8_C(194), UINT8_C( 71), UINT8_C( 29), UINT8_C( 88), UINT8_C(246), UINT8_C(203) } },
    { { UINT8_C( 96), UINT8_C( 55), UINT8_C( 55), UINT8_C(151), UINT8_C( 26), UINT8_C( 25), UINT8_C( 48), UINT8_C( 50) },
      { UINT8_C(223), UINT8_C(213), UINT8_C( 74), UINT8_C(140), UINT8_C( 45), UINT8_C(113), UINT8_C(202), UINT8_C( 48) },
      { UINT8_C( 63), UINT8_C( 12), UINT8_C(129), UINT8_C( 35), UINT8_C( 71), UINT8_C(138), UINT8_C(250), UINT8_C( 98) } },
    { { UINT8_C( 88), UINT8_C(109), UINT8_C(155), UINT8_C(157), UINT8_C(202), UINT8_C(235), UINT8_C(172), UINT8_C( 56) },
      { UINT8_C(174), UINT8_C(203), UINT8_C( 21), UINT8_C(134), UINT8_C(198), UINT8_C(188), UINT8_C( 67), UINT8_C( 38) },
      { UINT8_C(  6), UINT8_C( 56), UINT8_C(176), UINT8_C( 35), UINT8_C(144), UINT8_C(167), UINT8_C(239), UINT8_C( 94) } },
    { { UINT8_C(243), UINT8_C(122), UINT8_C(189), UINT8_C( 13), UINT8_C(147), UINT8_C(238), UINT8_C( 64), UINT8_C(114) },
      { UINT8_C(195), UINT8_C(138), UINT8_C(254), UINT8_C(240), UINT8_C(251), UINT8_C(200), UINT8_C( 33), UINT8_C( 83) },
      { UINT8_C(182), UINT8_C(  4), UINT8_C(187), UINT8_C(253), UINT8_C(142), UINT8_C(182), UINT8_C( 97), UINT8_C(197) } },
    { { UINT8_C( 53), UINT8_C(188), UINT8_C(240),    UINT8_MAX, UINT8_C(167), UINT8_C(156), UINT8_C( 55), UINT8_C( 85) },
      { UINT8_C(103), UINT8_C( 77), UINT8_C(220), UINT8_C( 45), UINT8_C(  9), UINT8_C( 31), UINT8_C( 84), UINT8_C(252) },
      { UINT8_C(156), UINT8_C(  9), UINT8_C(204), UINT8_C( 44), UINT8_C(176), UINT8_C(187), UINT8_C(139), UINT8_C( 81) } },
    { { UINT8_C(153), UINT8_C( 17), UINT8_C(  9), UINT8_C( 44),    UINT8_MAX, UINT8_C( 73), UINT8_C(158), UINT8_C(195) },
      { UINT8_C(211), UINT8_C(156), UINT8_C(179), UINT8_C(206), UINT8_C(100), UINT8_C(212), UINT8_C( 33), UINT8_C(153) },
      { UINT8_C(108), UINT8_C(173), UINT8_C(188), UINT8_C(250), UINT8_C( 99), UINT8_C( 29), UINT8_C(191), UINT8_C( 92) } }
  };

  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_vadd_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_uint8x16_t a = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t b = simde_test_arm_neon_random_u8x16();
    simde_uint8x16_t r = simde_vadd_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_vadd_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[4];
    uint16_t b[4];
    uint16_t r[4];
  } test_vec[] = {
    { { UINT16_C( 4496), UINT16_C(14232), UINT16_C(53165), UINT16_C( 5261) },
      { UINT16_C(26908), UINT16_C( 9538), UINT16_C(38536), UINT16_C( 8481) },
      { UINT16_C(31404), UINT16_C(23770), UINT16_C(26165), UINT16_C(13742) } },
    { { UINT16_C(11175), UINT16_C(42829), UINT16_C(60276), UINT16_C(18538) },
      { UINT16_C( 7559), UINT16_C(60182), UINT16_C(14578), UINT16_C(33412) },
      { UINT16_C(18734), UINT16_C(37475), UINT16_C( 9318), UINT16_C(51950) } },
    { { UINT16_C( 7241), UINT16_C(63418), UINT16_C(18411), UINT16_C( 2059) },
      { UINT16_C(19888), UINT16_C(14381), UINT16_C(20451), UINT16_C(35673) },
      { UINT16_C(27129), UINT16_C(12263), UINT16_C(38862), UINT16_C(37732) } },
    { { UINT16_C(42618), UINT16_C(60978), UINT16_C(40081), UINT16_C( 6198) },
      { UINT16_C(19897), UINT16_C(43779), UINT16_C(34693), UINT16_C(52782) },
      { UINT16_C(62515), UINT16_C(39221), UINT16_C( 9238), UINT16_C(58980) } },
    { { UINT16_C(59555), UINT16_C(36549), UINT16_C(53551), UINT16_C(57238) },
      { UINT16_C(50206), UINT16_C(  535), UINT16_C(28691), UINT16_C(36237) },
      { UINT16_C(44225), UINT16_C(37084), UINT16_C(16706), UINT16_C(27939) } },
    { { UINT16_C(48918), UINT16_C(42875), UINT16_C(45659), UINT16_C( 5311) },
      { UINT16_C(49919), UINT16_C(33984), UINT16_C(61001), UINT16_C(60498) },
      { UINT16_C(33301), UINT16_C(11323), UINT16_C(41124), UINT16_C(  273) } },
    { { UINT16_C( 6358), UINT16_C( 1402), UINT16_C( 4585), UINT16_C( 2020) },
      { UINT16_C(64469), UINT16_C(59401), UINT16_C(38507), UINT16_C(33141) },
      { UINT16_C( 5291), UINT16_C(60803), UINT16_C(43092), UINT16_C(35161) } },
    { { UINT16_C(61525), UINT16_C(45096), UINT16_C(59298), UINT16_C(41413) },
      { UINT16_C(34217), UINT16_C(61989), UINT16_C(30835), UINT16_C(18910) },
      { UINT16_C(30206), UINT16_C(41549), UINT16_C(24597), UINT16_C(60323) } }
  };

  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_vadd_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_vadd_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_vadd_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[2];
    uint32_t b[2];
    uint32_t r[2];
  } test_vec[] = {
    { { UINT32_C(2035177616), UINT32_C(1048588905) },
      { UINT32_C(2552662573), UINT32_C(1981389600) },
      { UINT32_C( 292872893), UINT32_C(3029978505) } },
    { { UINT32_C( 774259084), UINT32_C(3520129832) },
      { UINT32_C(3821270384), UINT32_C(4247560557) },
      { UINT32_C( 300562172), UINT32_C(3472723093) } },
    { { UINT32_C(1668709113), UINT32_C(3651270572) },
      { UINT32_C(2708588673), UINT32_C(4011297379) },
      { UINT32_C(  82330490), UINT32_C(3367600655) } },
    { { UINT32_C(4078845643), UINT32_C(2596597289) },
      { UINT32_C(1367181283), UINT32_C( 575580712) },
      { UINT32_C(1151059630), UINT32_C(3172178001) } },
    { { UINT32_C(3515204900), UINT32_C(1034561212) },
      { UINT32_C(1390288110), UINT32_C(1916925606) },
      { UINT32_C( 610525714), UINT32_C(2951486818) } },
    { { UINT32_C(1566924596), UINT32_C( 838281805) },
      { UINT32_C(3665982897), UINT32_C(1140641823) },
      { UINT32_C( 937940197), UINT32_C(1978923628) } },
    { { UINT32_C(1360298389), UINT32_C(2525937575) },
      { UINT32_C(2179493339), UINT32_C(2549295459) },
      { UINT32_C(3539791728), UINT32_C( 780265738) } },
    { { UINT32_C(3606337929), UINT32_C( 872934531) },
      { UINT32_C(2148436321), UINT32_C(4022536794) },
      { UINT32_C(1459806954), UINT32_C( 600504029) } }
  };

  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_vadd_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_vadd_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_vadd_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint64_t a[1];
    uint64_t b[1];
    uint64_t r[1];
  } test_vec[] = {
    { { UINT64_C( 8271370438949591179) },
      { UINT64_C( 7149156384669675836) },
      { UINT64_C(15420526823619267015) } },
    { { UINT64_C( 8716507174114306880) },
      { UINT64_C(11246819847481853643) },
      { UINT64_C( 1516582947886608907) } },
    { { UINT64_C( 7033664003445314963) },
      { UINT64_C(13224599815624691785) },
      { UINT64_C( 1811519745360455132) } },
    { { UINT64_C(14839766502604456290) },
      { UINT64_C( 4045366772834167159) },
      { UINT64_C(  438389201729071833) } },
    { { UINT64_C(15340385730390389596) },
      { UINT64_C( 9132594273923359887) },
      { UINT64_C( 6026235930604197867) } },
    { { UINT64_C( 2310322047046596415) },
      { UINT64_C( 7327580934766068434) },
      { UINT64_C( 9637902981812664849) } },
    { { UINT64_C(11681996663360525247) },
      { UINT64_C(15296307448611608238) },
      { UINT64_C( 8531560038262581869) } },
    { { UINT64_C(18043431286987964317) },
      { UINT64_C(11211186651486359335) },
      { UINT64_C(10807873864764772036) } }
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_uint64x1_t a = simde_vld1_u64(test_vec[i].a);
    simde_uint64x1_t b = simde_vld1_u64(test_vec[i].b);
    simde_uint64x1_t r = simde_vadd_u64(a, b);
    simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_uint64x1_t a = simde_test_arm_neon_random_u64x1();
    simde_uint64x1_t b = simde_test_arm_neon_random_u64x1();
    simde_uint64x1_t r = simde_vadd_u64(a, b);

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

static int
test_simde_vaddq_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(   441.00), SIMDE_FLOAT16_VALUE(   861.50), SIMDE_FLOAT16_VALUE(    98.06), SIMDE_FLOAT16_VALUE(   896.00),
        SIMDE_FLOAT16_VALUE(  -918.50), SIMDE_FLOAT16_VALUE(  -717.00), SIMDE_FLOAT16_VALUE(  -823.00), SIMDE_FLOAT16_VALUE(  -581.00) },
      { SIMDE_FLOAT16_VALUE(   684.00), SIMDE_FLOAT16_VALUE(   563.00), SIMDE_FLOAT16_VALUE(    15.31), SIMDE_FLOAT16_VALUE(  -786.50),
        SIMDE_FLOAT16_VALUE(   891.00), SIMDE_FLOAT16_VALUE(   859.50), SIMDE_FLOAT16_VALUE(   387.25), SIMDE_FLOAT16_VALUE(   969.00) },
      { SIMDE_FLOAT16_VALUE(  1125.00), SIMDE_FLOAT16_VALUE(  1424.00), SIMDE_FLOAT16_VALUE(   113.38), SIMDE_FLOAT16_VALUE(   109.50),
        SIMDE_FLOAT16_VALUE(   -27.50), SIMDE_FLOAT16_VALUE(   142.50), SIMDE_FLOAT16_VALUE(  -435.75), SIMDE_FLOAT16_VALUE(   388.00) } },
    { { SIMDE_FLOAT16_VALUE(    -6.45), SIMDE_FLOAT16_VALUE(    29.20), SIMDE_FLOAT16_VALUE(  -856.00), SIMDE_FLOAT16_VALUE(   267.25),
        SIMDE_FLOAT16_VALUE(  -302.00), SIMDE_FLOAT16_VALUE(   526.50), SIMDE_FLOAT16_VALUE(   713.00), SIMDE_FLOAT16_VALUE(   -14.83) },
      { SIMDE_FLOAT16_VALUE(  -848.00), SIMDE_FLOAT16_VALUE(   815.50), SIMDE_FLOAT16_VALUE(  -672.50), SIMDE_FLOAT16_VALUE(   274.50),
        SIMDE_FLOAT16_VALUE(   933.00), SIMDE_FLOAT16_VALUE(  -952.50), SIMDE_FLOAT16_VALUE(   426.00), SIMDE_FLOAT16_VALUE(   373.75) },
      { SIMDE_FLOAT16_VALUE(  -854.50), SIMDE_FLOAT16_VALUE(   844.50), SIMDE_FLOAT16_VALUE( -1528.00), SIMDE_FLOAT16_VALUE(   542.00),
        SIMDE_FLOAT16_VALUE(   631.00), SIMDE_FLOAT16_VALUE(  -426.00), SIMDE_FLOAT16_VALUE(  1139.00), SIMDE_FLOAT16_VALUE(   359.00) } },
    { { SIMDE_FLOAT16_VALUE(   909.00), SIMDE_FLOAT16_VALUE(  -475.75), SIMDE_FLOAT16_VALUE(   269.75), SIMDE_FLOAT16_VALUE(   991.00),
        SIMDE_FLOAT16_VALUE(  -192.62), SIMDE_FLOAT16_VALUE(   446.50), SIMDE_FLOAT16_VALUE(  -590.00), SIMDE_FLOAT16_VALUE(  -508.50) },
      { SIMDE_FLOAT16_VALUE(     9.56), SIMDE_FLOAT16_VALUE(   425.25), SIMDE_FLOAT16_VALUE(  -294.75), SIMDE_FLOAT16_VALUE(   -99.19),
        SIMDE_FLOAT16_VALUE(   284.50), SIMDE_FLOAT16_VALUE(  -907.50), SIMDE_FLOAT16_VALUE(  -130.00), SIMDE_FLOAT16_VALUE(  -722.00) },
      { SIMDE_FLOAT16_VALUE(   918.50), SIMDE_FLOAT16_VALUE(   -50.50), SIMDE_FLOAT16_VALUE(   -25.00), SIMDE_FLOAT16_VALUE(   892.00),
        SIMDE_FLOAT16_VALUE(    91.88), SIMDE_FLOAT16_VALUE(  -461.00), SIMDE_FLOAT16_VALUE(  -720.00), SIMDE_FLOAT16_VALUE( -1230.00) } },
    { { SIMDE_FLOAT16_VALUE(   121.69), SIMDE_FLOAT16_VALUE(    14.28), SIMDE_FLOAT16_VALUE(   545.00), SIMDE_FLOAT16_VALUE(   819.50),
        SIMDE_FLOAT16_VALUE(  -459.00), SIMDE_FLOAT16_VALUE(   258.50), SIMDE_FLOAT16_VALUE(  -195.12), SIMDE_FLOAT16_VALUE(  -307.00) },
      { SIMDE_FLOAT16_VALUE(    73.81), SIMDE_FLOAT16_VALUE(   132.25), SIMDE_FLOAT16_VALUE(   967.50), SIMDE_FLOAT16_VALUE(     6.60),
        SIMDE_FLOAT16_VALUE(   179.88), SIMDE_FLOAT16_VALUE(   393.50), SIMDE_FLOAT16_VALUE(  -619.50), SIMDE_FLOAT16_VALUE(    89.12) },
      { SIMDE_FLOAT16_VALUE(   195.50), SIMDE_FLOAT16_VALUE(   146.50), SIMDE_FLOAT16_VALUE(  1512.00), SIMDE_FLOAT16_VALUE(   826.00),
        SIMDE_FLOAT16_VALUE(  -279.00), SIMDE_FLOAT16_VALUE(   652.00), SIMDE_FLOAT16_VALUE(  -814.50), SIMDE_FLOAT16_VALUE(  -217.88) } },
    { { SIMDE_FLOAT16_VALUE(   918.00), SIMDE_FLOAT16_VALUE(   650.00), SIMDE_FLOAT16_VALUE(    80.00), SIMDE_FLOAT16_VALUE(  -275.00),
        SIMDE_FLOAT16_VALUE(    96.56), SIMDE_FLOAT16_VALUE(   489.75), SIMDE_FLOAT16_VALUE(   216.50), SIMDE_FLOAT16_VALUE(  -894.00) },
      { SIMDE_FLOAT16_VALUE(   -85.06), SIMDE_FLOAT16_VALUE(   921.50), SIMDE_FLOAT16_VALUE(     6.98), SIMDE_FLOAT16_VALUE(  -800.50),
        SIMDE_FLOAT16_VALUE(  -986.00), SIMDE_FLOAT16_VALUE(   877.00), SIMDE_FLOAT16_VALUE(  -522.50), SIMDE_FLOAT16_VALUE(   135.75) },
      { SIMDE_FLOAT16_VALUE(   833.00), SIMDE_FLOAT16_VALUE(  1572.00), SIMDE_FLOAT16_VALUE(    87.00), SIMDE_FLOAT16_VALUE( -1076.00),
        SIMDE_FLOAT16_VALUE(  -889.50), SIMDE_FLOAT16_VALUE(  1367.00), SIMDE_FLOAT16_VALUE(  -306.00), SIMDE_FLOAT16_VALUE(  -758.00) } },
    { { SIMDE_FLOAT16_VALUE(  -108.69), SIMDE_FLOAT16_VALUE(  -977.50), SIMDE_FLOAT16_VALUE(   -44.56), SIMDE_FLOAT16_VALUE(   432.25),
        SIMDE_FLOAT16_VALUE(   281.00), SIMDE_FLOAT16_VALUE(   760.00), SIMDE_FLOAT16_VALUE(  -874.50), SIMDE_FLOAT16_VALUE(  -645.00) },
      { SIMDE_FLOAT16_VALUE(  -107.50), SIMDE_FLOAT16_VALUE(  -907.00), SIMDE_FLOAT16_VALUE(   361.50), SIMDE_FLOAT16_VALUE(  -927.50),
        SIMDE_FLOAT16_VALUE(   486.50), SIMDE_FLOAT16_VALUE(   742.00), SIMDE_FLOAT16_VALUE(   161.50), SIMDE_FLOAT16_VALUE(   404.25) },
      { SIMDE_FLOAT16_VALUE(  -216.25), SIMDE_FLOAT16_VALUE( -1884.00), SIMDE_FLOAT16_VALUE(   317.00), SIMDE_FLOAT16_VALUE(  -495.25),
        SIMDE_FLOAT16_VALUE(   767.50), SIMDE_FLOAT16_VALUE(  1502.00), SIMDE_FLOAT16_VALUE(  -713.00), SIMDE_FLOAT16_VALUE(  -240.75) } },
    { { SIMDE_FLOAT16_VALUE(   392.00), SIMDE_FLOAT16_VALUE(  -758.50), SIMDE_FLOAT16_VALUE(  -870.50), SIMDE_FLOAT16_VALUE(  -511.25),
        SIMDE_FLOAT16_VALUE(   731.50), SIMDE_FLOAT16_VALUE(   345.75), SIMDE_FLOAT16_VALUE(  -405.25), SIMDE_FLOAT16_VALUE(  -353.75) },
      { SIMDE_FLOAT16_VALUE(   267.50), SIMDE_FLOAT16_VALUE(   602.00), SIMDE_FLOAT16_VALUE(  -154.25), SIMDE_FLOAT16_VALUE(   281.75),
        SIMDE_FLOAT16_VALUE(   478.75), SIMDE_FLOAT16_VALUE(   323.25), SIMDE_FLOAT16_VALUE(  -582.50), SIMDE_FLOAT16_VALUE(  -630.00) },
      { SIMDE_FLOAT16_VALUE(   659.50), SIMDE_FLOAT16_VALUE(  -156.50), SIMDE_FLOAT16_VALUE( -1025.00), SIMDE_FLOAT16_VALUE(  -229.50),
        SIMDE_FLOAT16_VALUE(  1210.00), SIMDE_FLOAT16_VALUE(   669.00), SIMDE_FLOAT16_VALUE(  -988.00), SIMDE_FLOAT16_VALUE(  -984.00) } },
    { { SIMDE_FLOAT16_VALUE(   345.75), SIMDE_FLOAT16_VALUE(   372.75), SIMDE_FLOAT16_VALUE(   802.50), SIMDE_FLOAT16_VALUE(  -373.00),
        SIMDE_FLOAT16_VALUE(   133.12), SIMDE_FLOAT16_VALUE(   928.00), SIMDE_FLOAT16_VALUE(   -18.17), SIMDE_FLOAT16_VALUE(  -974.50) },
      { SIMDE_FLOAT16_VALUE(  -979.50), SIMDE_FLOAT16_VALUE(  -656.50), SIMDE_FLOAT16_VALUE(  -902.00), SIMDE_FLOAT16_VALUE(   507.00),
        SIMDE_FLOAT16_VALUE(  -914.50), SIMDE_FLOAT16_VALUE(   259.50), SIMDE_FLOAT16_VALUE(   -88.69), SIMDE_FLOAT16_VALUE(   477.25) },
      { SIMDE_FLOAT16_VALUE(  -634.00), SIMDE_FLOAT16_VALUE(  -283.75), SIMDE_FLOAT16_VALUE(   -99.50), SIMDE_FLOAT16_VALUE(   134.00),
        SIMDE_FLOAT16_VALUE(  -781.50), SIMDE_FLOAT16_VALUE(  1188.00), SIMDE_FLOAT16_VALUE(  -106.88), SIMDE_FLOAT16_VALUE(  -497.25) } }
    };

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

      a = simde_vld1q_f16(test_vec[i].a);
      b = simde_vld1q_f16(test_vec[i].b);
      r = simde_vaddq_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(-1000.0f, 1000.0f);
      simde_float16x8_t b = simde_test_arm_neon_random_f16x8(-1000.0f, 1000.0f);
      simde_float16x8_t r = simde_vaddq_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_vaddq_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(  -476.88), SIMDE_FLOAT32_C(   -38.10), SIMDE_FLOAT32_C(   469.39), SIMDE_FLOAT32_C(  -664.80) },
      { SIMDE_FLOAT32_C(   181.43), SIMDE_FLOAT32_C(  -154.03), SIMDE_FLOAT32_C(  -345.56), SIMDE_FLOAT32_C(  -102.63) },
      { SIMDE_FLOAT32_C(  -295.46), SIMDE_FLOAT32_C(  -192.12), SIMDE_FLOAT32_C(   123.83), SIMDE_FLOAT32_C(  -767.44) } },
    { { SIMDE_FLOAT32_C(  -103.40), SIMDE_FLOAT32_C(   661.42), SIMDE_FLOAT32_C(  -336.65), SIMDE_FLOAT32_C(   536.30) },
      { SIMDE_FLOAT32_C(   318.30), SIMDE_FLOAT32_C(  -387.41), SIMDE_FLOAT32_C(   435.33), SIMDE_FLOAT32_C(  -961.83) },
      { SIMDE_FLOAT32_C(   214.90), SIMDE_FLOAT32_C(   274.01), SIMDE_FLOAT32_C(    98.69), SIMDE_FLOAT32_C(  -425.53) } },
    { { SIMDE_FLOAT32_C(   203.44), SIMDE_FLOAT32_C(  -916.52), SIMDE_FLOAT32_C(  -867.20), SIMDE_FLOAT32_C(    66.23) },
      { SIMDE_FLOAT32_C(  -667.27), SIMDE_FLOAT32_C(  -968.66), SIMDE_FLOAT32_C(   101.74), SIMDE_FLOAT32_C(   202.05) },
      { SIMDE_FLOAT32_C(  -463.83), SIMDE_FLOAT32_C( -1885.18), SIMDE_FLOAT32_C(  -765.47), SIMDE_FLOAT32_C(   268.28) } },
    { { SIMDE_FLOAT32_C(  -612.77), SIMDE_FLOAT32_C(  -920.83), SIMDE_FLOAT32_C(    82.14), SIMDE_FLOAT32_C(  -930.15) },
      { SIMDE_FLOAT32_C(  -763.40), SIMDE_FLOAT32_C(  -818.04), SIMDE_FLOAT32_C(   -97.96), SIMDE_FLOAT32_C(  -240.29) },
      { SIMDE_FLOAT32_C( -1376.18), SIMDE_FLOAT32_C( -1738.88), SIMDE_FLOAT32_C(   -15.82), SIMDE_FLOAT32_C( -1170.43) } },
    { { SIMDE_FLOAT32_C(   143.86), SIMDE_FLOAT32_C(  -628.57), SIMDE_FLOAT32_C(    94.91), SIMDE_FLOAT32_C(  -674.71) },
      { SIMDE_FLOAT32_C(   217.40), SIMDE_FLOAT32_C(   749.35), SIMDE_FLOAT32_C(   222.65), SIMDE_FLOAT32_C(  -886.00) },
      { SIMDE_FLOAT32_C(   361.26), SIMDE_FLOAT32_C(   120.77), SIMDE_FLOAT32_C(   317.56), SIMDE_FLOAT32_C( -1560.71) } },
    { { SIMDE_FLOAT32_C(   410.77), SIMDE_FLOAT32_C(   886.01), SIMDE_FLOAT32_C(   650.30), SIMDE_FLOAT32_C(  -270.93) },
      { SIMDE_FLOAT32_C(  -501.41), SIMDE_FLOAT32_C(    85.64), SIMDE_FLOAT32_C(  -232.77), SIMDE_FLOAT32_C(   702.03) },
      { SIMDE_FLOAT32_C(   -90.64), SIMDE_FLOAT32_C(   971.64), SIMDE_FLOAT32_C(   417.54), SIMDE_FLOAT32_C(   431.10) } },
    { { SIMDE_FLOAT32_C(   169.12), SIMDE_FLOAT32_C(   -99.97), SIMDE_FLOAT32_C(  -231.73), SIMDE_FLOAT32_C(   501.86) },
      { SIMDE_FLOAT32_C(   -68.63), SIMDE_FLOAT32_C(   870.00), SIMDE_FLOAT32_C(  -296.10), SIMDE_FLOAT32_C(   318.59) },
      { SIMDE_FLOAT32_C(   100.49), SIMDE_FLOAT32_C(   770.03), SIMDE_FLOAT32_C(  -527.83), SIMDE_FLOAT32_C(   820.45) } },
    { { SIMDE_FLOAT32_C(   949.17), SIMDE_FLOAT32_C(   786.05), SIMDE_FLOAT32_C(   388.45), SIMDE_FLOAT32_C(  -814.23) },
      { SIMDE_FLOAT32_C(   968.00), SIMDE_FLOAT32_C(  -709.52), SIMDE_FLOAT32_C(   -54.52), SIMDE_FLOAT32_C(   111.86) },
      { SIMDE_FLOAT32_C(  1917.17), SIMDE_FLOAT32_C(    76.53), SIMDE_FLOAT32_C(   333.93), SIMDE_FLOAT32_C(  -702.37) } }
  };

  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_vaddq_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_vaddq_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_vaddq_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(  -338.09), SIMDE_FLOAT64_C(  -959.61) },
      { SIMDE_FLOAT64_C(   437.15), SIMDE_FLOAT64_C(   879.31) },
      { SIMDE_FLOAT64_C(    99.06), SIMDE_FLOAT64_C(   -80.30) } },
    { { SIMDE_FLOAT64_C(   789.73), SIMDE_FLOAT64_C(  -340.20) },
      { SIMDE_FLOAT64_C(   993.31), SIMDE_FLOAT64_C(   200.50) },
      { SIMDE_FLOAT64_C(  1783.05), SIMDE_FLOAT64_C(  -139.70) } },
    { { SIMDE_FLOAT64_C(  -454.19), SIMDE_FLOAT64_C(   643.62) },
      { SIMDE_FLOAT64_C(   929.57), SIMDE_FLOAT64_C(    44.40) },
      { SIMDE_FLOAT64_C(   475.38), SIMDE_FLOAT64_C(   688.02) } },
    { { SIMDE_FLOAT64_C(  -270.75), SIMDE_FLOAT64_C(  -303.20) },
      { SIMDE_FLOAT64_C(  -253.57), SIMDE_FLOAT64_C(   898.38) },
      { SIMDE_FLOAT64_C(  -524.31), SIMDE_FLOAT64_C(   595.18) } },
    { { SIMDE_FLOAT64_C(   596.83), SIMDE_FLOAT64_C(   514.70) },
      { SIMDE_FLOAT64_C(   400.23), SIMDE_FLOAT64_C(  -471.80) },
      { SIMDE_FLOAT64_C(   997.06), SIMDE_FLOAT64_C(    42.90) } },
    { { SIMDE_FLOAT64_C(   384.71), SIMDE_FLOAT64_C(  -895.87) },
      { SIMDE_FLOAT64_C(   846.79), SIMDE_FLOAT64_C(   333.88) },
      { SIMDE_FLOAT64_C(  1231.50), SIMDE_FLOAT64_C(  -561.99) } },
    { { SIMDE_FLOAT64_C(   890.18), SIMDE_FLOAT64_C(   235.24) },
      { SIMDE_FLOAT64_C(   519.64), SIMDE_FLOAT64_C(   858.18) },
      { SIMDE_FLOAT64_C(  1409.82), SIMDE_FLOAT64_C(  1093.42) } },
    { { SIMDE_FLOAT64_C(   525.73), SIMDE_FLOAT64_C(  -534.88) },
      { SIMDE_FLOAT64_C(   -29.96), SIMDE_FLOAT64_C(  -812.36) },
      { SIMDE_FLOAT64_C(   495.77), SIMDE_FLOAT64_C( -1347.24) } }
  };

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

  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_vaddq_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_vaddq_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_vaddq_s16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int16_t a[8];
    int16_t b[8];
    int16_t r[8];
  } test_vec[] = {
    { { -INT16_C(  9359),  INT16_C( 19853), -INT16_C(  5258),  INT16_C( 25982),  INT16_C( 13488), -INT16_C(  9621), -INT16_C(  8264), -INT16_C( 14382) },
      { -INT16_C( 29038),  INT16_C( 16526), -INT16_C(  8207), -INT16_C( 10419), -INT16_C( 27770),  INT16_C(  8648), -INT16_C(  9930), -INT16_C( 22287) },
      {  INT16_C( 27139), -INT16_C( 29157), -INT16_C( 13465),  INT16_C( 15563), -INT16_C( 14282), -INT16_C(   973), -INT16_C( 18194),  INT16_C( 28867) } },
    { {  INT16_C( 32436),  INT16_C( 10997),  INT16_C( 29545),  INT16_C(  6799), -INT16_C(  1112),  INT16_C( 24820), -INT16_C( 14630),  INT16_C( 27688) },
      { -INT16_C( 18860),  INT16_C( 17836), -INT16_C(  1643),  INT16_C(  6940), -INT16_C(  7028), -INT16_C( 15556),  INT16_C( 11710),  INT16_C( 29291) },
      {  INT16_C( 13576),  INT16_C( 28833),  INT16_C( 27902),  INT16_C( 13739), -INT16_C(  8140),  INT16_C(  9264), -INT16_C(  2920), -INT16_C(  8557) } },
    { {  INT16_C( 24747),  INT16_C(  5533),  INT16_C( 11476),  INT16_C( 31791),  INT16_C(  8999),  INT16_C(   476),  INT16_C(  1257),  INT16_C( 15981) },
      {  INT16_C(  6587),  INT16_C( 20611), -INT16_C( 24557), -INT16_C( 24724), -INT16_C( 22396),  INT16_C( 16994), -INT16_C( 12842), -INT16_C( 32331) },
      {  INT16_C( 31334),  INT16_C( 26144), -INT16_C( 13081),  INT16_C(  7067), -INT16_C( 13397),  INT16_C( 17470), -INT16_C( 11585), -INT16_C( 16350) } },
    { {  INT16_C( 21038),  INT16_C(   662), -INT16_C( 14978), -INT16_C( 22914),  INT16_C( 23272), -INT16_C( 11609),  INT16_C(  5471),  INT16_C(  6672) },
      { -INT16_C( 27858),  INT16_C( 16746), -INT16_C( 10701), -INT16_C( 18207),  INT16_C( 17279),  INT16_C( 22010), -INT16_C( 20719),  INT16_C( 16342) },
      { -INT16_C(  6820),  INT16_C( 17408), -INT16_C( 25679),  INT16_C( 24415), -INT16_C( 24985),  INT16_C( 10401), -INT16_C( 15248),  INT16_C( 23014) } },
    { {  INT16_C( 27905), -INT16_C( 32703), -INT16_C( 16590),  INT16_C(  6950), -INT16_C( 13031),  INT16_C( 30957), -INT16_C(   542),  INT16_C(  4498) },
      { -INT16_C(   624), -INT16_C( 15278),  INT16_C( 13267),  INT16_C( 21116),  INT16_C( 30327), -INT16_C( 30553),  INT16_C( 32294),  INT16_C( 10183) },
      {  INT16_C( 27281),  INT16_C( 17555), -INT16_C(  3323),  INT16_C( 28066),  INT16_C( 17296),  INT16_C(   404),  INT16_C( 31752),  INT16_C( 14681) } },
    { {  INT16_C(  2283),  INT16_C(  7591), -INT16_C( 12857), -INT16_C(  8136),  INT16_C(  9627),  INT16_C( 32089), -INT16_C(  5342), -INT16_C( 19570) },
      { -INT16_C(  7704), -INT16_C( 17289), -INT16_C(  3308), -INT16_C( 29938), -INT16_C( 18839), -INT16_C( 28909), -INT16_C(  9676),  INT16_C(  8119) },
      { -INT16_C(  5421), -INT16_C(  9698), -INT16_C( 16165),  INT16_C( 27462), -INT16_C(  9212),  INT16_C(  3180), -INT16_C( 15018), -INT16_C( 11451) } },
    { {  INT16_C( 24290), -INT16_C( 22212),  INT16_C( 29996), -INT16_C( 14454), -INT16_C(  7270), -INT16_C( 17084), -INT16_C( 11314), -INT16_C( 18576) },
      { -INT16_C(  6220), -INT16_C( 14221), -INT16_C( 32294),  INT16_C( 17236),  INT16_C( 26423),  INT16_C( 27603), -INT16_C( 30142),  INT16_C(  9354) },
      {  INT16_C( 18070),  INT16_C( 29103), -INT16_C(  2298),  INT16_C(  2782),  INT16_C( 19153),  INT16_C( 10519),  INT16_C( 24080), -INT16_C(  9222) } },
    { { -INT16_C( 14360),  INT16_C(  5326),  INT16_C( 22588), -INT16_C( 10533),  INT16_C(  8251),  INT16_C(  2451),  INT16_C(  1011), -INT16_C( 22592) },
      {  INT16_C( 13290), -INT16_C( 15249), -INT16_C( 15435), -INT16_C(  5112), -INT16_C(  9429),  INT16_C( 27992), -INT16_C(  7579),  INT16_C( 19857) },
      { -INT16_C(  1070), -INT16_C(  9923),  INT16_C(  7153), -INT16_C( 15645), -INT16_C(  1178),  INT16_C( 30443), -INT16_C(  6568), -INT16_C(  2735) } }
  };

  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_vaddq_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_vaddq_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_vaddq_s32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int32_t a[4];
    int32_t b[4];
    int32_t r[4];
  } test_vec[] = {
    { { -INT32_C(   446537815), -INT32_C(   222544457),  INT32_C(  1358712669),  INT32_C(  1039645779) },
      { -INT32_C(  1526568976),  INT32_C(  1435568682),  INT32_C(  1254287845),  INT32_C(  1972851916) },
      { -INT32_C(  1973106791),  INT32_C(  1213024225), -INT32_C(  1681966782), -INT32_C(  1282469601) } },
    { {  INT32_C(  1801189811), -INT32_C(  1805838537), -INT32_C(  1176151706),  INT32_C(   116907030) },
      {  INT32_C(  1856764227), -INT32_C(   389858301), -INT32_C(   231569882), -INT32_C(  1922577958) },
      { -INT32_C(   637013258),  INT32_C(  2099270458), -INT32_C(  1407721588), -INT32_C(  1805670928) } },
    { { -INT32_C(    84360509),  INT32_C(  1083070169), -INT32_C(   973507665), -INT32_C(  1815351216) },
      { -INT32_C(   335448343), -INT32_C(   640367181),  INT32_C(   634062411), -INT32_C(  1817038128) },
      { -INT32_C(   419808852),  INT32_C(   442702988), -INT32_C(   339445254),  INT32_C(   662577952) } },
    { { -INT32_C(   829576203), -INT32_C(  1341252863), -INT32_C(   545912689), -INT32_C(   495828488) },
      {  INT32_C(  1808692408), -INT32_C(  2075876551),  INT32_C(  2041122729),  INT32_C(   906779457) },
      {  INT32_C(   979116205),  INT32_C(   877837882),  INT32_C(  1495210040),  INT32_C(   410950969) } },
    { {  INT32_C(   117807366),  INT32_C(  1152914357),  INT32_C(   337849883),  INT32_C(   670471535) },
      {  INT32_C(  1116914697),  INT32_C(   298243687),  INT32_C(   663384037), -INT32_C(   782395445) },
      {  INT32_C(  1234722063),  INT32_C(  1451158044),  INT32_C(  1001233920), -INT32_C(   111923910) } },
    { { -INT32_C(   438738384), -INT32_C(  1859546762),  INT32_C(   782585023), -INT32_C(   346645534) },
      { -INT32_C(   953227168), -INT32_C(  1529285441),  INT32_C(   801858404),  INT32_C(   704653818) },
      { -INT32_C(  1391965552),  INT32_C(   906135093),  INT32_C(  1584443427),  INT32_C(   358008284) } },
    { {  INT32_C(    17881483),  INT32_C(   697514346),  INT32_C(  1750612102),  INT32_C(   877899476) },
      {  INT32_C(  1442546070), -INT32_C(   621095818),  INT32_C(   822723895),  INT32_C(  2052786670) },
      {  INT32_C(  1460427553),  INT32_C(    76418528), -INT32_C(  1721631299), -INT32_C(  1364281150) } },
    { {  INT32_C(  1299934179),  INT32_C(   729222821),  INT32_C(   462671687),  INT32_C(   324003453) },
      { -INT32_C(   563525016),  INT32_C(  1438147358),  INT32_C(   394707240), -INT32_C(  1382948150) },
      {  INT32_C(   736409163), -INT32_C(  2127597117),  INT32_C(   857378927), -INT32_C(  1058944697) } }
  };

  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_vaddq_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_vaddq_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_vaddq_s64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    int64_t a[2];
    int64_t b[2];
    int64_t r[2];
  } test_vec[] = {
    { {  INT64_C( 7069932454407769165), -INT64_C(   13004371797364671) },
      { -INT64_C( 4140332404967654890),  INT64_C( 4669791854137250134) },
      {  INT64_C( 2929600049440114275),  INT64_C( 4656787482339885463) } },
    { {  INT64_C( 9004754196787087738),  INT64_C( 6311525774842819585) },
      {  INT64_C( 6893064936395404358),  INT64_C( 8024092871902594599) },
      { -INT64_C( 2548924940527059520), -INT64_C( 4111125426964137432) } },
    { { -INT64_C( 2319920201253745130),  INT64_C( 6415393146933806960) },
      { -INT64_C( 3248530561039559550), -INT64_C( 3544254053793109396) },
      { -INT64_C( 5568450762293304680),  INT64_C( 2871139093140697564) } },
    { {  INT64_C( 4725381914672747733), -INT64_C( 7178462820614140940) },
      { -INT64_C( 1222143994085532274),  INT64_C( 1441468807256274812) },
      {  INT64_C( 3503237920587215459), -INT64_C( 5736994013357866128) } },
    { {  INT64_C(  145904156942017013), -INT64_C( 9215373147744044954) },
      { -INT64_C( 3352152200456879353), -INT64_C( 2302176223951467846) },
      { -INT64_C( 3206248043514862340),  INT64_C( 6929194702014038816) } },
    { { -INT64_C( 7550095452228168409), -INT64_C( 5469846406055902556) },
      {  INT64_C( 5664886855523291254), -INT64_C( 3436716378960715133) },
      { -INT64_C( 1885208596704877155), -INT64_C( 8906562785016617689) } },
    { {  INT64_C( 4967820718097494825), -INT64_C( 5629233198243575680) },
      {  INT64_C( 6531657446270508995),  INT64_C( 7725668155930504637) },
      { -INT64_C( 6947265909341547796),  INT64_C( 2096434957686928957) } },
    { { -INT64_C(  293377758463705846),  INT64_C( 9127117198251772094) },
      {  INT64_C(   25185705384028199),  INT64_C( 4761604672234922343) },
      { -INT64_C(  268192053079677647), -INT64_C( 4558022203222857179) } }
  };

  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_vaddq_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_vaddq_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_vaddq_u8 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint8_t a[16];
    uint8_t b[16];
    uint8_t r[16];
  } test_vec[] = {
    { { UINT8_C(219), UINT8_C(217), UINT8_C(235), UINT8_C( 86), UINT8_C(143), UINT8_C(217), UINT8_C( 81), UINT8_C( 77),
        UINT8_C(161), UINT8_C(120), UINT8_C( 70), UINT8_C( 92), UINT8_C(128), UINT8_C(240), UINT8_C(218), UINT8_C(167) },
      { UINT8_C( 24), UINT8_C(175), UINT8_C(166), UINT8_C( 91), UINT8_C( 42),    UINT8_MAX, UINT8_C( 92), UINT8_C(145),
        UINT8_C( 32), UINT8_C(195), UINT8_C( 58), UINT8_C( 88), UINT8_C( 97), UINT8_C( 78), UINT8_C(154), UINT8_C( 60) },
      { UINT8_C(243), UINT8_C(136), UINT8_C(145), UINT8_C(177), UINT8_C(185), UINT8_C(216), UINT8_C(173), UINT8_C(222),
        UINT8_C(193), UINT8_C( 59), UINT8_C(128), UINT8_C(180), UINT8_C(225), UINT8_C( 62), UINT8_C(116), UINT8_C(227) } },
    { { UINT8_C( 39), UINT8_C(134), UINT8_C(146), UINT8_C(182), UINT8_C( 95), UINT8_C(227), UINT8_C(  3), UINT8_C(  0),
        UINT8_C( 91), UINT8_C( 73), UINT8_C( 93), UINT8_C(220), UINT8_C( 58), UINT8_C( 55), UINT8_C(131), UINT8_C( 82) },
      { UINT8_C(231), UINT8_C( 41), UINT8_C(174), UINT8_C( 17), UINT8_C( 40), UINT8_C( 10), UINT8_C(162), UINT8_C( 73),
        UINT8_C(205), UINT8_C(221), UINT8_C(161), UINT8_C( 46), UINT8_C( 43), UINT8_C( 60), UINT8_C(106), UINT8_C( 83) },
      { UINT8_C( 14), UINT8_C(175), UINT8_C( 64), UINT8_C(199), UINT8_C(135), UINT8_C(237), UINT8_C(165), UINT8_C( 73),
        UINT8_C( 40), UINT8_C( 38), UINT8_C(254), UINT8_C( 10), UINT8_C(101), UINT8_C(115), UINT8_C(237), UINT8_C(165) } },
    { { UINT8_C(194), UINT8_C(252), UINT8_C(  9), UINT8_C( 33), UINT8_C(223), UINT8_C( 13), UINT8_C( 33), UINT8_C( 58),
        UINT8_C( 86), UINT8_C(126), UINT8_C( 22), UINT8_C(144), UINT8_C(182), UINT8_C(154), UINT8_C(227), UINT8_C(157) },
      { UINT8_C(195), UINT8_C(145), UINT8_C(174), UINT8_C(236), UINT8_C(155), UINT8_C( 80), UINT8_C( 53), UINT8_C(104),
        UINT8_C( 45), UINT8_C(214), UINT8_C(150), UINT8_C( 89), UINT8_C( 18), UINT8_C(  0), UINT8_C(172), UINT8_C(212) },
      { UINT8_C(133), UINT8_C(141), UINT8_C(183), UINT8_C( 13), UINT8_C(122), UINT8_C( 93), UINT8_C( 86), UINT8_C(162),
        UINT8_C(131), UINT8_C( 84), UINT8_C(172), UINT8_C(233), UINT8_C(200), UINT8_C(154), UINT8_C(143), UINT8_C(113) } },
    { { UINT8_C(252), UINT8_C(181), UINT8_C(245), UINT8_C(219), UINT8_C(194), UINT8_C( 23), UINT8_C( 21), UINT8_C( 25),
        UINT8_C(149), UINT8_C( 44), UINT8_C(169), UINT8_C( 75), UINT8_C(198), UINT8_C(140), UINT8_C(232), UINT8_C(137) },
      { UINT8_C( 29), UINT8_C(150), UINT8_C(117), UINT8_C(184), UINT8_C(231), UINT8_C(170), UINT8_C( 32), UINT8_C( 20),
        UINT8_C(129), UINT8_C(182), UINT8_C(109), UINT8_C(147), UINT8_C(182), UINT8_C( 25), UINT8_C(104), UINT8_C(178) },
      { UINT8_C( 25), UINT8_C( 75), UINT8_C(106), UINT8_C(147), UINT8_C(169), UINT8_C(193), UINT8_C( 53), UINT8_C( 45),
        UINT8_C( 22), UINT8_C(226), UINT8_C( 22), UINT8_C(222), UINT8_C(124), UINT8_C(165), UINT8_C( 80), UINT8_C( 59) } },
    { { UINT8_C(207), UINT8_C( 93), UINT8_C(141), UINT8_C(145), UINT8_C(116), UINT8_C(163), UINT8_C(170), UINT8_C( 10),
        UINT8_C(207), UINT8_C( 84), UINT8_C( 85), UINT8_C(149), UINT8_C(224), UINT8_C( 62), UINT8_C( 30), UINT8_C(254) },
      { UINT8_C(212), UINT8_C(148), UINT8_C(182), UINT8_C(187), UINT8_C( 62), UINT8_C(215), UINT8_C(208), UINT8_C(191),
        UINT8_C(141), UINT8_C( 61), UINT8_C( 83), UINT8_C( 68), UINT8_C( 87), UINT8_C(187), UINT8_C(246), UINT8_C( 38) },
      { UINT8_C(163), UINT8_C(241), UINT8_C( 67), UINT8_C( 76), UINT8_C(178), UINT8_C(122), UINT8_C(122), UINT8_C(201),
        UINT8_C( 92), UINT8_C(145), UINT8_C(168), UINT8_C(217), UINT8_C( 55), UINT8_C(249), UINT8_C( 20), UINT8_C( 36) } },
    { { UINT8_C( 24), UINT8_C(132), UINT8_C(183), UINT8_C(141), UINT8_C( 39), UINT8_C( 98), UINT8_C(151), UINT8_C(246),
        UINT8_C(182), UINT8_C(236), UINT8_C(139), UINT8_C(150), UINT8_C( 42), UINT8_C(169), UINT8_C(148),    UINT8_MAX },
      { UINT8_C( 61), UINT8_C( 75), UINT8_C(186), UINT8_C(124), UINT8_C( 34), UINT8_C(138), UINT8_C( 59), UINT8_C(175),
        UINT8_C(200), UINT8_C(142), UINT8_C(243), UINT8_C( 31), UINT8_C( 73), UINT8_C(234), UINT8_C( 69), UINT8_C( 98) },
      { UINT8_C( 85), UINT8_C(207), UINT8_C(113), UINT8_C(  9), UINT8_C( 73), UINT8_C(236), UINT8_C(210), UINT8_C(165),
        UINT8_C(126), UINT8_C(122), UINT8_C(126), UINT8_C(181), UINT8_C(115), UINT8_C(147), UINT8_C(217), UINT8_C( 97) } },
    { { UINT8_C(110), UINT8_C(252), UINT8_C(239), UINT8_C(149), UINT8_C( 94), UINT8_C(134), UINT8_C(139), UINT8_C( 20),
        UINT8_C(114), UINT8_C( 22), UINT8_C(171), UINT8_C(157), UINT8_C(191), UINT8_C( 63), UINT8_C(156), UINT8_C(253) },
      { UINT8_C(138), UINT8_C( 86), UINT8_C(121), UINT8_C(172), UINT8_C(225), UINT8_C(180), UINT8_C( 92), UINT8_C(169),
        UINT8_C( 67), UINT8_C( 79), UINT8_C(200), UINT8_C(140), UINT8_C( 57), UINT8_C( 13), UINT8_C(238), UINT8_C(167) },
      { UINT8_C(248), UINT8_C( 82), UINT8_C(104), UINT8_C( 65), UINT8_C( 63), UINT8_C( 58), UINT8_C(231), UINT8_C(189),
        UINT8_C(181), UINT8_C(101), UINT8_C(115), UINT8_C( 41), UINT8_C(248), UINT8_C( 76), UINT8_C(138), UINT8_C(164) } },
    { { UINT8_C(  9), UINT8_C(221), UINT8_C( 60), UINT8_C(104), UINT8_C( 99), UINT8_C(199), UINT8_C(124), UINT8_C(214),
        UINT8_C(221), UINT8_C( 39), UINT8_C(115), UINT8_C(157), UINT8_C(103), UINT8_C( 15), UINT8_C(154), UINT8_C(241) },
      { UINT8_C(101), UINT8_C( 19), UINT8_C(158), UINT8_C( 70), UINT8_C(199), UINT8_C(250), UINT8_C(239), UINT8_C( 10),
        UINT8_C( 73), UINT8_C(183), UINT8_C(151), UINT8_C(131), UINT8_C(196), UINT8_C(133), UINT8_C( 42), UINT8_C(206) },
      { UINT8_C(110), UINT8_C(240), UINT8_C(218), UINT8_C(174), UINT8_C( 42), UINT8_C(193), UINT8_C(107), UINT8_C(224),
        UINT8_C( 38), UINT8_C(222), UINT8_C( 10), UINT8_C( 32), UINT8_C( 43), UINT8_C(148), UINT8_C(196), UINT8_C(191) } }
  };

  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_vaddq_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_vaddq_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_vaddq_u16 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint16_t a[8];
    uint16_t b[8];
    uint16_t r[8];
  } test_vec[] = {
    { { UINT16_C(26467), UINT16_C(50742), UINT16_C(45614), UINT16_C( 3228), UINT16_C( 4058), UINT16_C(16809), UINT16_C(17182), UINT16_C(33842) },
      { UINT16_C(53334), UINT16_C( 7626), UINT16_C(47818), UINT16_C( 5160), UINT16_C(49009), UINT16_C(13975), UINT16_C(49476), UINT16_C(42756) },
      { UINT16_C(14265), UINT16_C(58368), UINT16_C(27896), UINT16_C( 8388), UINT16_C(53067), UINT16_C(30784), UINT16_C( 1122), UINT16_C(11062) } },
    { { UINT16_C(14888), UINT16_C(22382), UINT16_C( 2796), UINT16_C(50787), UINT16_C( 3098), UINT16_C(14343), UINT16_C(14927), UINT16_C(42428) },
      { UINT16_C(34570), UINT16_C(54722), UINT16_C(59969), UINT16_C(45801), UINT16_C(32937), UINT16_C(61160), UINT16_C(60481), UINT16_C(27285) },
      { UINT16_C(49458), UINT16_C(11568), UINT16_C(62765), UINT16_C(31052), UINT16_C(36035), UINT16_C( 9967), UINT16_C( 9872), UINT16_C( 4177) } },
    { { UINT16_C(  806), UINT16_C( 5057), UINT16_C( 9230), UINT16_C(10457), UINT16_C(57648), UINT16_C(32608), UINT16_C( 7451), UINT16_C( 9508) },
      { UINT16_C(59044), UINT16_C(58874), UINT16_C(58321), UINT16_C(31383), UINT16_C(32867), UINT16_C(42344), UINT16_C(65132), UINT16_C(37647) },
      { UINT16_C(59850), UINT16_C(63931), UINT16_C( 2015), UINT16_C(41840), UINT16_C(24979), UINT16_C( 9416), UINT16_C( 7047), UINT16_C(47155) } },
    { { UINT16_C(53249), UINT16_C( 4006), UINT16_C(32756), UINT16_C( 9271), UINT16_C(39008), UINT16_C(31651), UINT16_C(51125), UINT16_C(22945) },
      { UINT16_C(39853), UINT16_C(32318), UINT16_C(54655), UINT16_C(58105), UINT16_C(24917), UINT16_C(49799), UINT16_C(38495), UINT16_C(24917) },
      { UINT16_C(27566), UINT16_C(36324), UINT16_C(21875), UINT16_C( 1840), UINT16_C(63925), UINT16_C(15914), UINT16_C(24084), UINT16_C(47862) } },
    { { UINT16_C(64358), UINT16_C(23152), UINT16_C(43130), UINT16_C(56190), UINT16_C( 8512), UINT16_C(62806), UINT16_C(63464), UINT16_C(38478) },
      { UINT16_C(35987), UINT16_C( 4628), UINT16_C( 3425), UINT16_C(47092), UINT16_C(31855), UINT16_C(52857), UINT16_C(52754), UINT16_C(31023) },
      { UINT16_C(34809), UINT16_C(27780), UINT16_C(46555), UINT16_C(37746), UINT16_C(40367), UINT16_C(50127), UINT16_C(50682), UINT16_C( 3965) } },
    { { UINT16_C(41161), UINT16_C(17363), UINT16_C(21064), UINT16_C(34846), UINT16_C(30067), UINT16_C(23677), UINT16_C(52076), UINT16_C(65522) },
      { UINT16_C( 1623), UINT16_C(47121), UINT16_C( 1556), UINT16_C(33647), UINT16_C(59522), UINT16_C(37969), UINT16_C(33206), UINT16_C(32525) },
      { UINT16_C(42784), UINT16_C(64484), UINT16_C(22620), UINT16_C( 2957), UINT16_C(24053), UINT16_C(61646), UINT16_C(19746), UINT16_C(32511) } },
    { { UINT16_C(57633), UINT16_C(27075), UINT16_C(57651), UINT16_C(42737), UINT16_C(28246), UINT16_C(49922), UINT16_C(62521), UINT16_C(37058) },
      { UINT16_C(54523), UINT16_C( 3912), UINT16_C(47322), UINT16_C(23698), UINT16_C(58272), UINT16_C(22512), UINT16_C(65124), UINT16_C(34262) },
      { UINT16_C(46620), UINT16_C(30987), UINT16_C(39437), UINT16_C(  899), UINT16_C(20982), UINT16_C( 6898), UINT16_C(62109), UINT16_C( 5784) } },
    { { UINT16_C(39391), UINT16_C( 4846), UINT16_C(57211), UINT16_C(53688), UINT16_C(47949), UINT16_C(34452), UINT16_C(22447), UINT16_C(43542) },
      { UINT16_C(24363), UINT16_C( 1465), UINT16_C(19223), UINT16_C(46945), UINT16_C(20783), UINT16_C(37646), UINT16_C(58703), UINT16_C(11801) },
      { UINT16_C(63754), UINT16_C( 6311), UINT16_C(10898), UINT16_C(35097), UINT16_C( 3196), UINT16_C( 6562), UINT16_C(15614), UINT16_C(55343) } }
  };

  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_vaddq_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_vaddq_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_vaddq_u32 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint32_t a[4];
    uint32_t b[4];
    uint32_t r[4];
  } test_vec[] = {
    { { UINT32_C(4181723006), UINT32_C( 885783015), UINT32_C(1673224116), UINT32_C(3775844790) },
      { UINT32_C(1206306608), UINT32_C(1124026131), UINT32_C(3906276761), UINT32_C(1897393906) },
      { UINT32_C(1093062318), UINT32_C(2009809146), UINT32_C(1284533581), UINT32_C(1378271400) } },
    { { UINT32_C(3714734070), UINT32_C(  68236624), UINT32_C(1265159317), UINT32_C(3459085982) },
      { UINT32_C(1343623997), UINT32_C(4103214427), UINT32_C( 366766114), UINT32_C(1283912534) },
      { UINT32_C( 763390771), UINT32_C(4171451051), UINT32_C(1631925431), UINT32_C( 448031220) } },
    { { UINT32_C(2603216971), UINT32_C(3147840294), UINT32_C(2768635911), UINT32_C(3144954750) },
      { UINT32_C(2718730823), UINT32_C(3247873695), UINT32_C(1574334982), UINT32_C(2980666470) },
      { UINT32_C(1026980498), UINT32_C(2100746693), UINT32_C(  48003597), UINT32_C(1830653924) } },
    { { UINT32_C(1934414669), UINT32_C( 355396622), UINT32_C(1924871412), UINT32_C(2939039592) },
      { UINT32_C(1481718457), UINT32_C(3743016920), UINT32_C(3208441945), UINT32_C(2574312780) },
      { UINT32_C(3416133126), UINT32_C(4098413542), UINT32_C( 838346061), UINT32_C(1218385076) } },
    { { UINT32_C(3322723768), UINT32_C(2665233065), UINT32_C(3608188783), UINT32_C(2139504326) },
      { UINT32_C(1373099896), UINT32_C( 389083326), UINT32_C( 769092832), UINT32_C( 180766545) },
      { UINT32_C( 400856368), UINT32_C(3054316391), UINT32_C(  82314319), UINT32_C(2320270871) } },
    { { UINT32_C(2932921092), UINT32_C(2085399565), UINT32_C( 156458051), UINT32_C( 327735707) },
      { UINT32_C(1852071856), UINT32_C( 814126160), UINT32_C(1381850368), UINT32_C(2841388196) },
      { UINT32_C( 490025652), UINT32_C(2899525725), UINT32_C(1538308419), UINT32_C(3169123903) } },
    { { UINT32_C(  72822007), UINT32_C( 478258137), UINT32_C(2586236159), UINT32_C(1588506286) },
      { UINT32_C(1590497806), UINT32_C(2811122599), UINT32_C(1425665200), UINT32_C( 134042896) },
      { UINT32_C(1663319813), UINT32_C(3289380736), UINT32_C(4011901359), UINT32_C(1722549182) } },
    { { UINT32_C(1527469186), UINT32_C(4151807223), UINT32_C( 261201249), UINT32_C(1517109068) },
      { UINT32_C(4189600338), UINT32_C(1033913997), UINT32_C(1116903986), UINT32_C(1900646383) },
      { UINT32_C(1422102228), UINT32_C( 890753924), UINT32_C(1378105235), UINT32_C(3417755451) } }
  };

  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_vaddq_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_vaddq_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_vaddq_u64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    uint64_t a[2];
    uint64_t b[2];
    uint64_t r[2];
  } test_vec[] = {
    { { UINT64_C( 4814986688458413540), UINT64_C(17692320368709166305) },
      { UINT64_C(13313924206382956537), UINT64_C(14594553297499805225) },
      { UINT64_C(18128910894841370077), UINT64_C(13840129592499419914) } },
    { { UINT64_C( 8988473036196107929), UINT64_C(14372448548797616092) },
      { UINT64_C( 1994835094183764848), UINT64_C( 9807079594316311145) },
      { UINT64_C(10983308130379872777), UINT64_C( 5732784069404375621) } },
    { { UINT64_C( 1381409056111181588), UINT64_C( 8531232789823149263) },
      { UINT64_C( 3492853524787409771), UINT64_C( 9168371629288304069) },
      { UINT64_C( 4874262580898591359), UINT64_C(17699604419111453332) } },
    { { UINT64_C(14961619866231914328), UINT64_C(12081417531889038382) },
      { UINT64_C(17832984800169039493), UINT64_C(17011757792814168874) },
      { UINT64_C(14347860592691402205), UINT64_C(10646431250993655640) } },
    { { UINT64_C(14696404044792677158), UINT64_C(13201361342813856081) },
      { UINT64_C(16277837227336350142), UINT64_C(11455340474931777913) },
      { UINT64_C(12527497198419475684), UINT64_C( 6209957744036082378) } },
    { { UINT64_C(16372757905063310543), UINT64_C(11169953870697739545) },
      { UINT64_C(18335686276445570782), UINT64_C( 5051355942773124099) },
      { UINT64_C(16261700107799329709), UINT64_C(16221309813470863644) } },
    { { UINT64_C(12749384425783090810), UINT64_C(16328080845921083167) },
      { UINT64_C(10919518894275568390), UINT64_C( 1555480866372949464) },
      { UINT64_C( 5222159246349107584), UINT64_C(17883561712294032631) } },
    { { UINT64_C( 5859481300311754763), UINT64_C( 6004676323984625006) },
      { UINT64_C(10246929086205053448), UINT64_C( 9200137657917523965) },
      { UINT64_C(16106410386516808211), UINT64_C(15204813981902148971) } }
  };

  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_vaddq_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_vaddq_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_vadd_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(    33),  SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(    65),   SIMDE_POLY8_C(UINT8_MAX),
         SIMDE_POLY8_C(   235),  SIMDE_POLY8_C(   192),  SIMDE_POLY8_C(     0),  SIMDE_POLY8_C(    73) },
      {  SIMDE_POLY8_C(    25),  SIMDE_POLY8_C(    94),  SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(   201),
         SIMDE_POLY8_C(   180),  SIMDE_POLY8_C(    81),  SIMDE_POLY8_C(   101),  SIMDE_POLY8_C(    20) },
      {  SIMDE_POLY8_C(    56),  SIMDE_POLY8_C(     7),  SIMDE_POLY8_C(   169),  SIMDE_POLY8_C(    54),
         SIMDE_POLY8_C(    95),  SIMDE_POLY8_C(   145),  SIMDE_POLY8_C(   101),  SIMDE_POLY8_C(    93) } },
    { {  SIMDE_POLY8_C(   203),  SIMDE_POLY8_C(    54),  SIMDE_POLY8_C(    37),  SIMDE_POLY8_C(   215),
         SIMDE_POLY8_C(    48),  SIMDE_POLY8_C(    49),  SIMDE_POLY8_C(   215),  SIMDE_POLY8_C(   125) },
      {  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(    18),  SIMDE_POLY8_C(   157),  SIMDE_POLY8_C(   162),
         SIMDE_POLY8_C(   142),  SIMDE_POLY8_C(   137),  SIMDE_POLY8_C(    65),  SIMDE_POLY8_C(    82) },
      {  SIMDE_POLY8_C(   157),  SIMDE_POLY8_C(    36),  SIMDE_POLY8_C(   184),  SIMDE_POLY8_C(   117),
         SIMDE_POLY8_C(   190),  SIMDE_POLY8_C(   184),  SIMDE_POLY8_C(   150),  SIMDE_POLY8_C(    47) } },
    { {  SIMDE_POLY8_C(    21),  SIMDE_POLY8_C(   187),  SIMDE_POLY8_C(    38),  SIMDE_POLY8_C(    44),
         SIMDE_POLY8_C(   244),  SIMDE_POLY8_C(   227),  SIMDE_POLY8_C(    41),  SIMDE_POLY8_C(   143) },
      {  SIMDE_POLY8_C(    26),  SIMDE_POLY8_C(    49),  SIMDE_POLY8_C(    21),  SIMDE_POLY8_C(    51),
         SIMDE_POLY8_C(    62),  SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(   239),  SIMDE_POLY8_C(   245) },
      {  SIMDE_POLY8_C(    15),  SIMDE_POLY8_C(   138),  SIMDE_POLY8_C(    51),  SIMDE_POLY8_C(    31),
         SIMDE_POLY8_C(   202),  SIMDE_POLY8_C(   186),  SIMDE_POLY8_C(   198),  SIMDE_POLY8_C(   122) } },
    { {  SIMDE_POLY8_C(   220),  SIMDE_POLY8_C(    69),  SIMDE_POLY8_C(   146),  SIMDE_POLY8_C(    98),
         SIMDE_POLY8_C(    93),  SIMDE_POLY8_C(   157),  SIMDE_POLY8_C(    43),  SIMDE_POLY8_C(     3) },
      {  SIMDE_POLY8_C(    15),  SIMDE_POLY8_C(   164),  SIMDE_POLY8_C(   145),  SIMDE_POLY8_C(    17),
         SIMDE_POLY8_C(    79),  SIMDE_POLY8_C(   184),  SIMDE_POLY8_C(   183),  SIMDE_POLY8_C(   248) },
      {  SIMDE_POLY8_C(   211),  SIMDE_POLY8_C(   225),  SIMDE_POLY8_C(     3),  SIMDE_POLY8_C(   115),
         SIMDE_POLY8_C(    18),  SIMDE_POLY8_C(    37),  SIMDE_POLY8_C(   156),  SIMDE_POLY8_C(   251) } },
    { {  SIMDE_POLY8_C(   242),  SIMDE_POLY8_C(   176),  SIMDE_POLY8_C(    43),  SIMDE_POLY8_C(   252),
         SIMDE_POLY8_C(    83),  SIMDE_POLY8_C(   192),  SIMDE_POLY8_C(    10),  SIMDE_POLY8_C(    94) },
      {  SIMDE_POLY8_C(   164),  SIMDE_POLY8_C(    37),  SIMDE_POLY8_C(    28),  SIMDE_POLY8_C(   125),
         SIMDE_POLY8_C(    83),  SIMDE_POLY8_C(   113),  SIMDE_POLY8_C(    53),  SIMDE_POLY8_C(   107) },
      {  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(   149),  SIMDE_POLY8_C(    55),  SIMDE_POLY8_C(   129),
         SIMDE_POLY8_C(     0),  SIMDE_POLY8_C(   177),  SIMDE_POLY8_C(    63),  SIMDE_POLY8_C(    53) } },
    { {  SIMDE_POLY8_C(   160),  SIMDE_POLY8_C(    56),  SIMDE_POLY8_C(     3),  SIMDE_POLY8_C(   140),
         SIMDE_POLY8_C(   203),  SIMDE_POLY8_C(   118),  SIMDE_POLY8_C(    12),  SIMDE_POLY8_C(   161) },
      {  SIMDE_POLY8_C(   143),  SIMDE_POLY8_C(   147),  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(    58),
         SIMDE_POLY8_C(    18),  SIMDE_POLY8_C(    43),  SIMDE_POLY8_C(   207),  SIMDE_POLY8_C(    59) },
      {  SIMDE_POLY8_C(    47),  SIMDE_POLY8_C(   171),  SIMDE_POLY8_C(    85),  SIMDE_POLY8_C(   182),
         SIMDE_POLY8_C(   217),  SIMDE_POLY8_C(    93),  SIMDE_POLY8_C(   195),  SIMDE_POLY8_C(   154) } },
    { {  SIMDE_POLY8_C(   254),  SIMDE_POLY8_C(   216),  SIMDE_POLY8_C(    73),  SIMDE_POLY8_C(    92),
         SIMDE_POLY8_C(    97),  SIMDE_POLY8_C(   150),  SIMDE_POLY8_C(    94),  SIMDE_POLY8_C(    23) },
      {  SIMDE_POLY8_C(   163),  SIMDE_POLY8_C(   109),  SIMDE_POLY8_C(    74),  SIMDE_POLY8_C(    17),
         SIMDE_POLY8_C(   191),  SIMDE_POLY8_C(    61),  SIMDE_POLY8_C(   103),  SIMDE_POLY8_C(   222) },
      {  SIMDE_POLY8_C(    93),  SIMDE_POLY8_C(   181),  SIMDE_POLY8_C(     3),  SIMDE_POLY8_C(    77),
         SIMDE_POLY8_C(   222),  SIMDE_POLY8_C(   171),  SIMDE_POLY8_C(    57),  SIMDE_POLY8_C(   201) } },
    { {  SIMDE_POLY8_C(   123),  SIMDE_POLY8_C(   246),  SIMDE_POLY8_C(   196),  SIMDE_POLY8_C(   141),
         SIMDE_POLY8_C(    19),  SIMDE_POLY8_C(   187),  SIMDE_POLY8_C(    73),  SIMDE_POLY8_C(    60) },
      {  SIMDE_POLY8_C(   198),  SIMDE_POLY8_C(    47),  SIMDE_POLY8_C(   111),  SIMDE_POLY8_C(   219),
         SIMDE_POLY8_C(    25),  SIMDE_POLY8_C(    76),  SIMDE_POLY8_C(   209),  SIMDE_POLY8_C(   241) },
      {  SIMDE_POLY8_C(   189),  SIMDE_POLY8_C(   217),  SIMDE_POLY8_C(   171),  SIMDE_POLY8_C(    86),
         SIMDE_POLY8_C(    10),  SIMDE_POLY8_C(   247),  SIMDE_POLY8_C(   152),  SIMDE_POLY8_C(   205) } },
  };

  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_vadd_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_vadd_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_vadd_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(   44848),  SIMDE_POLY16_C(   25263),  SIMDE_POLY16_C(   56185),  SIMDE_POLY16_C(   46842) },
      {  SIMDE_POLY16_C(   44027),  SIMDE_POLY16_C(   18055),  SIMDE_POLY16_C(   46799),  SIMDE_POLY16_C(   11694) },
      {  SIMDE_POLY16_C(    1227),  SIMDE_POLY16_C(    9256),  SIMDE_POLY16_C(   28086),  SIMDE_POLY16_C(   39764) } },
    { {  SIMDE_POLY16_C(    8719),  SIMDE_POLY16_C(   48304),  SIMDE_POLY16_C(   50563),  SIMDE_POLY16_C(   33590) },
      {  SIMDE_POLY16_C(   60253),  SIMDE_POLY16_C(    9950),  SIMDE_POLY16_C(    7334),  SIMDE_POLY16_C(    1265) },
      {  SIMDE_POLY16_C(   51538),  SIMDE_POLY16_C(   39534),  SIMDE_POLY16_C(   55589),  SIMDE_POLY16_C(   34759) } },
    { {  SIMDE_POLY16_C(    2519),  SIMDE_POLY16_C(   32880),  SIMDE_POLY16_C(   38511),  SIMDE_POLY16_C(   13749) },
      {  SIMDE_POLY16_C(    5160),  SIMDE_POLY16_C(    5666),  SIMDE_POLY16_C(   41636),  SIMDE_POLY16_C(   48481) },
      {  SIMDE_POLY16_C(    7679),  SIMDE_POLY16_C(   38482),  SIMDE_POLY16_C(   13515),  SIMDE_POLY16_C(   35028) } },
    { {  SIMDE_POLY16_C(   50014),  SIMDE_POLY16_C(   24511),  SIMDE_POLY16_C(   50497),  SIMDE_POLY16_C(    7370) },
      {  SIMDE_POLY16_C(   38152),  SIMDE_POLY16_C(   23612),  SIMDE_POLY16_C(    5758),  SIMDE_POLY16_C(   53290) },
      {  SIMDE_POLY16_C(   22102),  SIMDE_POLY16_C(     899),  SIMDE_POLY16_C(   54079),  SIMDE_POLY16_C(   52448) } },
    { {  SIMDE_POLY16_C(   18670),  SIMDE_POLY16_C(   22782),  SIMDE_POLY16_C(   17120),  SIMDE_POLY16_C(     154) },
      {  SIMDE_POLY16_C(   22181),  SIMDE_POLY16_C(   26233),  SIMDE_POLY16_C(   26407),  SIMDE_POLY16_C(   43106) },
      {  SIMDE_POLY16_C(    7755),  SIMDE_POLY16_C(   16007),  SIMDE_POLY16_C(    9671),  SIMDE_POLY16_C(   43256) } },
    { {  SIMDE_POLY16_C(   59179),  SIMDE_POLY16_C(   13001),  SIMDE_POLY16_C(   20645),  SIMDE_POLY16_C(   16746) },
      {  SIMDE_POLY16_C(   51036),  SIMDE_POLY16_C(    1807),  SIMDE_POLY16_C(   20983),  SIMDE_POLY16_C(   12864) },
      {  SIMDE_POLY16_C(    8311),  SIMDE_POLY16_C(   13766),  SIMDE_POLY16_C(     338),  SIMDE_POLY16_C(   29482) } },
    { {  SIMDE_POLY16_C(   31092),  SIMDE_POLY16_C(    3280),  SIMDE_POLY16_C(   57691),  SIMDE_POLY16_C(   47474) },
      {  SIMDE_POLY16_C(   10673),  SIMDE_POLY16_C(   45266),  SIMDE_POLY16_C(   22429),  SIMDE_POLY16_C(     982) },
      {  SIMDE_POLY16_C(   20677),  SIMDE_POLY16_C(   48130),  SIMDE_POLY16_C(   46790),  SIMDE_POLY16_C(   47780) } },
    { {  SIMDE_POLY16_C(    4312),  SIMDE_POLY16_C(   27352),  SIMDE_POLY16_C(   38240),  SIMDE_POLY16_C(   43915) },
      {  SIMDE_POLY16_C(   33894),  SIMDE_POLY16_C(   36255),  SIMDE_POLY16_C(   63975),  SIMDE_POLY16_C(   29690) },
      {  SIMDE_POLY16_C(   38078),  SIMDE_POLY16_C(   59207),  SIMDE_POLY16_C(   27783),  SIMDE_POLY16_C(   55409) } },
  };

  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_vadd_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_vadd_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_vadd_p64 (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  struct {
    simde_poly64_t a[1];
    simde_poly64_t b[1];
    simde_poly64_t r[1];
  } test_vec[] = {
    { {  SIMDE_POLY64_C( 3371335337828377088) },
      {  SIMDE_POLY64_C(12072491326839767040) },
      {  SIMDE_POLY64_C( 9890882550602113536) } },
    { {  SIMDE_POLY64_C( 7391217391159827456) },
      {  SIMDE_POLY64_C(14364238106192646144) },
      {  SIMDE_POLY64_C(11658385110758804480) } },
    { {  SIMDE_POLY64_C( 7185530110704550912) },
      {  SIMDE_POLY64_C(13334676289916868608) },
      {  SIMDE_POLY64_C(15759899394016189440) } },
    { {  SIMDE_POLY64_C(14658100389548275712) },
      {  SIMDE_POLY64_C( 8650644509209679872) },
      {  SIMDE_POLY64_C(12925695957284839424) } },
    { {  SIMDE_POLY64_C(13960778482633791488) },
      {  SIMDE_POLY64_C( 3177382435778182656) },
      {  SIMDE_POLY64_C(17124641185996105216) } },
    { {  SIMDE_POLY64_C(17643760670330423296) },
      {  SIMDE_POLY64_C( 5279972151414581248) },
      {  SIMDE_POLY64_C(13663077304678014976) } },
    { {  SIMDE_POLY64_C( 4484919111408053760) },
      {  SIMDE_POLY64_C(10973306597402818560) },
      {  SIMDE_POLY64_C(11994394352764016128) } },
    { {  SIMDE_POLY64_C( 5962163531225644032) },
      {  SIMDE_POLY64_C( 3448187585791362048) },
      {  SIMDE_POLY64_C( 9036385187482548224) } },
  };

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

    simde_test_arm_neon_assert_equal_p64x1(r, simde_vld1_p64(test_vec[i].r));
  }

  return 0;

#else
  fputc('\n', stdout);
  for (int i = 0 ; i < 8 ; i++) {
    simde_poly64x1_t a = simde_test_arm_neon_random_p64x1();
    simde_poly64x1_t b = simde_test_arm_neon_random_p64x1();
    simde_poly64x1_t r = simde_vadd_p64(a, b);

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

static int
test_simde_vaddq_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(   183),  SIMDE_POLY8_C(   135),  SIMDE_POLY8_C(   110),  SIMDE_POLY8_C(   124),
         SIMDE_POLY8_C(   225),  SIMDE_POLY8_C(     5),  SIMDE_POLY8_C(   160),  SIMDE_POLY8_C(   204),
         SIMDE_POLY8_C(   245),  SIMDE_POLY8_C(   117),  SIMDE_POLY8_C(   197),  SIMDE_POLY8_C(   253),
         SIMDE_POLY8_C(   126),  SIMDE_POLY8_C(   228),  SIMDE_POLY8_C(    66),  SIMDE_POLY8_C(   129) },
      {  SIMDE_POLY8_C(   114),  SIMDE_POLY8_C(   189),  SIMDE_POLY8_C(    15),  SIMDE_POLY8_C(   245),
         SIMDE_POLY8_C(   224),  SIMDE_POLY8_C(    15),  SIMDE_POLY8_C(    78),  SIMDE_POLY8_C(   192),
         SIMDE_POLY8_C(   225),  SIMDE_POLY8_C(   118),  SIMDE_POLY8_C(   151),  SIMDE_POLY8_C(   125),
         SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(   102),  SIMDE_POLY8_C(   211),  SIMDE_POLY8_C(   139) },
      {  SIMDE_POLY8_C(   197),  SIMDE_POLY8_C(    58),  SIMDE_POLY8_C(    97),  SIMDE_POLY8_C(   137),
         SIMDE_POLY8_C(     1),  SIMDE_POLY8_C(    10),  SIMDE_POLY8_C(   238),  SIMDE_POLY8_C(    12),
         SIMDE_POLY8_C(    20),  SIMDE_POLY8_C(     3),  SIMDE_POLY8_C(    82),  SIMDE_POLY8_C(   128),
         SIMDE_POLY8_C(    39),  SIMDE_POLY8_C(   130),  SIMDE_POLY8_C(   145),  SIMDE_POLY8_C(    10) } },
    { {  SIMDE_POLY8_C(   134),  SIMDE_POLY8_C(    58),  SIMDE_POLY8_C(   144),  SIMDE_POLY8_C(    25),
         SIMDE_POLY8_C(     2),  SIMDE_POLY8_C(   121),  SIMDE_POLY8_C(    33),  SIMDE_POLY8_C(   156),
         SIMDE_POLY8_C(   174),  SIMDE_POLY8_C(   122),  SIMDE_POLY8_C(   136),  SIMDE_POLY8_C(   115),
         SIMDE_POLY8_C(   193),  SIMDE_POLY8_C(   100),  SIMDE_POLY8_C(   111),  SIMDE_POLY8_C(   242) },
      {  SIMDE_POLY8_C(   119),  SIMDE_POLY8_C(    31),  SIMDE_POLY8_C(    72),  SIMDE_POLY8_C(    61),
         SIMDE_POLY8_C(   214),  SIMDE_POLY8_C(    42),  SIMDE_POLY8_C(   121),  SIMDE_POLY8_C(   230),
         SIMDE_POLY8_C(    81),  SIMDE_POLY8_C(   108),  SIMDE_POLY8_C(    95),  SIMDE_POLY8_C(    51),
         SIMDE_POLY8_C(   169),  SIMDE_POLY8_C(   238),  SIMDE_POLY8_C(    74),  SIMDE_POLY8_C(     2) },
      {  SIMDE_POLY8_C(   241),  SIMDE_POLY8_C(    37),  SIMDE_POLY8_C(   216),  SIMDE_POLY8_C(    36),
         SIMDE_POLY8_C(   212),  SIMDE_POLY8_C(    83),  SIMDE_POLY8_C(    88),  SIMDE_POLY8_C(   122),
          SIMDE_POLY8_C(UINT8_MAX),  SIMDE_POLY8_C(    22),  SIMDE_POLY8_C(   215),  SIMDE_POLY8_C(    64),
         SIMDE_POLY8_C(   104),  SIMDE_POLY8_C(   138),  SIMDE_POLY8_C(    37),  SIMDE_POLY8_C(   240) } },
    { {  SIMDE_POLY8_C(   226),  SIMDE_POLY8_C(   177),  SIMDE_POLY8_C(   249),  SIMDE_POLY8_C(   120),
         SIMDE_POLY8_C(   247),  SIMDE_POLY8_C(    21),  SIMDE_POLY8_C(   122),  SIMDE_POLY8_C(   178),
         SIMDE_POLY8_C(    88),  SIMDE_POLY8_C(   123),  SIMDE_POLY8_C(   170),  SIMDE_POLY8_C(   163),
         SIMDE_POLY8_C(    52),  SIMDE_POLY8_C(   202),  SIMDE_POLY8_C(    64),  SIMDE_POLY8_C(    89) },
      {  SIMDE_POLY8_C(   150),  SIMDE_POLY8_C(   155),  SIMDE_POLY8_C(   150),  SIMDE_POLY8_C(   164),
         SIMDE_POLY8_C(   195),  SIMDE_POLY8_C(   220),  SIMDE_POLY8_C(   131),  SIMDE_POLY8_C(   166),
         SIMDE_POLY8_C(   103),  SIMDE_POLY8_C(    60),  SIMDE_POLY8_C(    53),  SIMDE_POLY8_C(   207),
         SIMDE_POLY8_C(   154),  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(   136),  SIMDE_POLY8_C(   165) },
      {  SIMDE_POLY8_C(   116),  SIMDE_POLY8_C(    42),  SIMDE_POLY8_C(   111),  SIMDE_POLY8_C(   220),
         SIMDE_POLY8_C(    52),  SIMDE_POLY8_C(   201),  SIMDE_POLY8_C(   249),  SIMDE_POLY8_C(    20),
         SIMDE_POLY8_C(    63),  SIMDE_POLY8_C(    71),  SIMDE_POLY8_C(   159),  SIMDE_POLY8_C(   108),
         SIMDE_POLY8_C(   174),  SIMDE_POLY8_C(   156),  SIMDE_POLY8_C(   200),  SIMDE_POLY8_C(   252) } },
    { {  SIMDE_POLY8_C(   152),  SIMDE_POLY8_C(    82),  SIMDE_POLY8_C(   253),  SIMDE_POLY8_C(    41),
         SIMDE_POLY8_C(   184),  SIMDE_POLY8_C(    68),  SIMDE_POLY8_C(   145),  SIMDE_POLY8_C(    63),
         SIMDE_POLY8_C(   227),  SIMDE_POLY8_C(   104),  SIMDE_POLY8_C(    58),  SIMDE_POLY8_C(    82),
         SIMDE_POLY8_C(   151),  SIMDE_POLY8_C(    47),  SIMDE_POLY8_C(   253),  SIMDE_POLY8_C(   159) },
      {  SIMDE_POLY8_C(   139),  SIMDE_POLY8_C(   114),  SIMDE_POLY8_C(   164),  SIMDE_POLY8_C(   224),
         SIMDE_POLY8_C(    14),  SIMDE_POLY8_C(    94),  SIMDE_POLY8_C(   190),  SIMDE_POLY8_C(   125),
         SIMDE_POLY8_C(    56),  SIMDE_POLY8_C(   102),  SIMDE_POLY8_C(   251),  SIMDE_POLY8_C(   198),
         SIMDE_POLY8_C(   206),  SIMDE_POLY8_C(   147),  SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(    30) },
      {  SIMDE_POLY8_C(    19),  SIMDE_POLY8_C(    32),  SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(   201),
         SIMDE_POLY8_C(   182),  SIMDE_POLY8_C(    26),  SIMDE_POLY8_C(    47),  SIMDE_POLY8_C(    66),
         SIMDE_POLY8_C(   219),  SIMDE_POLY8_C(    14),  SIMDE_POLY8_C(   193),  SIMDE_POLY8_C(   148),
         SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(   188),  SIMDE_POLY8_C(    21),  SIMDE_POLY8_C(   129) } },
    { {  SIMDE_POLY8_C(    76),  SIMDE_POLY8_C(    14),  SIMDE_POLY8_C(   145),  SIMDE_POLY8_C(    56),
         SIMDE_POLY8_C(   227),  SIMDE_POLY8_C(   143),  SIMDE_POLY8_C(   170),  SIMDE_POLY8_C(   207),
         SIMDE_POLY8_C(   100),  SIMDE_POLY8_C(   181),  SIMDE_POLY8_C(   157),  SIMDE_POLY8_C(   196),
         SIMDE_POLY8_C(   243),  SIMDE_POLY8_C(   196),  SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(    24) },
      {  SIMDE_POLY8_C(    17),  SIMDE_POLY8_C(   179),  SIMDE_POLY8_C(    80),  SIMDE_POLY8_C(    20),
         SIMDE_POLY8_C(    75),  SIMDE_POLY8_C(    83),  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(   177),
         SIMDE_POLY8_C(   156),  SIMDE_POLY8_C(   204),  SIMDE_POLY8_C(   101),  SIMDE_POLY8_C(    83),
         SIMDE_POLY8_C(   253),  SIMDE_POLY8_C(   159),  SIMDE_POLY8_C(   207),  SIMDE_POLY8_C(   194) },
      {  SIMDE_POLY8_C(    93),  SIMDE_POLY8_C(   189),  SIMDE_POLY8_C(   193),  SIMDE_POLY8_C(    44),
         SIMDE_POLY8_C(   168),  SIMDE_POLY8_C(   220),  SIMDE_POLY8_C(   252),  SIMDE_POLY8_C(   126),
         SIMDE_POLY8_C(   248),  SIMDE_POLY8_C(   121),  SIMDE_POLY8_C(   248),  SIMDE_POLY8_C(   151),
         SIMDE_POLY8_C(    14),  SIMDE_POLY8_C(    91),  SIMDE_POLY8_C(    39),  SIMDE_POLY8_C(   218) } },
    { {  SIMDE_POLY8_C(    67),  SIMDE_POLY8_C(   237),  SIMDE_POLY8_C(   135),  SIMDE_POLY8_C(   108),
         SIMDE_POLY8_C(   113),  SIMDE_POLY8_C(   245),  SIMDE_POLY8_C(    81),  SIMDE_POLY8_C(   167),
         SIMDE_POLY8_C(    51),  SIMDE_POLY8_C(    62),  SIMDE_POLY8_C(   120),  SIMDE_POLY8_C(    93),
         SIMDE_POLY8_C(   209),  SIMDE_POLY8_C(   219),  SIMDE_POLY8_C(   165),  SIMDE_POLY8_C(   180) },
      {  SIMDE_POLY8_C(   126),  SIMDE_POLY8_C(   180),  SIMDE_POLY8_C(   202),  SIMDE_POLY8_C(    28),
         SIMDE_POLY8_C(   150),  SIMDE_POLY8_C(    60),  SIMDE_POLY8_C(   141),  SIMDE_POLY8_C(   131),
         SIMDE_POLY8_C(   219),  SIMDE_POLY8_C(     8),  SIMDE_POLY8_C(   187),  SIMDE_POLY8_C(   217),
         SIMDE_POLY8_C(   139),  SIMDE_POLY8_C(   209),  SIMDE_POLY8_C(   210),  SIMDE_POLY8_C(   129) },
      {  SIMDE_POLY8_C(    61),  SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(    77),  SIMDE_POLY8_C(   112),
         SIMDE_POLY8_C(   231),  SIMDE_POLY8_C(   201),  SIMDE_POLY8_C(   220),  SIMDE_POLY8_C(    36),
         SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(    54),  SIMDE_POLY8_C(   195),  SIMDE_POLY8_C(   132),
         SIMDE_POLY8_C(    90),  SIMDE_POLY8_C(    10),  SIMDE_POLY8_C(   119),  SIMDE_POLY8_C(    53) } },
    { {  SIMDE_POLY8_C(   107),  SIMDE_POLY8_C(   204),  SIMDE_POLY8_C(   116),  SIMDE_POLY8_C(   184),
         SIMDE_POLY8_C(   201),  SIMDE_POLY8_C(    38),  SIMDE_POLY8_C(    48),  SIMDE_POLY8_C(    21),
         SIMDE_POLY8_C(   249),  SIMDE_POLY8_C(    40),  SIMDE_POLY8_C(    15),  SIMDE_POLY8_C(    40),
         SIMDE_POLY8_C(   194),  SIMDE_POLY8_C(    98),  SIMDE_POLY8_C(    66),  SIMDE_POLY8_C(    87) },
      {  SIMDE_POLY8_C(   116),  SIMDE_POLY8_C(   160),  SIMDE_POLY8_C(   184),  SIMDE_POLY8_C(   140),
         SIMDE_POLY8_C(   245),  SIMDE_POLY8_C(   116),  SIMDE_POLY8_C(   248),  SIMDE_POLY8_C(    28),
         SIMDE_POLY8_C(   229),  SIMDE_POLY8_C(   103),  SIMDE_POLY8_C(   171),  SIMDE_POLY8_C(    21),
         SIMDE_POLY8_C(   155),  SIMDE_POLY8_C(     8),  SIMDE_POLY8_C(    20),  SIMDE_POLY8_C(    78) },
      {  SIMDE_POLY8_C(    31),  SIMDE_POLY8_C(   108),  SIMDE_POLY8_C(   204),  SIMDE_POLY8_C(    52),
         SIMDE_POLY8_C(    60),  SIMDE_POLY8_C(    82),  SIMDE_POLY8_C(   200),  SIMDE_POLY8_C(     9),
         SIMDE_POLY8_C(    28),  SIMDE_POLY8_C(    79),  SIMDE_POLY8_C(   164),  SIMDE_POLY8_C(    61),
         SIMDE_POLY8_C(    89),  SIMDE_POLY8_C(   106),  SIMDE_POLY8_C(    86),  SIMDE_POLY8_C(    25) } },
    { {  SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(   223),  SIMDE_POLY8_C(   159),  SIMDE_POLY8_C(   209),
         SIMDE_POLY8_C(     5),  SIMDE_POLY8_C(   217),  SIMDE_POLY8_C(   123),  SIMDE_POLY8_C(   236),
         SIMDE_POLY8_C(   111),  SIMDE_POLY8_C(    90),  SIMDE_POLY8_C(   147),  SIMDE_POLY8_C(   137),
         SIMDE_POLY8_C(   213),  SIMDE_POLY8_C(   252),  SIMDE_POLY8_C(    94),  SIMDE_POLY8_C(    55) },
      {  SIMDE_POLY8_C(   104),  SIMDE_POLY8_C(   232),  SIMDE_POLY8_C(    62),  SIMDE_POLY8_C(   153),
         SIMDE_POLY8_C(   211),  SIMDE_POLY8_C(   147),  SIMDE_POLY8_C(   128),  SIMDE_POLY8_C(    39),
         SIMDE_POLY8_C(   118),  SIMDE_POLY8_C(   183),  SIMDE_POLY8_C(   196),  SIMDE_POLY8_C(   140),
         SIMDE_POLY8_C(   213),  SIMDE_POLY8_C(   180),  SIMDE_POLY8_C(   247),  SIMDE_POLY8_C(   120) },
      {  SIMDE_POLY8_C(   128),  SIMDE_POLY8_C(    55),  SIMDE_POLY8_C(   161),  SIMDE_POLY8_C(    72),
         SIMDE_POLY8_C(   214),  SIMDE_POLY8_C(    74),  SIMDE_POLY8_C(   251),  SIMDE_POLY8_C(   203),
         SIMDE_POLY8_C(    25),  SIMDE_POLY8_C(   237),  SIMDE_POLY8_C(    87),  SIMDE_POLY8_C(     5),
         SIMDE_POLY8_C(     0),  SIMDE_POLY8_C(    72),  SIMDE_POLY8_C(   169),  SIMDE_POLY8_C(    79) } },
  };

  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_vaddq_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_vaddq_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_vaddq_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(   17947),  SIMDE_POLY16_C(   59627),  SIMDE_POLY16_C(   13747),  SIMDE_POLY16_C(   60214),
         SIMDE_POLY16_C(   25527),  SIMDE_POLY16_C(   22465),  SIMDE_POLY16_C(   31008),  SIMDE_POLY16_C(   55276) },
      {  SIMDE_POLY16_C(   12643),  SIMDE_POLY16_C(   57634),  SIMDE_POLY16_C(   10112),  SIMDE_POLY16_C(   31417),
         SIMDE_POLY16_C(   43720),  SIMDE_POLY16_C(   57721),  SIMDE_POLY16_C(    6164),  SIMDE_POLY16_C(    3722) },
      {  SIMDE_POLY16_C(   30584),  SIMDE_POLY16_C(    2505),  SIMDE_POLY16_C(    4659),  SIMDE_POLY16_C(   37263),
         SIMDE_POLY16_C(   51583),  SIMDE_POLY16_C(   46776),  SIMDE_POLY16_C(   24884),  SIMDE_POLY16_C(   55654) } },
    { {  SIMDE_POLY16_C(   25610),  SIMDE_POLY16_C(   33945),  SIMDE_POLY16_C(   65012),  SIMDE_POLY16_C(   27880),
         SIMDE_POLY16_C(   48429),  SIMDE_POLY16_C(   44309),  SIMDE_POLY16_C(    7727),  SIMDE_POLY16_C(   18394) },
      {  SIMDE_POLY16_C(    4010),  SIMDE_POLY16_C(   19605),  SIMDE_POLY16_C(     646),  SIMDE_POLY16_C(    6945),
         SIMDE_POLY16_C(   24159),  SIMDE_POLY16_C(    5559),  SIMDE_POLY16_C(   15091),  SIMDE_POLY16_C(    4641) },
      {  SIMDE_POLY16_C(   27552),  SIMDE_POLY16_C(   51212),  SIMDE_POLY16_C(   65394),  SIMDE_POLY16_C(   30665),
         SIMDE_POLY16_C(   58226),  SIMDE_POLY16_C(   47266),  SIMDE_POLY16_C(    9436),  SIMDE_POLY16_C(   22011) } },
    { {  SIMDE_POLY16_C(   60692),  SIMDE_POLY16_C(   33785),  SIMDE_POLY16_C(   19384),  SIMDE_POLY16_C(   14821),
         SIMDE_POLY16_C(   40380),  SIMDE_POLY16_C(   19087),  SIMDE_POLY16_C(    8114),  SIMDE_POLY16_C(   36709) },
      {  SIMDE_POLY16_C(   36514),  SIMDE_POLY16_C(   33408),  SIMDE_POLY16_C(   63224),  SIMDE_POLY16_C(   29645),
         SIMDE_POLY16_C(   15041),  SIMDE_POLY16_C(   36757),  SIMDE_POLY16_C(   42027),  SIMDE_POLY16_C(   36016) },
      {  SIMDE_POLY16_C(   25526),  SIMDE_POLY16_C(     377),  SIMDE_POLY16_C(   48448),  SIMDE_POLY16_C(   18984),
         SIMDE_POLY16_C(   42877),  SIMDE_POLY16_C(   50458),  SIMDE_POLY16_C(   48025),  SIMDE_POLY16_C(     981) } },
    { {  SIMDE_POLY16_C(   18141),  SIMDE_POLY16_C(   45065),  SIMDE_POLY16_C(   60606),  SIMDE_POLY16_C(   11849),
         SIMDE_POLY16_C(   46718),  SIMDE_POLY16_C(    3530),  SIMDE_POLY16_C(   42939),  SIMDE_POLY16_C(   55698) },
      {  SIMDE_POLY16_C(   44681),  SIMDE_POLY16_C(   12139),  SIMDE_POLY16_C(   52114),  SIMDE_POLY16_C(   21680),
         SIMDE_POLY16_C(   44059),  SIMDE_POLY16_C(   27972),  SIMDE_POLY16_C(    7574),  SIMDE_POLY16_C(   15409) },
      {  SIMDE_POLY16_C(   59476),  SIMDE_POLY16_C(   40802),  SIMDE_POLY16_C(   10028),  SIMDE_POLY16_C(   31481),
         SIMDE_POLY16_C(    6757),  SIMDE_POLY16_C(   24718),  SIMDE_POLY16_C(   47661),  SIMDE_POLY16_C(   58787) } },
    { {  SIMDE_POLY16_C(   57331),  SIMDE_POLY16_C(   62493),  SIMDE_POLY16_C(    2414),  SIMDE_POLY16_C(   51609),
         SIMDE_POLY16_C(   56885),  SIMDE_POLY16_C(   15440),  SIMDE_POLY16_C(   30921),  SIMDE_POLY16_C(   57628) },
      {  SIMDE_POLY16_C(   55460),  SIMDE_POLY16_C(   62933),  SIMDE_POLY16_C(   30562),  SIMDE_POLY16_C(   64038),
         SIMDE_POLY16_C(   17558),  SIMDE_POLY16_C(    4700),  SIMDE_POLY16_C(    4199),  SIMDE_POLY16_C(   48364) },
      {  SIMDE_POLY16_C(    1879),  SIMDE_POLY16_C(     456),  SIMDE_POLY16_C(   32268),  SIMDE_POLY16_C(   13247),
         SIMDE_POLY16_C(   39587),  SIMDE_POLY16_C(   11788),  SIMDE_POLY16_C(   26798),  SIMDE_POLY16_C(   24048) } },
    { {  SIMDE_POLY16_C(    1786),  SIMDE_POLY16_C(   24136),  SIMDE_POLY16_C(   32584),  SIMDE_POLY16_C(   43856),
         SIMDE_POLY16_C(   38344),  SIMDE_POLY16_C(   50712),  SIMDE_POLY16_C(   34231),  SIMDE_POLY16_C(   25688) },
      {  SIMDE_POLY16_C(   49017),  SIMDE_POLY16_C(    9948),  SIMDE_POLY16_C(   18165),  SIMDE_POLY16_C(   13402),
         SIMDE_POLY16_C(   58881),  SIMDE_POLY16_C(    3005),  SIMDE_POLY16_C(   11265),  SIMDE_POLY16_C(   52715) },
      {  SIMDE_POLY16_C(   47491),  SIMDE_POLY16_C(   30868),  SIMDE_POLY16_C(   14781),  SIMDE_POLY16_C(   40714),
         SIMDE_POLY16_C(   29641),  SIMDE_POLY16_C(   52645),  SIMDE_POLY16_C(   43446),  SIMDE_POLY16_C(   43443) } },
    { {  SIMDE_POLY16_C(   36514),  SIMDE_POLY16_C(   40641),  SIMDE_POLY16_C(   48435),  SIMDE_POLY16_C(   64823),
         SIMDE_POLY16_C(   28799),  SIMDE_POLY16_C(   23113),  SIMDE_POLY16_C(   15829),  SIMDE_POLY16_C(   57863) },
      {  SIMDE_POLY16_C(   57839),  SIMDE_POLY16_C(   56275),  SIMDE_POLY16_C(   27049),  SIMDE_POLY16_C(   15419),
         SIMDE_POLY16_C(    6369),  SIMDE_POLY16_C(   64017),  SIMDE_POLY16_C(   14409),  SIMDE_POLY16_C(   65103) },
      {  SIMDE_POLY16_C(   28493),  SIMDE_POLY16_C(   17682),  SIMDE_POLY16_C(   54426),  SIMDE_POLY16_C(   49420),
         SIMDE_POLY16_C(   26782),  SIMDE_POLY16_C(   41048),  SIMDE_POLY16_C(    1436),  SIMDE_POLY16_C(    7240) } },
    { {  SIMDE_POLY16_C(   37116),  SIMDE_POLY16_C(   54232),  SIMDE_POLY16_C(    8172),  SIMDE_POLY16_C(   65515),
         SIMDE_POLY16_C(   19328),  SIMDE_POLY16_C(   45577),  SIMDE_POLY16_C(   49944),  SIMDE_POLY16_C(   63864) },
      {  SIMDE_POLY16_C(   31664),  SIMDE_POLY16_C(   53471),  SIMDE_POLY16_C(   46798),  SIMDE_POLY16_C(   32140),
         SIMDE_POLY16_C(   22511),  SIMDE_POLY16_C(   18434),  SIMDE_POLY16_C(   35100),  SIMDE_POLY16_C(   22561) },
      {  SIMDE_POLY16_C(   60236),  SIMDE_POLY16_C(     775),  SIMDE_POLY16_C(   43298),  SIMDE_POLY16_C(   33383),
         SIMDE_POLY16_C(    7279),  SIMDE_POLY16_C(   64011),  SIMDE_POLY16_C(   18948),  SIMDE_POLY16_C(   41305) } },
  };

  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_vaddq_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_vaddq_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_vaddq_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(13970184144458926080),  SIMDE_POLY64_C(18027732205616619520) },
      {  SIMDE_POLY64_C(10664911783920662528),  SIMDE_POLY64_C(14874615707681933312) },
      {  SIMDE_POLY64_C( 6188351287691784192),  SIMDE_POLY64_C( 3765606050019289088) } },
    { {  SIMDE_POLY64_C(13569664247937818624),  SIMDE_POLY64_C( 2437702300059964928) },
      {  SIMDE_POLY64_C(10222886524441507840),  SIMDE_POLY64_C(10211325454349762560) },
      {  SIMDE_POLY64_C( 3571315594245462016),  SIMDE_POLY64_C(12421384299785623040) } },
    { {  SIMDE_POLY64_C(14498610656383666176),  SIMDE_POLY64_C( 8476401534169848832) },
      {  SIMDE_POLY64_C( 1881698329189247232),  SIMDE_POLY64_C( 8544005506879121408) },
      {  SIMDE_POLY64_C(15215494053881995520),  SIMDE_POLY64_C(  229786886188037120) } },
    { {  SIMDE_POLY64_C(  830912799576854528),  SIMDE_POLY64_C( 9788207972263112704) },
      {  SIMDE_POLY64_C( 3017709601730458624),  SIMDE_POLY64_C( 9746625866454171648) },
      {  SIMDE_POLY64_C( 2478932721455817728),  SIMDE_POLY64_C(   41741720232210432) } },
    { {  SIMDE_POLY64_C(15772662877274730496),  SIMDE_POLY64_C(16744121799549632512) },
      {  SIMDE_POLY64_C( 3430907367297542656),  SIMDE_POLY64_C(13089324110939936768) },
      {  SIMDE_POLY64_C(17689797678054578688),  SIMDE_POLY64_C( 6771598536145377280) } },
    { {  SIMDE_POLY64_C( 7887153302148219904),  SIMDE_POLY64_C(  801127234362076928) },
      {  SIMDE_POLY64_C( 3891594517710054400),  SIMDE_POLY64_C(15740656329181452288) },
      {  SIMDE_POLY64_C( 6590301978556833792),  SIMDE_POLY64_C(15090479817836443392) } },
    { {  SIMDE_POLY64_C(  504883112248428480),  SIMDE_POLY64_C(10164513024740012032) },
      {  SIMDE_POLY64_C(13433945331308742656),  SIMDE_POLY64_C( 3304541670337251840) },
      {  SIMDE_POLY64_C(13650202223467401152),  SIMDE_POLY64_C(11588761958443661824) } },
    { {  SIMDE_POLY64_C(15631733279804442624),  SIMDE_POLY64_C(15326868064001585152) },
      {  SIMDE_POLY64_C(17500586558082564096),  SIMDE_POLY64_C(  845817615609313280) },
      {  SIMDE_POLY64_C( 3040352340325009408),  SIMDE_POLY64_C(16073078717596747776) } },
  };

  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_vaddq_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_vaddq_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
}

#if !defined(SIMDE_TARGET_NOT_SUPPORT_INT128_TYPE) && !defined(SIMDE_BUG_GCC_113065)
static int
test_simde_vaddq_p128 (SIMDE_MUNIT_TEST_ARGS) {
  struct {
    simde_poly64_t a[2];
    simde_poly64_t b[2];
    simde_poly64_t r[2];
  } test_vec[] = {
    { {  SIMDE_POLY64_C( 2773134259082670592),  SIMDE_POLY64_C( 9031857671464751104) },
      {  SIMDE_POLY64_C(15408611317451976704),  SIMDE_POLY64_C( 5314471842361763840) },
      {  SIMDE_POLY64_C(17557921622677996032),  SIMDE_POLY64_C( 3789586984176121856) } },
    { {  SIMDE_POLY64_C(14363410812027238400),  SIMDE_POLY64_C( 7751777860661664768) },
      {  SIMDE_POLY64_C( 4070846577912177664),  SIMDE_POLY64_C( 8033403141717473280) },
      {  SIMDE_POLY64_C(18386960794487266304),  SIMDE_POLY64_C(  355706841938420736) } },
    { {  SIMDE_POLY64_C(17019201421568192512),  SIMDE_POLY64_C( 9077731670917768192) },
      {  SIMDE_POLY64_C( 1093803490337685888),  SIMDE_POLY64_C(12690135020377692160) },
      {  SIMDE_POLY64_C(16365414741193798016),  SIMDE_POLY64_C(14836825620528675840) } },
    { {  SIMDE_POLY64_C( 8834005665657798656),  SIMDE_POLY64_C( 7315692870291161088) },
      {  SIMDE_POLY64_C( 3583172236868845568),  SIMDE_POLY64_C(14913079096527761408) },
      {  SIMDE_POLY64_C( 5413693383775240192),  SIMDE_POLY64_C(12354334249137418240) } },
    { {  SIMDE_POLY64_C(16318651152855345152),  SIMDE_POLY64_C(15283972988033570816) },
      {  SIMDE_POLY64_C( 4795255037585536000),  SIMDE_POLY64_C(17815911970323484672) },
      {  SIMDE_POLY64_C(11599959615349332992),  SIMDE_POLY64_C( 2532502929754736640) } },
    { {  SIMDE_POLY64_C(16540936757178476544),  SIMDE_POLY64_C( 4596081763017794560) },
      {  SIMDE_POLY64_C(15120265319048798208),  SIMDE_POLY64_C( 3251201193519464448) },
      {  SIMDE_POLY64_C( 3771992723781634048),  SIMDE_POLY64_C( 1357279216665519104) } },
    { {  SIMDE_POLY64_C( 7991373722374909952),  SIMDE_POLY64_C(17418001980645539840) },
      {  SIMDE_POLY64_C(  303154826827825408),  SIMDE_POLY64_C( 9983013542091358208) },
      {  SIMDE_POLY64_C( 7697238601746657536),  SIMDE_POLY64_C( 8877691528758722560) } },
    { {  SIMDE_POLY64_C(14668463690243614720),  SIMDE_POLY64_C( 4370163632906065408) },
      {  SIMDE_POLY64_C( 3236423722687647744),  SIMDE_POLY64_C( 6051015495717347328) },
      {  SIMDE_POLY64_C(16679868711160412160),  SIMDE_POLY64_C( 8024418529387197952) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde_poly128_t a = test_vec[i].a[0];
    simde_poly128_t b = test_vec[i].b[0];
    simde_poly128_t r, mask;
    simde_poly64_t top_r, bottom_r;
    a = a << 64;
    a = a | test_vec[i].a[1];
    b =  b << 64;
    b =  b | test_vec[i].b[1];
    r = simde_vaddq_p128(a, b);

    mask = HEDLEY_STATIC_CAST(simde_poly128_t, 0xFFFFFFFFFFFFFFFFull);
    top_r = HEDLEY_STATIC_CAST(simde_poly64_t, (r >> 64) & mask);
    bottom_r = HEDLEY_STATIC_CAST(simde_poly64_t, (r << 64) >> 64);

    simde_assert_equal_p64(top_r, test_vec[i].r[0]);
    simde_assert_equal_p64(bottom_r, test_vec[i].r[1]);
  }

  return 0;
}
#endif /* !defined(SIMDE_TARGET_NOT_SUPPORT_INT128_TYPE) && !defined(SIMDE_BUG_GCC_113065)*/

SIMDE_TEST_FUNC_LIST_BEGIN
SIMDE_TEST_FUNC_LIST_ENTRY(vaddh_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddd_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddd_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vadd_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_f16)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_f32)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_f64)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_s8)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_s16)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_s32)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_s64)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_u8)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_u16)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_u32)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_u64)

SIMDE_TEST_FUNC_LIST_ENTRY(vadd_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vadd_p64)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_p8)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_p16)
SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_p64)
#if !defined(SIMDE_TARGET_NOT_SUPPORT_INT128_TYPE) && !defined(SIMDE_BUG_GCC_113065)
  SIMDE_TEST_FUNC_LIST_ENTRY(vaddq_p128)
#endif /* !defined(SIMDE_TARGET_NOT_SUPPORT_INT128_TYPE) */

SIMDE_TEST_FUNC_LIST_END

#include "test-neon-footer.h"