/* SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * Copyright:
 *   2021      Kunwar Maheep Singh <kunwar.maheep@students.iiit.ac.in>
 *   2023      Michael R. Crusoe <crusoe@debian.org>
 */

#define SIMDE_TEST_X86_AVX512_INSN scalef

#include <test/x86/avx512/test-avx512.h>
#include <simde/x86/avx512/scalef.h>

static int
test_simde_mm_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -574.44),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   524.22) },
      { SIMDE_FLOAT32_C(   500.85),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   876.76) },
      {            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,      SIMDE_MATH_INFINITYF } },
    #endif
    { { SIMDE_FLOAT32_C(   919.28), SIMDE_FLOAT32_C(  -131.68), SIMDE_FLOAT32_C(  -977.50), SIMDE_FLOAT32_C(  -661.80) },
      { SIMDE_FLOAT32_C(   737.41), SIMDE_FLOAT32_C(  -540.20), SIMDE_FLOAT32_C(   308.25), SIMDE_FLOAT32_C(   444.32) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(     0.37), SIMDE_FLOAT32_C(   498.31), SIMDE_FLOAT32_C(    33.05), SIMDE_FLOAT32_C(  -256.10) },
      { SIMDE_FLOAT32_C(  -472.78), SIMDE_FLOAT32_C(  -591.57), SIMDE_FLOAT32_C(    -2.46), SIMDE_FLOAT32_C(  -254.61) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     4.13), SIMDE_FLOAT32_C(    -0.00) } },
    { { SIMDE_FLOAT32_C(   931.71), SIMDE_FLOAT32_C(  -418.21), SIMDE_FLOAT32_C(   348.08), SIMDE_FLOAT32_C(   395.26) },
      { SIMDE_FLOAT32_C(  -506.53), SIMDE_FLOAT32_C(    75.82), SIMDE_FLOAT32_C(   809.38), SIMDE_FLOAT32_C(   887.05) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(-15799526771589293308641280.00),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(   501.38), SIMDE_FLOAT32_C(   -77.34), SIMDE_FLOAT32_C(   411.27), SIMDE_FLOAT32_C(     2.23) },
      { SIMDE_FLOAT32_C(   996.51), SIMDE_FLOAT32_C(   522.28), SIMDE_FLOAT32_C(  -121.01), SIMDE_FLOAT32_C(   915.79) },
      {      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(  -609.41), SIMDE_FLOAT32_C(   -98.51), SIMDE_FLOAT32_C(  -746.01), SIMDE_FLOAT32_C(  -872.00) },
      { SIMDE_FLOAT32_C(   361.29), SIMDE_FLOAT32_C(   562.24), SIMDE_FLOAT32_C(   572.32), SIMDE_FLOAT32_C(  -638.34) },
      {     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00) } },
    { { SIMDE_FLOAT32_C(    60.55), SIMDE_FLOAT32_C(  -394.64), SIMDE_FLOAT32_C(   105.57), SIMDE_FLOAT32_C(   587.77) },
      { SIMDE_FLOAT32_C(    13.80), SIMDE_FLOAT32_C(  -896.90), SIMDE_FLOAT32_C(  -666.83), SIMDE_FLOAT32_C(   -54.49) },
      { SIMDE_FLOAT32_C(496025.59), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(  -315.11), SIMDE_FLOAT32_C(   681.24), SIMDE_FLOAT32_C(  -659.23), SIMDE_FLOAT32_C(   178.37) },
      { SIMDE_FLOAT32_C(  -242.94), SIMDE_FLOAT32_C(  -849.85), SIMDE_FLOAT32_C(    65.41), SIMDE_FLOAT32_C(  -741.55) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(-24321293470847155044352.00), SIMDE_FLOAT32_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_scalef_ps(a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_scalef_ps(a, b);

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

static int
test_simde_mm_mask_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 src[4];
    const simde__mmask8 k;
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT32_C(   510.80), SIMDE_FLOAT32_C(    70.72), SIMDE_FLOAT32_C(  -240.36), SIMDE_FLOAT32_C(   667.59) },
      UINT8_C(167),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   120.08),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   803.63) },
      { SIMDE_FLOAT32_C(  -971.21),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -397.24) },
      {            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   667.59) } },
    #endif
    { { SIMDE_FLOAT32_C(  -527.36), SIMDE_FLOAT32_C(   207.05), SIMDE_FLOAT32_C(   888.57), SIMDE_FLOAT32_C(   676.31) },
      UINT8_C(209),
      { SIMDE_FLOAT32_C(   382.67), SIMDE_FLOAT32_C(  -251.21), SIMDE_FLOAT32_C(   490.66), SIMDE_FLOAT32_C(   276.18) },
      { SIMDE_FLOAT32_C(  -493.35), SIMDE_FLOAT32_C(   664.91), SIMDE_FLOAT32_C(  -894.03), SIMDE_FLOAT32_C(  -245.08) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   207.05), SIMDE_FLOAT32_C(   888.57), SIMDE_FLOAT32_C(   676.31) } },
    { { SIMDE_FLOAT32_C(   178.54), SIMDE_FLOAT32_C(  -455.11), SIMDE_FLOAT32_C(   -55.71), SIMDE_FLOAT32_C(   223.43) },
      UINT8_C(149),
      { SIMDE_FLOAT32_C(   651.73), SIMDE_FLOAT32_C(   452.73), SIMDE_FLOAT32_C(   119.59), SIMDE_FLOAT32_C(  -408.37) },
      { SIMDE_FLOAT32_C(   720.80), SIMDE_FLOAT32_C(   390.12), SIMDE_FLOAT32_C(   263.08), SIMDE_FLOAT32_C(   973.63) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -455.11),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(   223.43) } },
    { { SIMDE_FLOAT32_C(   318.63), SIMDE_FLOAT32_C(  -612.09), SIMDE_FLOAT32_C(  -822.85), SIMDE_FLOAT32_C(   413.77) },
      UINT8_C( 59),
      { SIMDE_FLOAT32_C(  -230.03), SIMDE_FLOAT32_C(  -651.76), SIMDE_FLOAT32_C(  -462.21), SIMDE_FLOAT32_C(   420.82) },
      { SIMDE_FLOAT32_C(   320.60), SIMDE_FLOAT32_C(   961.38), SIMDE_FLOAT32_C(  -871.21), SIMDE_FLOAT32_C(   611.61) },
      {     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -822.85),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(  -447.83), SIMDE_FLOAT32_C(   482.54), SIMDE_FLOAT32_C(  -732.93), SIMDE_FLOAT32_C(   275.44) },
      UINT8_C(204),
      { SIMDE_FLOAT32_C(    81.46), SIMDE_FLOAT32_C(  -363.38), SIMDE_FLOAT32_C(   415.25), SIMDE_FLOAT32_C(   110.24) },
      { SIMDE_FLOAT32_C(  -843.21), SIMDE_FLOAT32_C(  -965.47), SIMDE_FLOAT32_C(   713.00), SIMDE_FLOAT32_C(   539.46) },
      { SIMDE_FLOAT32_C(  -447.83), SIMDE_FLOAT32_C(   482.54),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(    12.45), SIMDE_FLOAT32_C(   319.29), SIMDE_FLOAT32_C(  -342.96), SIMDE_FLOAT32_C(   886.63) },
      UINT8_C( 98),
      { SIMDE_FLOAT32_C(  -216.68), SIMDE_FLOAT32_C(   203.67), SIMDE_FLOAT32_C(  -184.36), SIMDE_FLOAT32_C(   289.97) },
      { SIMDE_FLOAT32_C(  -131.42), SIMDE_FLOAT32_C(   -78.39), SIMDE_FLOAT32_C(  -955.11), SIMDE_FLOAT32_C(  -479.68) },
      { SIMDE_FLOAT32_C(    12.45), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -342.96), SIMDE_FLOAT32_C(   886.63) } },
    { { SIMDE_FLOAT32_C(  -693.57), SIMDE_FLOAT32_C(   397.43), SIMDE_FLOAT32_C(  -954.51), SIMDE_FLOAT32_C(    66.07) },
      UINT8_C(115),
      { SIMDE_FLOAT32_C(  -625.66), SIMDE_FLOAT32_C(   164.48), SIMDE_FLOAT32_C(   111.94), SIMDE_FLOAT32_C(  -904.86) },
      { SIMDE_FLOAT32_C(  -445.41), SIMDE_FLOAT32_C(  -624.98), SIMDE_FLOAT32_C(  -931.23), SIMDE_FLOAT32_C(   324.57) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -954.51), SIMDE_FLOAT32_C(    66.07) } },
    { { SIMDE_FLOAT32_C(   150.74), SIMDE_FLOAT32_C(   538.71), SIMDE_FLOAT32_C(  -727.93), SIMDE_FLOAT32_C(    39.30) },
      UINT8_C(225),
      { SIMDE_FLOAT32_C(  -276.74), SIMDE_FLOAT32_C(  -393.44), SIMDE_FLOAT32_C(  -254.61), SIMDE_FLOAT32_C(  -956.14) },
      { SIMDE_FLOAT32_C(  -432.06), SIMDE_FLOAT32_C(  -125.82), SIMDE_FLOAT32_C(   655.47), SIMDE_FLOAT32_C(   649.39) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   538.71), SIMDE_FLOAT32_C(  -727.93), SIMDE_FLOAT32_C(    39.30) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 src = simde_mm_loadu_ps(test_vec[i].src);
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_mask_scalef_ps(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128 src = simde_test_x86_random_f32x4(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_mask_scalef_ps(src, k, a, b);

    simde_test_x86_write_f32x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm_maskz_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    { UINT8_C(  8),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -782.16),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   239.05) },
      { SIMDE_FLOAT32_C(   441.27),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   829.17) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { UINT8_C(212),
      { SIMDE_FLOAT32_C(     2.27), SIMDE_FLOAT32_C(   971.45), SIMDE_FLOAT32_C(  -228.33), SIMDE_FLOAT32_C(   554.45) },
      { SIMDE_FLOAT32_C(   453.99), SIMDE_FLOAT32_C(    38.74), SIMDE_FLOAT32_C(  -170.12), SIMDE_FLOAT32_C(   543.09) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C(142),
      { SIMDE_FLOAT32_C(  -948.81), SIMDE_FLOAT32_C(  -850.82), SIMDE_FLOAT32_C(  -799.87), SIMDE_FLOAT32_C(   937.82) },
      { SIMDE_FLOAT32_C(   123.94), SIMDE_FLOAT32_C(  -493.44), SIMDE_FLOAT32_C(   335.26), SIMDE_FLOAT32_C(   169.43) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF } },
    { UINT8_C( 34),
      { SIMDE_FLOAT32_C(   572.63), SIMDE_FLOAT32_C(  -599.72), SIMDE_FLOAT32_C(  -679.83), SIMDE_FLOAT32_C(   111.33) },
      { SIMDE_FLOAT32_C(  -327.65), SIMDE_FLOAT32_C(   359.47), SIMDE_FLOAT32_C(  -673.65), SIMDE_FLOAT32_C(   -32.89) },
      { SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C(185),
      { SIMDE_FLOAT32_C(   577.31), SIMDE_FLOAT32_C(  -913.73), SIMDE_FLOAT32_C(  -793.84), SIMDE_FLOAT32_C(    18.58) },
      { SIMDE_FLOAT32_C(   -88.61), SIMDE_FLOAT32_C(  -236.15), SIMDE_FLOAT32_C(  -152.25), SIMDE_FLOAT32_C(   913.66) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { UINT8_C(110),
      { SIMDE_FLOAT32_C(  -264.70), SIMDE_FLOAT32_C(   619.42), SIMDE_FLOAT32_C(   468.11), SIMDE_FLOAT32_C(  -810.71) },
      { SIMDE_FLOAT32_C(  -341.84), SIMDE_FLOAT32_C(  -702.01), SIMDE_FLOAT32_C(   732.39), SIMDE_FLOAT32_C(  -290.65) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00) } },
    { UINT8_C( 76),
      { SIMDE_FLOAT32_C(  -552.83), SIMDE_FLOAT32_C(   932.51), SIMDE_FLOAT32_C(  -352.83), SIMDE_FLOAT32_C(   571.11) },
      { SIMDE_FLOAT32_C(  -560.93), SIMDE_FLOAT32_C(   982.43), SIMDE_FLOAT32_C(  -259.45), SIMDE_FLOAT32_C(  -988.30) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C(172),
      { SIMDE_FLOAT32_C(  -617.29), SIMDE_FLOAT32_C(    60.71), SIMDE_FLOAT32_C(   123.03), SIMDE_FLOAT32_C(    55.06) },
      { SIMDE_FLOAT32_C(  -579.82), SIMDE_FLOAT32_C(   449.39), SIMDE_FLOAT32_C(  -977.83), SIMDE_FLOAT32_C(   997.49) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_maskz_scalef_ps(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_maskz_scalef_ps(k, a, b);

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

static int
test_simde_mm256_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 a[8];
    const simde_float32 b[8];
    const simde_float32 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    39.06),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   879.22),
        SIMDE_FLOAT32_C(   799.85), SIMDE_FLOAT32_C(    98.16), SIMDE_FLOAT32_C(   360.53), SIMDE_FLOAT32_C(   817.25) },
      { SIMDE_FLOAT32_C(   981.76),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -177.33),
        SIMDE_FLOAT32_C(  -885.94), SIMDE_FLOAT32_C(   138.17), SIMDE_FLOAT32_C(   764.91), SIMDE_FLOAT32_C(  -195.41) },
      {            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00) } },
    #endif
    { { SIMDE_FLOAT32_C(   860.80), SIMDE_FLOAT32_C(  -750.11), SIMDE_FLOAT32_C(  -210.97), SIMDE_FLOAT32_C(   614.29),
        SIMDE_FLOAT32_C(   913.44), SIMDE_FLOAT32_C(   400.13), SIMDE_FLOAT32_C(   801.72), SIMDE_FLOAT32_C(   828.58) },
      { SIMDE_FLOAT32_C(  -995.54), SIMDE_FLOAT32_C(   953.74), SIMDE_FLOAT32_C(   674.22), SIMDE_FLOAT32_C(   219.06),
        SIMDE_FLOAT32_C(   633.43), SIMDE_FLOAT32_C(  -596.99), SIMDE_FLOAT32_C(  -149.83), SIMDE_FLOAT32_C(  -755.25) },
      { SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(   442.07), SIMDE_FLOAT32_C(   493.98), SIMDE_FLOAT32_C(  -876.03), SIMDE_FLOAT32_C(   241.92),
        SIMDE_FLOAT32_C(  -407.86), SIMDE_FLOAT32_C(   484.50), SIMDE_FLOAT32_C(    59.17), SIMDE_FLOAT32_C(  -426.10) },
      { SIMDE_FLOAT32_C(  -934.67), SIMDE_FLOAT32_C(   908.49), SIMDE_FLOAT32_C(   396.57), SIMDE_FLOAT32_C(  -820.61),
        SIMDE_FLOAT32_C(    46.66), SIMDE_FLOAT32_C(   161.48), SIMDE_FLOAT32_C(   -16.02), SIMDE_FLOAT32_C(   -92.54) },
      { SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(-28700594969509888.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00) } },
    { { SIMDE_FLOAT32_C(   411.36), SIMDE_FLOAT32_C(   773.01), SIMDE_FLOAT32_C(  -478.24), SIMDE_FLOAT32_C(   324.81),
        SIMDE_FLOAT32_C(   173.14), SIMDE_FLOAT32_C(  -676.52), SIMDE_FLOAT32_C(   153.39), SIMDE_FLOAT32_C(   177.60) },
      { SIMDE_FLOAT32_C(  -722.78), SIMDE_FLOAT32_C(  -172.39), SIMDE_FLOAT32_C(  -603.34), SIMDE_FLOAT32_C(   910.65),
        SIMDE_FLOAT32_C(   230.62), SIMDE_FLOAT32_C(   246.83), SIMDE_FLOAT32_C(  -844.60), SIMDE_FLOAT32_C(  -327.31) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(  -259.19), SIMDE_FLOAT32_C(  -720.63), SIMDE_FLOAT32_C(   914.61), SIMDE_FLOAT32_C(   332.96),
        SIMDE_FLOAT32_C(   763.88), SIMDE_FLOAT32_C(   -26.22), SIMDE_FLOAT32_C(   906.86), SIMDE_FLOAT32_C(   829.21) },
      { SIMDE_FLOAT32_C(  -117.73), SIMDE_FLOAT32_C(   303.42), SIMDE_FLOAT32_C(  -991.40), SIMDE_FLOAT32_C(   928.93),
        SIMDE_FLOAT32_C(  -535.10), SIMDE_FLOAT32_C(    -7.42), SIMDE_FLOAT32_C(  -163.61), SIMDE_FLOAT32_C(   876.26) },
      { SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.10), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(  -234.41), SIMDE_FLOAT32_C(   358.15), SIMDE_FLOAT32_C(   201.07), SIMDE_FLOAT32_C(   938.74),
        SIMDE_FLOAT32_C(   681.63), SIMDE_FLOAT32_C(  -645.54), SIMDE_FLOAT32_C(   116.33), SIMDE_FLOAT32_C(   958.85) },
      { SIMDE_FLOAT32_C(   182.07), SIMDE_FLOAT32_C(   513.00), SIMDE_FLOAT32_C(   869.50), SIMDE_FLOAT32_C(  -587.31),
        SIMDE_FLOAT32_C(  -240.17), SIMDE_FLOAT32_C(  -975.09), SIMDE_FLOAT32_C(    85.37), SIMDE_FLOAT32_C(   500.64) },
      {     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(4500298969900131223638900736.00),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(  -695.72), SIMDE_FLOAT32_C(    -0.02), SIMDE_FLOAT32_C(  -166.40), SIMDE_FLOAT32_C(  -931.84),
        SIMDE_FLOAT32_C(   973.75), SIMDE_FLOAT32_C(  -259.54), SIMDE_FLOAT32_C(   897.36), SIMDE_FLOAT32_C(  -143.98) },
      { SIMDE_FLOAT32_C(  -956.12), SIMDE_FLOAT32_C(   905.96), SIMDE_FLOAT32_C(  -215.05), SIMDE_FLOAT32_C(  -491.22),
        SIMDE_FLOAT32_C(  -101.46), SIMDE_FLOAT32_C(   621.35), SIMDE_FLOAT32_C(  -614.96), SIMDE_FLOAT32_C(   664.13) },
      { SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(   -20.50), SIMDE_FLOAT32_C(   586.11), SIMDE_FLOAT32_C(   602.87), SIMDE_FLOAT32_C(  -338.88),
        SIMDE_FLOAT32_C(   940.58), SIMDE_FLOAT32_C(  -280.80), SIMDE_FLOAT32_C(  -380.03), SIMDE_FLOAT32_C(   122.65) },
      { SIMDE_FLOAT32_C(  -767.80), SIMDE_FLOAT32_C(  -510.52), SIMDE_FLOAT32_C(   535.33), SIMDE_FLOAT32_C(    -7.97),
        SIMDE_FLOAT32_C(  -485.61), SIMDE_FLOAT32_C(  -379.29), SIMDE_FLOAT32_C(  -507.33), SIMDE_FLOAT32_C(  -181.33) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -1.32),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256 a = simde_mm256_loadu_ps(test_vec[i].a);
    simde__m256 b = simde_mm256_loadu_ps(test_vec[i].b);
    simde__m256 r = simde_mm256_scalef_ps(a, b);
    simde_test_x86_assert_equal_f32x8(r, simde_mm256_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x8_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m256 a = simde_test_x86_random_extract_f32x8(i, 2, 0, values);
    simde__m256 b = simde_test_x86_random_extract_f32x8(i, 2, 1, values);
    simde__m256 r = simde_mm256_scalef_ps(a, b);

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

static int
test_simde_mm256_mask_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 src[8];
    const simde__mmask8 k;
    const simde_float32 a[8];
    const simde_float32 b[8];
    const simde_float32 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT32_C(   867.27), SIMDE_FLOAT32_C(  -634.46), SIMDE_FLOAT32_C(  -222.00), SIMDE_FLOAT32_C(  -962.68),
        SIMDE_FLOAT32_C(   917.78), SIMDE_FLOAT32_C(  -612.70), SIMDE_FLOAT32_C(  -579.88), SIMDE_FLOAT32_C(  -888.92) },
      UINT8_C(242),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -925.31),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -690.77),
        SIMDE_FLOAT32_C(   675.94), SIMDE_FLOAT32_C(  -374.50), SIMDE_FLOAT32_C(  -487.76), SIMDE_FLOAT32_C(  -756.43) },
      { SIMDE_FLOAT32_C(  -175.93),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -48.52),
        SIMDE_FLOAT32_C(    96.45), SIMDE_FLOAT32_C(   957.68), SIMDE_FLOAT32_C(   588.59), SIMDE_FLOAT32_C(  -197.83) },
      { SIMDE_FLOAT32_C(   867.27),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -222.00), SIMDE_FLOAT32_C(  -962.68),
        SIMDE_FLOAT32_C(53553484363319967491320765743104.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00) } },
    #endif
    { { SIMDE_FLOAT32_C(   383.03), SIMDE_FLOAT32_C(  -868.75), SIMDE_FLOAT32_C(  -330.42), SIMDE_FLOAT32_C(   976.95),
        SIMDE_FLOAT32_C(   757.69), SIMDE_FLOAT32_C(  -838.96), SIMDE_FLOAT32_C(  -959.76), SIMDE_FLOAT32_C(  -432.14) },
      UINT8_C( 26),
      { SIMDE_FLOAT32_C(  -316.46), SIMDE_FLOAT32_C(  -406.44), SIMDE_FLOAT32_C(  -251.32), SIMDE_FLOAT32_C(  -212.53),
        SIMDE_FLOAT32_C(   798.11), SIMDE_FLOAT32_C(  -886.02), SIMDE_FLOAT32_C(  -585.83), SIMDE_FLOAT32_C(  -936.92) },
      { SIMDE_FLOAT32_C(   885.55), SIMDE_FLOAT32_C(   273.13), SIMDE_FLOAT32_C(   426.36), SIMDE_FLOAT32_C(   195.17),
        SIMDE_FLOAT32_C(  -463.04), SIMDE_FLOAT32_C(   229.16), SIMDE_FLOAT32_C(  -598.06), SIMDE_FLOAT32_C(  -962.03) },
      { SIMDE_FLOAT32_C(   383.03),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -330.42),     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -838.96), SIMDE_FLOAT32_C(  -959.76), SIMDE_FLOAT32_C(  -432.14) } },
    { { SIMDE_FLOAT32_C(   825.42), SIMDE_FLOAT32_C(  -797.66), SIMDE_FLOAT32_C(   103.98), SIMDE_FLOAT32_C(  -141.83),
        SIMDE_FLOAT32_C(   728.06), SIMDE_FLOAT32_C(   316.86), SIMDE_FLOAT32_C(   201.08), SIMDE_FLOAT32_C(   441.10) },
      UINT8_C(185),
      { SIMDE_FLOAT32_C(   303.85), SIMDE_FLOAT32_C(   196.18), SIMDE_FLOAT32_C(  -652.80), SIMDE_FLOAT32_C(   -20.21),
        SIMDE_FLOAT32_C(   821.68), SIMDE_FLOAT32_C(  -140.56), SIMDE_FLOAT32_C(   223.36), SIMDE_FLOAT32_C(  -354.25) },
      { SIMDE_FLOAT32_C(   136.29), SIMDE_FLOAT32_C(  -590.33), SIMDE_FLOAT32_C(   597.23), SIMDE_FLOAT32_C(  -767.26),
        SIMDE_FLOAT32_C(  -632.64), SIMDE_FLOAT32_C(   185.82), SIMDE_FLOAT32_C(    34.90), SIMDE_FLOAT32_C(    50.90) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -797.66), SIMDE_FLOAT32_C(   103.98), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(   201.08), SIMDE_FLOAT32_C(-398850041998999552.00) } },
    { { SIMDE_FLOAT32_C(   -45.25), SIMDE_FLOAT32_C(   -58.61), SIMDE_FLOAT32_C(   -79.21), SIMDE_FLOAT32_C(  -433.04),
        SIMDE_FLOAT32_C(  -191.34), SIMDE_FLOAT32_C(   286.33), SIMDE_FLOAT32_C(   344.96), SIMDE_FLOAT32_C(  -154.03) },
      UINT8_C( 54),
      { SIMDE_FLOAT32_C(   779.38), SIMDE_FLOAT32_C(   783.58), SIMDE_FLOAT32_C(   838.36), SIMDE_FLOAT32_C(   577.49),
        SIMDE_FLOAT32_C(   897.56), SIMDE_FLOAT32_C(  -747.47), SIMDE_FLOAT32_C(   640.57), SIMDE_FLOAT32_C(   783.11) },
      { SIMDE_FLOAT32_C(   525.66), SIMDE_FLOAT32_C(    66.92), SIMDE_FLOAT32_C(   -21.72), SIMDE_FLOAT32_C(  -937.39),
        SIMDE_FLOAT32_C(  -703.91), SIMDE_FLOAT32_C(   380.22), SIMDE_FLOAT32_C(  -899.41), SIMDE_FLOAT32_C(   599.93) },
      { SIMDE_FLOAT32_C(   -45.25), SIMDE_FLOAT32_C(57818000146117217484800.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -433.04),
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(   344.96), SIMDE_FLOAT32_C(  -154.03) } },
    { { SIMDE_FLOAT32_C(   732.26), SIMDE_FLOAT32_C(   266.10), SIMDE_FLOAT32_C(   315.19), SIMDE_FLOAT32_C(  -594.88),
        SIMDE_FLOAT32_C(  -350.87), SIMDE_FLOAT32_C(   446.44), SIMDE_FLOAT32_C(    74.70), SIMDE_FLOAT32_C(  -373.92) },
      UINT8_C(178),
      { SIMDE_FLOAT32_C(  -423.60), SIMDE_FLOAT32_C(  -552.21), SIMDE_FLOAT32_C(  -420.28), SIMDE_FLOAT32_C(  -601.92),
        SIMDE_FLOAT32_C(   307.23), SIMDE_FLOAT32_C(   803.08), SIMDE_FLOAT32_C(    43.83), SIMDE_FLOAT32_C(  -556.48) },
      { SIMDE_FLOAT32_C(  -787.25), SIMDE_FLOAT32_C(  -358.94), SIMDE_FLOAT32_C(  -323.74), SIMDE_FLOAT32_C(  -419.89),
        SIMDE_FLOAT32_C(   826.88), SIMDE_FLOAT32_C(   711.16), SIMDE_FLOAT32_C(   631.01), SIMDE_FLOAT32_C(   606.26) },
      { SIMDE_FLOAT32_C(   732.26), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   315.19), SIMDE_FLOAT32_C(  -594.88),
             SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    74.70),     -SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(   235.74), SIMDE_FLOAT32_C(  -333.68), SIMDE_FLOAT32_C(   771.99), SIMDE_FLOAT32_C(  -719.46),
        SIMDE_FLOAT32_C(  -508.26), SIMDE_FLOAT32_C(   974.33), SIMDE_FLOAT32_C(   384.53), SIMDE_FLOAT32_C(   349.91) },
      UINT8_C( 46),
      { SIMDE_FLOAT32_C(   494.74), SIMDE_FLOAT32_C(   469.37), SIMDE_FLOAT32_C(   183.74), SIMDE_FLOAT32_C(   392.30),
        SIMDE_FLOAT32_C(   721.90), SIMDE_FLOAT32_C(  -175.69), SIMDE_FLOAT32_C(   175.42), SIMDE_FLOAT32_C(   247.56) },
      { SIMDE_FLOAT32_C(   891.23), SIMDE_FLOAT32_C(  -846.30), SIMDE_FLOAT32_C(   310.17), SIMDE_FLOAT32_C(  -812.68),
        SIMDE_FLOAT32_C(   533.92), SIMDE_FLOAT32_C(   410.76), SIMDE_FLOAT32_C(   787.25), SIMDE_FLOAT32_C(  -889.67) },
      { SIMDE_FLOAT32_C(   235.74), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(  -508.26),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(   384.53), SIMDE_FLOAT32_C(   349.91) } },
    { { SIMDE_FLOAT32_C(  -298.61), SIMDE_FLOAT32_C(  -449.02), SIMDE_FLOAT32_C(   143.49), SIMDE_FLOAT32_C(   765.05),
        SIMDE_FLOAT32_C(   505.73), SIMDE_FLOAT32_C(  -915.12), SIMDE_FLOAT32_C(  -314.15), SIMDE_FLOAT32_C(  -927.30) },
      UINT8_C( 96),
      { SIMDE_FLOAT32_C(   858.55), SIMDE_FLOAT32_C(  -633.02), SIMDE_FLOAT32_C(  -491.59), SIMDE_FLOAT32_C(   165.78),
        SIMDE_FLOAT32_C(  -829.95), SIMDE_FLOAT32_C(   552.24), SIMDE_FLOAT32_C(   609.30), SIMDE_FLOAT32_C(  -617.20) },
      { SIMDE_FLOAT32_C(  -806.70), SIMDE_FLOAT32_C(  -714.44), SIMDE_FLOAT32_C(   -37.09), SIMDE_FLOAT32_C(  -979.82),
        SIMDE_FLOAT32_C(   996.72), SIMDE_FLOAT32_C(  -406.08), SIMDE_FLOAT32_C(   626.43), SIMDE_FLOAT32_C(   491.46) },
      { SIMDE_FLOAT32_C(  -298.61), SIMDE_FLOAT32_C(  -449.02), SIMDE_FLOAT32_C(   143.49), SIMDE_FLOAT32_C(   765.05),
        SIMDE_FLOAT32_C(   505.73), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -927.30) } },
    { { SIMDE_FLOAT32_C(   972.18), SIMDE_FLOAT32_C(   417.66), SIMDE_FLOAT32_C(   739.51), SIMDE_FLOAT32_C(   176.29),
        SIMDE_FLOAT32_C(   149.93), SIMDE_FLOAT32_C(     5.61), SIMDE_FLOAT32_C(  -508.52), SIMDE_FLOAT32_C(   555.05) },
      UINT8_C(250),
      { SIMDE_FLOAT32_C(  -936.71), SIMDE_FLOAT32_C(  -189.83), SIMDE_FLOAT32_C(  -116.24), SIMDE_FLOAT32_C(   785.19),
        SIMDE_FLOAT32_C(   634.48), SIMDE_FLOAT32_C(  -940.82), SIMDE_FLOAT32_C(    32.74), SIMDE_FLOAT32_C(   525.72) },
      { SIMDE_FLOAT32_C(  -787.12), SIMDE_FLOAT32_C(  -657.09), SIMDE_FLOAT32_C(   713.04), SIMDE_FLOAT32_C(   746.80),
        SIMDE_FLOAT32_C(   753.67), SIMDE_FLOAT32_C(   500.29), SIMDE_FLOAT32_C(   857.13), SIMDE_FLOAT32_C(   612.22) },
      { SIMDE_FLOAT32_C(   972.18), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   739.51),      SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256 src = simde_mm256_loadu_ps(test_vec[i].src);
    simde__m256 a = simde_mm256_loadu_ps(test_vec[i].a);
    simde__m256 b = simde_mm256_loadu_ps(test_vec[i].b);
    simde__m256 r = simde_mm256_mask_scalef_ps(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x8(r, simde_mm256_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x8_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m256 src = simde_test_x86_random_f32x8(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m256 a = simde_test_x86_random_extract_f32x8(i, 2, 0, values);
    simde__m256 b = simde_test_x86_random_extract_f32x8(i, 2, 1, values);
    simde__m256 r = simde_mm256_mask_scalef_ps(src, k, a, b);

    simde_test_x86_write_f32x8(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm256_maskz_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float32 a[8];
    const simde_float32 b[8];
    const simde_float32 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT8_C(186),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -178.84),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    73.91),
        SIMDE_FLOAT32_C(   775.85), SIMDE_FLOAT32_C(  -179.10), SIMDE_FLOAT32_C(  -902.23), SIMDE_FLOAT32_C(   808.26) },
      { SIMDE_FLOAT32_C(   157.12),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -829.15),
        SIMDE_FLOAT32_C(   857.21), SIMDE_FLOAT32_C(   874.94), SIMDE_FLOAT32_C(  -731.65), SIMDE_FLOAT32_C(   885.12) },
      { SIMDE_FLOAT32_C(     0.00),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
             SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    #endif
    { UINT8_C(254),
      { SIMDE_FLOAT32_C(  -373.68), SIMDE_FLOAT32_C(  -338.69), SIMDE_FLOAT32_C(   -17.30), SIMDE_FLOAT32_C(  -429.35),
        SIMDE_FLOAT32_C(   603.79), SIMDE_FLOAT32_C(  -761.55), SIMDE_FLOAT32_C(   662.37), SIMDE_FLOAT32_C(   998.63) },
      { SIMDE_FLOAT32_C(   271.41), SIMDE_FLOAT32_C(   639.65), SIMDE_FLOAT32_C(   500.97), SIMDE_FLOAT32_C(   133.67),
        SIMDE_FLOAT32_C(  -849.31), SIMDE_FLOAT32_C(  -311.72), SIMDE_FLOAT32_C(  -251.83), SIMDE_FLOAT32_C(   361.48) },
      { SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { UINT8_C( 91),
      { SIMDE_FLOAT32_C(   509.45), SIMDE_FLOAT32_C(  -862.03), SIMDE_FLOAT32_C(  -564.61), SIMDE_FLOAT32_C(   285.30),
        SIMDE_FLOAT32_C(   -41.13), SIMDE_FLOAT32_C(  -466.84), SIMDE_FLOAT32_C(    93.56), SIMDE_FLOAT32_C(  -884.01) },
      { SIMDE_FLOAT32_C(  -518.82), SIMDE_FLOAT32_C(   198.48), SIMDE_FLOAT32_C(  -713.16), SIMDE_FLOAT32_C(  -661.61),
        SIMDE_FLOAT32_C(    73.43), SIMDE_FLOAT32_C(  -444.81), SIMDE_FLOAT32_C(  -776.49), SIMDE_FLOAT32_C(   699.75) },
      { SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(-388461876968920180588544.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C(167),
      { SIMDE_FLOAT32_C(   216.50), SIMDE_FLOAT32_C(   206.21), SIMDE_FLOAT32_C(  -729.60), SIMDE_FLOAT32_C(  -179.71),
        SIMDE_FLOAT32_C(   444.66), SIMDE_FLOAT32_C(   932.77), SIMDE_FLOAT32_C(  -181.08), SIMDE_FLOAT32_C(  -283.93) },
      { SIMDE_FLOAT32_C(   572.42), SIMDE_FLOAT32_C(  -680.11), SIMDE_FLOAT32_C(   849.74), SIMDE_FLOAT32_C(   723.11),
        SIMDE_FLOAT32_C(     8.17), SIMDE_FLOAT32_C(  -402.09), SIMDE_FLOAT32_C(    84.60), SIMDE_FLOAT32_C(  -482.38) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00) } },
    { UINT8_C( 15),
      { SIMDE_FLOAT32_C(  -264.12), SIMDE_FLOAT32_C(   519.99), SIMDE_FLOAT32_C(   802.92), SIMDE_FLOAT32_C(   694.75),
        SIMDE_FLOAT32_C(  -946.85), SIMDE_FLOAT32_C(  -103.53), SIMDE_FLOAT32_C(   810.74), SIMDE_FLOAT32_C(  -465.67) },
      { SIMDE_FLOAT32_C(  -905.04), SIMDE_FLOAT32_C(  -902.42), SIMDE_FLOAT32_C(  -127.28), SIMDE_FLOAT32_C(   168.39),
        SIMDE_FLOAT32_C(  -347.23), SIMDE_FLOAT32_C(    96.24), SIMDE_FLOAT32_C(  -131.87), SIMDE_FLOAT32_C(   869.27) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C( 37),
      { SIMDE_FLOAT32_C(  -697.56), SIMDE_FLOAT32_C(   138.53), SIMDE_FLOAT32_C(  -310.44), SIMDE_FLOAT32_C(   747.10),
        SIMDE_FLOAT32_C(    71.30), SIMDE_FLOAT32_C(   508.48), SIMDE_FLOAT32_C(  -536.83), SIMDE_FLOAT32_C(  -356.28) },
      { SIMDE_FLOAT32_C(   828.37), SIMDE_FLOAT32_C(  -687.09), SIMDE_FLOAT32_C(  -633.17), SIMDE_FLOAT32_C(  -163.46),
        SIMDE_FLOAT32_C(   -89.17), SIMDE_FLOAT32_C(   451.43), SIMDE_FLOAT32_C(   354.16), SIMDE_FLOAT32_C(   646.71) },
      {     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT8_C(173),
      { SIMDE_FLOAT32_C(   -28.58), SIMDE_FLOAT32_C(   157.08), SIMDE_FLOAT32_C(   341.46), SIMDE_FLOAT32_C(    24.57),
        SIMDE_FLOAT32_C(  -946.45), SIMDE_FLOAT32_C(   152.20), SIMDE_FLOAT32_C(   558.90), SIMDE_FLOAT32_C(  -851.49) },
      { SIMDE_FLOAT32_C(   249.78), SIMDE_FLOAT32_C(  -568.37), SIMDE_FLOAT32_C(   316.90), SIMDE_FLOAT32_C(   902.55),
        SIMDE_FLOAT32_C(   527.86), SIMDE_FLOAT32_C(  -814.97), SIMDE_FLOAT32_C(   771.83), SIMDE_FLOAT32_C(   830.31) },
      {     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF } },
    { UINT8_C(195),
      { SIMDE_FLOAT32_C(   323.56), SIMDE_FLOAT32_C(  -538.61), SIMDE_FLOAT32_C(   577.41), SIMDE_FLOAT32_C(  -605.14),
        SIMDE_FLOAT32_C(   969.87), SIMDE_FLOAT32_C(  -959.42), SIMDE_FLOAT32_C(    38.58), SIMDE_FLOAT32_C(   798.24) },
      { SIMDE_FLOAT32_C(  -646.50), SIMDE_FLOAT32_C(   405.42), SIMDE_FLOAT32_C(  -365.22), SIMDE_FLOAT32_C(   264.32),
        SIMDE_FLOAT32_C(  -143.15), SIMDE_FLOAT32_C(   988.94), SIMDE_FLOAT32_C(   -88.97), SIMDE_FLOAT32_C(   828.26) },
      { SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256 a = simde_mm256_loadu_ps(test_vec[i].a);
    simde__m256 b = simde_mm256_loadu_ps(test_vec[i].b);
    simde__m256 r = simde_mm256_maskz_scalef_ps(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x8(r, simde_mm256_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x8_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m256 a = simde_test_x86_random_extract_f32x8(i, 2, 0, values);
    simde__m256 b = simde_test_x86_random_extract_f32x8(i, 2, 1, values);
    simde__m256 r = simde_mm256_maskz_scalef_ps(k, a, b);

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

static int
test_simde_mm512_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 a[16];
    const simde_float32 b[16];
    const simde_float32 r[16];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -941.86),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -47.07),
        SIMDE_FLOAT32_C(  -156.60), SIMDE_FLOAT32_C(   419.86), SIMDE_FLOAT32_C(  -712.98), SIMDE_FLOAT32_C(  -783.29),
        SIMDE_FLOAT32_C(    69.87), SIMDE_FLOAT32_C(   -21.10), SIMDE_FLOAT32_C(  -277.06), SIMDE_FLOAT32_C(   523.29),
        SIMDE_FLOAT32_C(  -586.99), SIMDE_FLOAT32_C(   332.51), SIMDE_FLOAT32_C(   560.50), SIMDE_FLOAT32_C(  -464.61) },
      { SIMDE_FLOAT32_C(   654.36),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   462.88),
        SIMDE_FLOAT32_C(  -277.88), SIMDE_FLOAT32_C(  -634.57), SIMDE_FLOAT32_C(   -80.52), SIMDE_FLOAT32_C(   989.53),
        SIMDE_FLOAT32_C(   286.30), SIMDE_FLOAT32_C(  -241.62), SIMDE_FLOAT32_C(  -571.25), SIMDE_FLOAT32_C(   770.87),
        SIMDE_FLOAT32_C(   519.90), SIMDE_FLOAT32_C(   854.89), SIMDE_FLOAT32_C(   -33.16), SIMDE_FLOAT32_C(   127.70) },
      {            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,            SIMDE_MATH_NANF,     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
            -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF } },
    #endif
    { { SIMDE_FLOAT32_C(   913.03), SIMDE_FLOAT32_C(   -34.30), SIMDE_FLOAT32_C(  -919.38), SIMDE_FLOAT32_C(  -243.57),
        SIMDE_FLOAT32_C(  -614.45), SIMDE_FLOAT32_C(  -632.36), SIMDE_FLOAT32_C(   -26.86), SIMDE_FLOAT32_C(   455.43),
        SIMDE_FLOAT32_C(   346.55), SIMDE_FLOAT32_C(   696.08), SIMDE_FLOAT32_C(   -21.28), SIMDE_FLOAT32_C(   759.56),
        SIMDE_FLOAT32_C(    28.59), SIMDE_FLOAT32_C(  -460.78), SIMDE_FLOAT32_C(  -705.05), SIMDE_FLOAT32_C(  -317.05) },
      { SIMDE_FLOAT32_C(   662.85), SIMDE_FLOAT32_C(    11.06), SIMDE_FLOAT32_C(  -854.18), SIMDE_FLOAT32_C(  -615.03),
        SIMDE_FLOAT32_C(   376.49), SIMDE_FLOAT32_C(    65.30), SIMDE_FLOAT32_C(  -625.50), SIMDE_FLOAT32_C(  -337.21),
        SIMDE_FLOAT32_C(   823.68), SIMDE_FLOAT32_C(  -196.74), SIMDE_FLOAT32_C(  -566.34), SIMDE_FLOAT32_C(   343.57),
        SIMDE_FLOAT32_C(  -341.85), SIMDE_FLOAT32_C(   400.50), SIMDE_FLOAT32_C(  -528.73), SIMDE_FLOAT32_C(  -428.82) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(-70246.40), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00),
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(-23329965624469988835328.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00) } },
    { { SIMDE_FLOAT32_C(  -633.80), SIMDE_FLOAT32_C(  -448.10), SIMDE_FLOAT32_C(   327.62), SIMDE_FLOAT32_C(  -248.25),
        SIMDE_FLOAT32_C(   -80.46), SIMDE_FLOAT32_C(  -699.24), SIMDE_FLOAT32_C(  -792.82), SIMDE_FLOAT32_C(  -733.92),
        SIMDE_FLOAT32_C(   996.84), SIMDE_FLOAT32_C(   185.90), SIMDE_FLOAT32_C(  -974.36), SIMDE_FLOAT32_C(    25.42),
        SIMDE_FLOAT32_C(   725.12), SIMDE_FLOAT32_C(  -679.41), SIMDE_FLOAT32_C(   708.37), SIMDE_FLOAT32_C(   387.97) },
      { SIMDE_FLOAT32_C(   331.65), SIMDE_FLOAT32_C(   854.19), SIMDE_FLOAT32_C(   772.94), SIMDE_FLOAT32_C(  -291.85),
        SIMDE_FLOAT32_C(   -80.51), SIMDE_FLOAT32_C(  -852.55), SIMDE_FLOAT32_C(   370.94), SIMDE_FLOAT32_C(  -256.84),
        SIMDE_FLOAT32_C(   -49.30), SIMDE_FLOAT32_C(   804.60), SIMDE_FLOAT32_C(  -913.26), SIMDE_FLOAT32_C(   608.85),
        SIMDE_FLOAT32_C(   205.10), SIMDE_FLOAT32_C(  -441.99), SIMDE_FLOAT32_C(  -819.97), SIMDE_FLOAT32_C(   571.30) },
      {     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(   109.91), SIMDE_FLOAT32_C(   507.65), SIMDE_FLOAT32_C(  -676.94), SIMDE_FLOAT32_C(  -970.55),
        SIMDE_FLOAT32_C(   808.40), SIMDE_FLOAT32_C(  -469.76), SIMDE_FLOAT32_C(  -704.47), SIMDE_FLOAT32_C(   805.24),
        SIMDE_FLOAT32_C(   716.14), SIMDE_FLOAT32_C(  -678.83), SIMDE_FLOAT32_C(  -169.34), SIMDE_FLOAT32_C(   441.26),
        SIMDE_FLOAT32_C(  -358.23), SIMDE_FLOAT32_C(  -460.97), SIMDE_FLOAT32_C(  -170.77), SIMDE_FLOAT32_C(   973.42) },
      { SIMDE_FLOAT32_C(  -606.78), SIMDE_FLOAT32_C(  -397.82), SIMDE_FLOAT32_C(  -318.44), SIMDE_FLOAT32_C(   312.71),
        SIMDE_FLOAT32_C(  -250.38), SIMDE_FLOAT32_C(  -947.50), SIMDE_FLOAT32_C(  -944.13), SIMDE_FLOAT32_C(   700.32),
        SIMDE_FLOAT32_C(   857.10), SIMDE_FLOAT32_C(  -857.39), SIMDE_FLOAT32_C(   309.17), SIMDE_FLOAT32_C(    62.21),
        SIMDE_FLOAT32_C(  -299.38), SIMDE_FLOAT32_C(   489.21), SIMDE_FLOAT32_C(  -366.49), SIMDE_FLOAT32_C(   810.53) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(2034952617527265460224.00),
        SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(    -3.14), SIMDE_FLOAT32_C(   -43.43), SIMDE_FLOAT32_C(   839.97), SIMDE_FLOAT32_C(  -194.74),
        SIMDE_FLOAT32_C(   486.80), SIMDE_FLOAT32_C(  -864.50), SIMDE_FLOAT32_C(  -389.50), SIMDE_FLOAT32_C(   202.94),
        SIMDE_FLOAT32_C(  -543.32), SIMDE_FLOAT32_C(   441.16), SIMDE_FLOAT32_C(  -355.80), SIMDE_FLOAT32_C(    98.44),
        SIMDE_FLOAT32_C(   980.20), SIMDE_FLOAT32_C(   473.43), SIMDE_FLOAT32_C(    71.86), SIMDE_FLOAT32_C(  -626.58) },
      { SIMDE_FLOAT32_C(  -924.39), SIMDE_FLOAT32_C(   753.42), SIMDE_FLOAT32_C(   686.13), SIMDE_FLOAT32_C(  -174.77),
        SIMDE_FLOAT32_C(   805.92), SIMDE_FLOAT32_C(   742.00), SIMDE_FLOAT32_C(  -474.45), SIMDE_FLOAT32_C(   663.03),
        SIMDE_FLOAT32_C(   884.61), SIMDE_FLOAT32_C(   834.73), SIMDE_FLOAT32_C(  -274.77), SIMDE_FLOAT32_C(  -414.76),
        SIMDE_FLOAT32_C(   323.93), SIMDE_FLOAT32_C(   358.74), SIMDE_FLOAT32_C(  -604.24), SIMDE_FLOAT32_C(  -679.21) },
      { SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
             SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,
            -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),
             SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00) } },
    { { SIMDE_FLOAT32_C(  -684.70), SIMDE_FLOAT32_C(  -764.26), SIMDE_FLOAT32_C(   126.05), SIMDE_FLOAT32_C(   802.11),
        SIMDE_FLOAT32_C(  -628.76), SIMDE_FLOAT32_C(   736.55), SIMDE_FLOAT32_C(     5.05), SIMDE_FLOAT32_C(  -172.08),
        SIMDE_FLOAT32_C(   177.71), SIMDE_FLOAT32_C(   649.25), SIMDE_FLOAT32_C(   926.36), SIMDE_FLOAT32_C(   157.91),
        SIMDE_FLOAT32_C(   122.68), SIMDE_FLOAT32_C(    -1.78), SIMDE_FLOAT32_C(   531.33), SIMDE_FLOAT32_C(   198.28) },
      { SIMDE_FLOAT32_C(  -248.36), SIMDE_FLOAT32_C(   217.45), SIMDE_FLOAT32_C(  -976.49), SIMDE_FLOAT32_C(  -442.43),
        SIMDE_FLOAT32_C(   -40.54), SIMDE_FLOAT32_C(  -450.94), SIMDE_FLOAT32_C(  -779.41), SIMDE_FLOAT32_C(  -155.93),
        SIMDE_FLOAT32_C(  -616.21), SIMDE_FLOAT32_C(   -54.18), SIMDE_FLOAT32_C(   429.31), SIMDE_FLOAT32_C(   707.72),
        SIMDE_FLOAT32_C(  -695.44), SIMDE_FLOAT32_C(   825.07), SIMDE_FLOAT32_C(  -971.49), SIMDE_FLOAT32_C(  -380.13) },
      { SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(  -939.19), SIMDE_FLOAT32_C(   154.56), SIMDE_FLOAT32_C(  -578.03), SIMDE_FLOAT32_C(  -567.95),
        SIMDE_FLOAT32_C(  -108.89), SIMDE_FLOAT32_C(   427.02), SIMDE_FLOAT32_C(   259.97), SIMDE_FLOAT32_C(  -931.18),
        SIMDE_FLOAT32_C(    76.27), SIMDE_FLOAT32_C(   186.33), SIMDE_FLOAT32_C(   226.73), SIMDE_FLOAT32_C(  -801.06),
        SIMDE_FLOAT32_C(  -815.45), SIMDE_FLOAT32_C(  -241.94), SIMDE_FLOAT32_C(   397.23), SIMDE_FLOAT32_C(   -63.80) },
      { SIMDE_FLOAT32_C(   975.51), SIMDE_FLOAT32_C(   420.74), SIMDE_FLOAT32_C(   493.76), SIMDE_FLOAT32_C(   -65.03),
        SIMDE_FLOAT32_C(   969.81), SIMDE_FLOAT32_C(   714.36), SIMDE_FLOAT32_C(   779.04), SIMDE_FLOAT32_C(  -646.40),
        SIMDE_FLOAT32_C(  -339.82), SIMDE_FLOAT32_C(   208.34), SIMDE_FLOAT32_C(  -938.68), SIMDE_FLOAT32_C(   -35.26),
        SIMDE_FLOAT32_C(    33.41), SIMDE_FLOAT32_C(  -910.17), SIMDE_FLOAT32_C(   584.61), SIMDE_FLOAT32_C(    94.22) },
      {     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
            -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(-7004662267904.00), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(-1263689176990943439434161324032.00) } },
    { { SIMDE_FLOAT32_C(   244.39), SIMDE_FLOAT32_C(  -993.42), SIMDE_FLOAT32_C(   526.27), SIMDE_FLOAT32_C(  -864.50),
        SIMDE_FLOAT32_C(   433.60), SIMDE_FLOAT32_C(  -213.76), SIMDE_FLOAT32_C(  -795.68), SIMDE_FLOAT32_C(  -490.13),
        SIMDE_FLOAT32_C(   972.57), SIMDE_FLOAT32_C(   431.05), SIMDE_FLOAT32_C(  -291.19), SIMDE_FLOAT32_C(  -842.88),
        SIMDE_FLOAT32_C(  -810.89), SIMDE_FLOAT32_C(  -893.96), SIMDE_FLOAT32_C(    93.32), SIMDE_FLOAT32_C(  -835.37) },
      { SIMDE_FLOAT32_C(   526.79), SIMDE_FLOAT32_C(  -412.92), SIMDE_FLOAT32_C(    99.60), SIMDE_FLOAT32_C(   496.59),
        SIMDE_FLOAT32_C(  -698.56), SIMDE_FLOAT32_C(  -121.37), SIMDE_FLOAT32_C(   850.19), SIMDE_FLOAT32_C(   -38.38),
        SIMDE_FLOAT32_C(  -913.02), SIMDE_FLOAT32_C(   911.51), SIMDE_FLOAT32_C(   926.36), SIMDE_FLOAT32_C(   120.39),
        SIMDE_FLOAT32_C(  -998.66), SIMDE_FLOAT32_C(   510.97), SIMDE_FLOAT32_C(  -785.39), SIMDE_FLOAT32_C(   245.73) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(333563253070455536416637746937856.00),     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512 a = simde_mm512_loadu_ps(test_vec[i].a);
    simde__m512 b = simde_mm512_loadu_ps(test_vec[i].b);
    simde__m512 r = simde_mm512_scalef_ps(a, b);
    simde_test_x86_assert_equal_f32x16(r, simde_mm512_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x16_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m512 a = simde_test_x86_random_extract_f32x16(i, 2, 0, values);
    simde__m512 b = simde_test_x86_random_extract_f32x16(i, 2, 1, values);
    simde__m512 r = simde_mm512_scalef_ps(a, b);

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

static int
test_simde_mm512_mask_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 src[16];
    const simde__mmask16 k;
    const simde_float32 a[16];
    const simde_float32 b[16];
    const simde_float32 r[16];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT32_C(  -384.09), SIMDE_FLOAT32_C(  -958.76), SIMDE_FLOAT32_C(   466.64), SIMDE_FLOAT32_C(   966.42),
        SIMDE_FLOAT32_C(  -935.87), SIMDE_FLOAT32_C(   220.72), SIMDE_FLOAT32_C(   714.63), SIMDE_FLOAT32_C(   933.35),
        SIMDE_FLOAT32_C(   753.44), SIMDE_FLOAT32_C(  -693.92), SIMDE_FLOAT32_C(  -785.64), SIMDE_FLOAT32_C(   651.72),
        SIMDE_FLOAT32_C(   585.75), SIMDE_FLOAT32_C(   125.22), SIMDE_FLOAT32_C(   285.70), SIMDE_FLOAT32_C(  -119.05) },
      UINT16_C( 6353),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   740.89),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -48.84),
        SIMDE_FLOAT32_C(  -472.87), SIMDE_FLOAT32_C(   585.55), SIMDE_FLOAT32_C(   461.03), SIMDE_FLOAT32_C(  -500.30),
        SIMDE_FLOAT32_C(    16.61), SIMDE_FLOAT32_C(  -830.16), SIMDE_FLOAT32_C(  -343.18), SIMDE_FLOAT32_C(   205.72),
        SIMDE_FLOAT32_C(  -724.11), SIMDE_FLOAT32_C(   750.14), SIMDE_FLOAT32_C(   370.35), SIMDE_FLOAT32_C(   802.67) },
      { SIMDE_FLOAT32_C(  -662.78),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -361.34),
        SIMDE_FLOAT32_C(   348.58), SIMDE_FLOAT32_C(   149.45), SIMDE_FLOAT32_C(   600.28), SIMDE_FLOAT32_C(   435.55),
        SIMDE_FLOAT32_C(    60.96), SIMDE_FLOAT32_C(   526.64), SIMDE_FLOAT32_C(  -444.05), SIMDE_FLOAT32_C(    62.30),
        SIMDE_FLOAT32_C(    37.62), SIMDE_FLOAT32_C(  -229.44), SIMDE_FLOAT32_C(  -691.97), SIMDE_FLOAT32_C(  -444.83) },
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -958.76), SIMDE_FLOAT32_C(   466.64), SIMDE_FLOAT32_C(   966.42),
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(   220.72),      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(   753.44), SIMDE_FLOAT32_C(  -693.92), SIMDE_FLOAT32_C(  -785.64), SIMDE_FLOAT32_C(948716053340381773824.00),
        SIMDE_FLOAT32_C(-99520918585344.00), SIMDE_FLOAT32_C(   125.22), SIMDE_FLOAT32_C(   285.70), SIMDE_FLOAT32_C(  -119.05) } },
    #endif
    { { SIMDE_FLOAT32_C(   622.41), SIMDE_FLOAT32_C(   402.50), SIMDE_FLOAT32_C(   168.18), SIMDE_FLOAT32_C(   951.95),
        SIMDE_FLOAT32_C(   716.56), SIMDE_FLOAT32_C(   604.02), SIMDE_FLOAT32_C(   275.93), SIMDE_FLOAT32_C(  -553.03),
        SIMDE_FLOAT32_C(    55.37), SIMDE_FLOAT32_C(   762.73), SIMDE_FLOAT32_C(  -158.00), SIMDE_FLOAT32_C(   316.47),
        SIMDE_FLOAT32_C(   320.59), SIMDE_FLOAT32_C(   457.91), SIMDE_FLOAT32_C(   357.71), SIMDE_FLOAT32_C(  -212.77) },
      UINT16_C(57868),
      { SIMDE_FLOAT32_C(  -488.55), SIMDE_FLOAT32_C(   689.26), SIMDE_FLOAT32_C(   506.33), SIMDE_FLOAT32_C(    38.58),
        SIMDE_FLOAT32_C(   274.81), SIMDE_FLOAT32_C(   -32.64), SIMDE_FLOAT32_C(   538.27), SIMDE_FLOAT32_C(  -708.59),
        SIMDE_FLOAT32_C(   137.20), SIMDE_FLOAT32_C(  -804.91), SIMDE_FLOAT32_C(   497.13), SIMDE_FLOAT32_C(   413.09),
        SIMDE_FLOAT32_C(   945.23), SIMDE_FLOAT32_C(  -132.52), SIMDE_FLOAT32_C(   215.76), SIMDE_FLOAT32_C(  -717.54) },
      { SIMDE_FLOAT32_C(   337.42), SIMDE_FLOAT32_C(  -484.97), SIMDE_FLOAT32_C(   -78.88), SIMDE_FLOAT32_C(  -314.00),
        SIMDE_FLOAT32_C(   664.48), SIMDE_FLOAT32_C(  -478.60), SIMDE_FLOAT32_C(  -878.45), SIMDE_FLOAT32_C(  -274.56),
        SIMDE_FLOAT32_C(  -951.95), SIMDE_FLOAT32_C(  -322.50), SIMDE_FLOAT32_C(   787.74), SIMDE_FLOAT32_C(    85.66),
        SIMDE_FLOAT32_C(   448.06), SIMDE_FLOAT32_C(  -904.23), SIMDE_FLOAT32_C(   640.83), SIMDE_FLOAT32_C(   959.51) },
      { SIMDE_FLOAT32_C(   622.41), SIMDE_FLOAT32_C(   402.50), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(   716.56), SIMDE_FLOAT32_C(   604.02), SIMDE_FLOAT32_C(   275.93), SIMDE_FLOAT32_C(  -553.03),
        SIMDE_FLOAT32_C(    55.37), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(  -158.00), SIMDE_FLOAT32_C(   316.47),
        SIMDE_FLOAT32_C(   320.59), SIMDE_FLOAT32_C(    -0.00),      SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(  -992.05), SIMDE_FLOAT32_C(   138.95), SIMDE_FLOAT32_C(   355.18), SIMDE_FLOAT32_C(   761.39),
        SIMDE_FLOAT32_C(   445.03), SIMDE_FLOAT32_C(   569.54), SIMDE_FLOAT32_C(   413.11), SIMDE_FLOAT32_C(    30.79),
        SIMDE_FLOAT32_C(  -305.24), SIMDE_FLOAT32_C(  -301.19), SIMDE_FLOAT32_C(   911.73), SIMDE_FLOAT32_C(  -292.42),
        SIMDE_FLOAT32_C(  -913.23), SIMDE_FLOAT32_C(   534.14), SIMDE_FLOAT32_C(  -889.91), SIMDE_FLOAT32_C(   254.96) },
      UINT16_C(49817),
      { SIMDE_FLOAT32_C(   785.03), SIMDE_FLOAT32_C(   147.16), SIMDE_FLOAT32_C(    -1.92), SIMDE_FLOAT32_C(    59.84),
        SIMDE_FLOAT32_C(  -885.48), SIMDE_FLOAT32_C(  -463.64), SIMDE_FLOAT32_C(   351.25), SIMDE_FLOAT32_C(   251.72),
        SIMDE_FLOAT32_C(  -268.55), SIMDE_FLOAT32_C(  -151.61), SIMDE_FLOAT32_C(  -335.18), SIMDE_FLOAT32_C(  -323.32),
        SIMDE_FLOAT32_C(   715.87), SIMDE_FLOAT32_C(   880.58), SIMDE_FLOAT32_C(   -40.86), SIMDE_FLOAT32_C(    53.29) },
      { SIMDE_FLOAT32_C(  -604.39), SIMDE_FLOAT32_C(   880.26), SIMDE_FLOAT32_C(   739.29), SIMDE_FLOAT32_C(  -939.91),
        SIMDE_FLOAT32_C(  -598.33), SIMDE_FLOAT32_C(   860.84), SIMDE_FLOAT32_C(  -214.46), SIMDE_FLOAT32_C(  -550.28),
        SIMDE_FLOAT32_C(  -461.66), SIMDE_FLOAT32_C(  -426.72), SIMDE_FLOAT32_C(   535.38), SIMDE_FLOAT32_C(   986.40),
        SIMDE_FLOAT32_C(  -330.95), SIMDE_FLOAT32_C(   176.21), SIMDE_FLOAT32_C(   945.91), SIMDE_FLOAT32_C(  -545.92) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   138.95), SIMDE_FLOAT32_C(   355.18), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   569.54), SIMDE_FLOAT32_C(   413.11), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(  -305.24), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   911.73), SIMDE_FLOAT32_C(  -292.42),
        SIMDE_FLOAT32_C(  -913.23), SIMDE_FLOAT32_C(   534.14),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(  -141.02), SIMDE_FLOAT32_C(  -237.99), SIMDE_FLOAT32_C(  -726.39), SIMDE_FLOAT32_C(   914.35),
        SIMDE_FLOAT32_C(  -475.26), SIMDE_FLOAT32_C(   115.61), SIMDE_FLOAT32_C(   230.82), SIMDE_FLOAT32_C(   845.33),
        SIMDE_FLOAT32_C(  -426.47), SIMDE_FLOAT32_C(  -411.48), SIMDE_FLOAT32_C(  -367.44), SIMDE_FLOAT32_C(   997.86),
        SIMDE_FLOAT32_C(  -989.64), SIMDE_FLOAT32_C(  -359.48), SIMDE_FLOAT32_C(   136.81), SIMDE_FLOAT32_C(   365.54) },
      UINT16_C(52705),
      { SIMDE_FLOAT32_C(  -676.62), SIMDE_FLOAT32_C(   -56.01), SIMDE_FLOAT32_C(   513.92), SIMDE_FLOAT32_C(  -562.10),
        SIMDE_FLOAT32_C(   480.35), SIMDE_FLOAT32_C(  -134.83), SIMDE_FLOAT32_C(   689.63), SIMDE_FLOAT32_C(  -788.20),
        SIMDE_FLOAT32_C(   713.56), SIMDE_FLOAT32_C(  -645.56), SIMDE_FLOAT32_C(  -111.52), SIMDE_FLOAT32_C(   429.42),
        SIMDE_FLOAT32_C(  -764.98), SIMDE_FLOAT32_C(   847.63), SIMDE_FLOAT32_C(  -517.29), SIMDE_FLOAT32_C(  -369.37) },
      { SIMDE_FLOAT32_C(   727.89), SIMDE_FLOAT32_C(  -778.00), SIMDE_FLOAT32_C(  -309.27), SIMDE_FLOAT32_C(  -870.44),
        SIMDE_FLOAT32_C(  -917.16), SIMDE_FLOAT32_C(   476.26), SIMDE_FLOAT32_C(  -420.73), SIMDE_FLOAT32_C(  -378.82),
        SIMDE_FLOAT32_C(  -950.46), SIMDE_FLOAT32_C(  -885.35), SIMDE_FLOAT32_C(  -392.42), SIMDE_FLOAT32_C(  -281.40),
        SIMDE_FLOAT32_C(   290.87), SIMDE_FLOAT32_C(  -446.51), SIMDE_FLOAT32_C(   172.67), SIMDE_FLOAT32_C(   614.25) },
      {     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -237.99), SIMDE_FLOAT32_C(  -726.39), SIMDE_FLOAT32_C(   914.35),
        SIMDE_FLOAT32_C(  -475.26),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -411.48), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(  -989.64), SIMDE_FLOAT32_C(  -359.48),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF } },
    { { SIMDE_FLOAT32_C(   -64.92), SIMDE_FLOAT32_C(   815.02), SIMDE_FLOAT32_C(   612.63), SIMDE_FLOAT32_C(   629.84),
        SIMDE_FLOAT32_C(  -486.17), SIMDE_FLOAT32_C(   524.36), SIMDE_FLOAT32_C(  -662.57), SIMDE_FLOAT32_C(  -399.40),
        SIMDE_FLOAT32_C(    58.50), SIMDE_FLOAT32_C(  -552.49), SIMDE_FLOAT32_C(   855.56), SIMDE_FLOAT32_C(  -455.41),
        SIMDE_FLOAT32_C(  -725.84), SIMDE_FLOAT32_C(  -285.46), SIMDE_FLOAT32_C(   306.60), SIMDE_FLOAT32_C(  -452.23) },
      UINT16_C(57400),
      { SIMDE_FLOAT32_C(   497.48), SIMDE_FLOAT32_C(  -313.41), SIMDE_FLOAT32_C(  -947.85), SIMDE_FLOAT32_C(   -22.17),
        SIMDE_FLOAT32_C(   551.76), SIMDE_FLOAT32_C(   741.77), SIMDE_FLOAT32_C(   189.63), SIMDE_FLOAT32_C(   265.32),
        SIMDE_FLOAT32_C(  -903.79), SIMDE_FLOAT32_C(  -921.89), SIMDE_FLOAT32_C(  -305.26), SIMDE_FLOAT32_C(  -668.76),
        SIMDE_FLOAT32_C(   925.73), SIMDE_FLOAT32_C(   177.45), SIMDE_FLOAT32_C(   -38.13), SIMDE_FLOAT32_C(   653.62) },
      { SIMDE_FLOAT32_C(   399.45), SIMDE_FLOAT32_C(   652.59), SIMDE_FLOAT32_C(   783.18), SIMDE_FLOAT32_C(   482.29),
        SIMDE_FLOAT32_C(   128.86), SIMDE_FLOAT32_C(  -637.55), SIMDE_FLOAT32_C(  -896.53), SIMDE_FLOAT32_C(   178.40),
        SIMDE_FLOAT32_C(  -522.89), SIMDE_FLOAT32_C(  -288.94), SIMDE_FLOAT32_C(   897.00), SIMDE_FLOAT32_C(   767.97),
        SIMDE_FLOAT32_C(   264.55), SIMDE_FLOAT32_C(    69.67), SIMDE_FLOAT32_C(   382.22), SIMDE_FLOAT32_C(  -237.97) },
      { SIMDE_FLOAT32_C(   -64.92), SIMDE_FLOAT32_C(   815.02), SIMDE_FLOAT32_C(   612.63),     -SIMDE_MATH_INFINITYF,
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -662.57), SIMDE_FLOAT32_C(  -399.40),
        SIMDE_FLOAT32_C(    58.50), SIMDE_FLOAT32_C(  -552.49), SIMDE_FLOAT32_C(   855.56), SIMDE_FLOAT32_C(  -455.41),
        SIMDE_FLOAT32_C(  -725.84), SIMDE_FLOAT32_C(104747989746712466948096.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00) } },
    { { SIMDE_FLOAT32_C(   663.39), SIMDE_FLOAT32_C(   859.70), SIMDE_FLOAT32_C(   676.68), SIMDE_FLOAT32_C(  -763.09),
        SIMDE_FLOAT32_C(  -551.77), SIMDE_FLOAT32_C(  -690.76), SIMDE_FLOAT32_C(  -765.23), SIMDE_FLOAT32_C(  -541.42),
        SIMDE_FLOAT32_C(   -50.24), SIMDE_FLOAT32_C(   371.58), SIMDE_FLOAT32_C(   824.12), SIMDE_FLOAT32_C(   351.66),
        SIMDE_FLOAT32_C(   953.42), SIMDE_FLOAT32_C(  -240.79), SIMDE_FLOAT32_C(   166.68), SIMDE_FLOAT32_C(   566.05) },
      UINT16_C(32446),
      { SIMDE_FLOAT32_C(   756.26), SIMDE_FLOAT32_C(   434.37), SIMDE_FLOAT32_C(   739.85), SIMDE_FLOAT32_C(   308.03),
        SIMDE_FLOAT32_C(   176.14), SIMDE_FLOAT32_C(   -70.52), SIMDE_FLOAT32_C(  -426.66), SIMDE_FLOAT32_C(   272.35),
        SIMDE_FLOAT32_C(     7.59), SIMDE_FLOAT32_C(   268.08), SIMDE_FLOAT32_C(   603.59), SIMDE_FLOAT32_C(   -66.68),
        SIMDE_FLOAT32_C(  -554.46), SIMDE_FLOAT32_C(  -434.54), SIMDE_FLOAT32_C(  -413.06), SIMDE_FLOAT32_C(   844.99) },
      { SIMDE_FLOAT32_C(  -781.95), SIMDE_FLOAT32_C(  -629.87), SIMDE_FLOAT32_C(   327.28), SIMDE_FLOAT32_C(   346.91),
        SIMDE_FLOAT32_C(  -267.42), SIMDE_FLOAT32_C(   430.76), SIMDE_FLOAT32_C(  -474.69), SIMDE_FLOAT32_C(   209.69),
        SIMDE_FLOAT32_C(  -858.19), SIMDE_FLOAT32_C(  -577.69), SIMDE_FLOAT32_C(   -22.34), SIMDE_FLOAT32_C(   406.36),
        SIMDE_FLOAT32_C(   491.98), SIMDE_FLOAT32_C(  -640.12), SIMDE_FLOAT32_C(  -831.62), SIMDE_FLOAT32_C(   248.25) },
      { SIMDE_FLOAT32_C(   663.39), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -765.23),      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(   -50.24), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   566.05) } },
    { { SIMDE_FLOAT32_C(    90.40), SIMDE_FLOAT32_C(  -273.52), SIMDE_FLOAT32_C(  -718.89), SIMDE_FLOAT32_C(  -851.10),
        SIMDE_FLOAT32_C(   173.99), SIMDE_FLOAT32_C(  -863.33), SIMDE_FLOAT32_C(  -306.51), SIMDE_FLOAT32_C(   448.15),
        SIMDE_FLOAT32_C(  -148.79), SIMDE_FLOAT32_C(  -999.91), SIMDE_FLOAT32_C(   995.92), SIMDE_FLOAT32_C(   480.10),
        SIMDE_FLOAT32_C(   831.43), SIMDE_FLOAT32_C(   659.31), SIMDE_FLOAT32_C(   339.80), SIMDE_FLOAT32_C(   508.11) },
      UINT16_C( 2559),
      { SIMDE_FLOAT32_C(   794.25), SIMDE_FLOAT32_C(   908.24), SIMDE_FLOAT32_C(  -443.72), SIMDE_FLOAT32_C(   -29.61),
        SIMDE_FLOAT32_C(  -162.28), SIMDE_FLOAT32_C(   129.62), SIMDE_FLOAT32_C(  -757.26), SIMDE_FLOAT32_C(   845.31),
        SIMDE_FLOAT32_C(  -602.30), SIMDE_FLOAT32_C(   846.33), SIMDE_FLOAT32_C(  -221.37), SIMDE_FLOAT32_C(  -156.76),
        SIMDE_FLOAT32_C(  -588.21), SIMDE_FLOAT32_C(   365.57), SIMDE_FLOAT32_C(  -311.77), SIMDE_FLOAT32_C(  -370.16) },
      { SIMDE_FLOAT32_C(   735.70), SIMDE_FLOAT32_C(  -984.49), SIMDE_FLOAT32_C(   976.75), SIMDE_FLOAT32_C(  -531.72),
        SIMDE_FLOAT32_C(   446.27), SIMDE_FLOAT32_C(  -497.93), SIMDE_FLOAT32_C(   677.96), SIMDE_FLOAT32_C(   588.08),
        SIMDE_FLOAT32_C(   -75.62), SIMDE_FLOAT32_C(  -344.38), SIMDE_FLOAT32_C(    -5.56), SIMDE_FLOAT32_C(  -583.64),
        SIMDE_FLOAT32_C(    15.50), SIMDE_FLOAT32_C(   162.82), SIMDE_FLOAT32_C(   664.61), SIMDE_FLOAT32_C(  -190.25) },
      {      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00),
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(  -999.91), SIMDE_FLOAT32_C(   995.92), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(   831.43), SIMDE_FLOAT32_C(   659.31), SIMDE_FLOAT32_C(   339.80), SIMDE_FLOAT32_C(   508.11) } },
    { { SIMDE_FLOAT32_C(   817.35), SIMDE_FLOAT32_C(  -869.01), SIMDE_FLOAT32_C(  -753.39), SIMDE_FLOAT32_C(  -232.89),
        SIMDE_FLOAT32_C(   502.57), SIMDE_FLOAT32_C(  -929.27), SIMDE_FLOAT32_C(  -881.23), SIMDE_FLOAT32_C(   455.99),
        SIMDE_FLOAT32_C(  -170.06), SIMDE_FLOAT32_C(   285.45), SIMDE_FLOAT32_C(    22.03), SIMDE_FLOAT32_C(   218.99),
        SIMDE_FLOAT32_C(   -34.04), SIMDE_FLOAT32_C(  -887.56), SIMDE_FLOAT32_C(   945.47), SIMDE_FLOAT32_C(   247.07) },
      UINT16_C(32166),
      { SIMDE_FLOAT32_C(    71.06), SIMDE_FLOAT32_C(  -779.11), SIMDE_FLOAT32_C(   780.14), SIMDE_FLOAT32_C(   908.78),
        SIMDE_FLOAT32_C(   350.50), SIMDE_FLOAT32_C(  -977.11), SIMDE_FLOAT32_C(   754.08), SIMDE_FLOAT32_C(   748.21),
        SIMDE_FLOAT32_C(   869.22), SIMDE_FLOAT32_C(  -467.29), SIMDE_FLOAT32_C(  -408.55), SIMDE_FLOAT32_C(  -718.99),
        SIMDE_FLOAT32_C(   898.28), SIMDE_FLOAT32_C(   279.68), SIMDE_FLOAT32_C(   -89.14), SIMDE_FLOAT32_C(   633.98) },
      { SIMDE_FLOAT32_C(   295.19), SIMDE_FLOAT32_C(  -112.39), SIMDE_FLOAT32_C(  -897.74), SIMDE_FLOAT32_C(  -258.54),
        SIMDE_FLOAT32_C(   389.68), SIMDE_FLOAT32_C(   780.22), SIMDE_FLOAT32_C(  -670.46), SIMDE_FLOAT32_C(  -685.95),
        SIMDE_FLOAT32_C(  -564.16), SIMDE_FLOAT32_C(   323.98), SIMDE_FLOAT32_C(  -269.58), SIMDE_FLOAT32_C(   451.34),
        SIMDE_FLOAT32_C(  -513.20), SIMDE_FLOAT32_C(  -604.97), SIMDE_FLOAT32_C(  -738.90), SIMDE_FLOAT32_C(   557.86) },
      { SIMDE_FLOAT32_C(   817.35), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(  -232.89),
        SIMDE_FLOAT32_C(   502.57),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(  -881.23), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   285.45), SIMDE_FLOAT32_C(    -0.00),     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   247.07) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512 src = simde_mm512_loadu_ps(test_vec[i].src);
    simde__m512 a = simde_mm512_loadu_ps(test_vec[i].a);
    simde__m512 b = simde_mm512_loadu_ps(test_vec[i].b);
    simde__m512 r = simde_mm512_mask_scalef_ps(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x16(r, simde_mm512_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x16_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m512 src = simde_test_x86_random_f32x16(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
    simde__mmask16 k = simde_test_x86_random_mmask16();
    simde__m512 a = simde_test_x86_random_extract_f32x16(i, 2, 0, values);
    simde__m512 b = simde_test_x86_random_extract_f32x16(i, 2, 1, values);
    simde__m512 r = simde_mm512_mask_scalef_ps(src, k, a, b);

    simde_test_x86_write_f32x16(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask16(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x16(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x16(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x16(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm512_maskz_scalef_ps (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask16 k;
    const simde_float32 a[16];
    const simde_float32 b[16];
    const simde_float32 r[16];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT16_C(60257),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   254.81),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(  -407.97),
        SIMDE_FLOAT32_C(   760.87), SIMDE_FLOAT32_C(  -325.12), SIMDE_FLOAT32_C(    16.51), SIMDE_FLOAT32_C(    38.28),
        SIMDE_FLOAT32_C(   599.38), SIMDE_FLOAT32_C(   485.34), SIMDE_FLOAT32_C(   133.72), SIMDE_FLOAT32_C(   580.55),
        SIMDE_FLOAT32_C(  -139.95), SIMDE_FLOAT32_C(  -474.22), SIMDE_FLOAT32_C(  -119.72), SIMDE_FLOAT32_C(   230.75) },
      { SIMDE_FLOAT32_C(   613.23),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   488.81),
        SIMDE_FLOAT32_C(   971.27), SIMDE_FLOAT32_C(   124.58), SIMDE_FLOAT32_C(  -409.85), SIMDE_FLOAT32_C(  -229.54),
        SIMDE_FLOAT32_C(  -583.28), SIMDE_FLOAT32_C(   611.22), SIMDE_FLOAT32_C(   -28.00), SIMDE_FLOAT32_C(   -40.38),
        SIMDE_FLOAT32_C(   556.64), SIMDE_FLOAT32_C(   264.91), SIMDE_FLOAT32_C(   835.06), SIMDE_FLOAT32_C(   -53.83) },
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00) } },
    #endif
    { UINT16_C(18948),
      { SIMDE_FLOAT32_C(  -480.28), SIMDE_FLOAT32_C(   460.06), SIMDE_FLOAT32_C(   538.20), SIMDE_FLOAT32_C(  -719.40),
        SIMDE_FLOAT32_C(  -865.06), SIMDE_FLOAT32_C(  -445.29), SIMDE_FLOAT32_C(   318.88), SIMDE_FLOAT32_C(   734.32),
        SIMDE_FLOAT32_C(  -959.95), SIMDE_FLOAT32_C(  -547.40), SIMDE_FLOAT32_C(   314.88), SIMDE_FLOAT32_C(   -99.90),
        SIMDE_FLOAT32_C(   -21.62), SIMDE_FLOAT32_C(  -804.84), SIMDE_FLOAT32_C(  -869.16), SIMDE_FLOAT32_C(  -408.39) },
      { SIMDE_FLOAT32_C(   239.48), SIMDE_FLOAT32_C(  -209.55), SIMDE_FLOAT32_C(  -919.58), SIMDE_FLOAT32_C(   210.74),
        SIMDE_FLOAT32_C(   915.03), SIMDE_FLOAT32_C(  -329.43), SIMDE_FLOAT32_C(   981.21), SIMDE_FLOAT32_C(  -668.25),
        SIMDE_FLOAT32_C(  -718.22), SIMDE_FLOAT32_C(   -46.79), SIMDE_FLOAT32_C(   291.36), SIMDE_FLOAT32_C(   838.42),
        SIMDE_FLOAT32_C(  -781.88), SIMDE_FLOAT32_C(   126.42), SIMDE_FLOAT32_C(  -215.40), SIMDE_FLOAT32_C(  -262.16) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT16_C(38861),
      { SIMDE_FLOAT32_C(  -413.52), SIMDE_FLOAT32_C(  -677.20), SIMDE_FLOAT32_C(    18.44), SIMDE_FLOAT32_C(  -278.58),
        SIMDE_FLOAT32_C(  -122.49), SIMDE_FLOAT32_C(  -662.68), SIMDE_FLOAT32_C(  -544.26), SIMDE_FLOAT32_C(   -82.44),
        SIMDE_FLOAT32_C(  -210.08), SIMDE_FLOAT32_C(   770.62), SIMDE_FLOAT32_C(   817.65), SIMDE_FLOAT32_C(   768.30),
        SIMDE_FLOAT32_C(   965.78), SIMDE_FLOAT32_C(   948.50), SIMDE_FLOAT32_C(  -640.09), SIMDE_FLOAT32_C(   205.26) },
      { SIMDE_FLOAT32_C(  -261.05), SIMDE_FLOAT32_C(  -559.68), SIMDE_FLOAT32_C(  -584.00), SIMDE_FLOAT32_C(  -346.02),
        SIMDE_FLOAT32_C(   110.89), SIMDE_FLOAT32_C(  -602.79), SIMDE_FLOAT32_C(   -14.27), SIMDE_FLOAT32_C(   392.68),
        SIMDE_FLOAT32_C(   350.41), SIMDE_FLOAT32_C(  -722.91), SIMDE_FLOAT32_C(   231.10), SIMDE_FLOAT32_C(   568.53),
        SIMDE_FLOAT32_C(   403.51), SIMDE_FLOAT32_C(  -984.30), SIMDE_FLOAT32_C(  -693.63), SIMDE_FLOAT32_C(   989.99) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.02),     -SIMDE_MATH_INFINITYF,
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { UINT16_C( 9085),
      { SIMDE_FLOAT32_C(  -661.50), SIMDE_FLOAT32_C(   324.81), SIMDE_FLOAT32_C(  -288.59), SIMDE_FLOAT32_C(   216.01),
        SIMDE_FLOAT32_C(   662.13), SIMDE_FLOAT32_C(   167.15), SIMDE_FLOAT32_C(  -866.44), SIMDE_FLOAT32_C(  -547.95),
        SIMDE_FLOAT32_C(   -62.23), SIMDE_FLOAT32_C(   951.22), SIMDE_FLOAT32_C(  -779.65), SIMDE_FLOAT32_C(   -96.45),
        SIMDE_FLOAT32_C(   899.71), SIMDE_FLOAT32_C(  -419.75), SIMDE_FLOAT32_C(  -891.19), SIMDE_FLOAT32_C(  -361.34) },
      { SIMDE_FLOAT32_C(    20.58), SIMDE_FLOAT32_C(  -475.19), SIMDE_FLOAT32_C(   292.64), SIMDE_FLOAT32_C(  -868.53),
        SIMDE_FLOAT32_C(   -77.98), SIMDE_FLOAT32_C(  -721.63), SIMDE_FLOAT32_C(   524.15), SIMDE_FLOAT32_C(  -727.57),
        SIMDE_FLOAT32_C(  -444.54), SIMDE_FLOAT32_C(  -244.75), SIMDE_FLOAT32_C(   840.96), SIMDE_FLOAT32_C(   958.97),
        SIMDE_FLOAT32_C(  -229.06), SIMDE_FLOAT32_C(  -852.67), SIMDE_FLOAT32_C(   948.96), SIMDE_FLOAT32_C(   109.44) },
      { SIMDE_FLOAT32_C(-693633024.00), SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT16_C(43730),
      { SIMDE_FLOAT32_C(   472.13), SIMDE_FLOAT32_C(  -339.63), SIMDE_FLOAT32_C(  -674.55), SIMDE_FLOAT32_C(   134.26),
        SIMDE_FLOAT32_C(   827.52), SIMDE_FLOAT32_C(  -540.99), SIMDE_FLOAT32_C(   586.31), SIMDE_FLOAT32_C(  -234.71),
        SIMDE_FLOAT32_C(  -589.77), SIMDE_FLOAT32_C(   806.65), SIMDE_FLOAT32_C(   668.84), SIMDE_FLOAT32_C(  -690.06),
        SIMDE_FLOAT32_C(  -613.09), SIMDE_FLOAT32_C(   777.65), SIMDE_FLOAT32_C(   -51.40), SIMDE_FLOAT32_C(   407.49) },
      { SIMDE_FLOAT32_C(  -697.54), SIMDE_FLOAT32_C(  -758.76), SIMDE_FLOAT32_C(   538.96), SIMDE_FLOAT32_C(   224.47),
        SIMDE_FLOAT32_C(  -480.40), SIMDE_FLOAT32_C(    63.11), SIMDE_FLOAT32_C(   496.90), SIMDE_FLOAT32_C(    75.06),
        SIMDE_FLOAT32_C(   818.35), SIMDE_FLOAT32_C(   337.86), SIMDE_FLOAT32_C(    34.03), SIMDE_FLOAT32_C(  -410.70),
        SIMDE_FLOAT32_C(   485.18), SIMDE_FLOAT32_C(   -17.01), SIMDE_FLOAT32_C(   698.74), SIMDE_FLOAT32_C(   -42.68) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(-8867093351197406438359040.00),
        SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT16_C(37360),
      { SIMDE_FLOAT32_C(   643.36), SIMDE_FLOAT32_C(  -975.82), SIMDE_FLOAT32_C(  -908.42), SIMDE_FLOAT32_C(   470.88),
        SIMDE_FLOAT32_C(  -516.81), SIMDE_FLOAT32_C(   677.89), SIMDE_FLOAT32_C(  -763.83), SIMDE_FLOAT32_C(  -106.58),
        SIMDE_FLOAT32_C(   484.54), SIMDE_FLOAT32_C(   905.01), SIMDE_FLOAT32_C(   203.36), SIMDE_FLOAT32_C(   871.45),
        SIMDE_FLOAT32_C(   682.65), SIMDE_FLOAT32_C(  -848.04), SIMDE_FLOAT32_C(   278.94), SIMDE_FLOAT32_C(   985.11) },
      { SIMDE_FLOAT32_C(  -606.80), SIMDE_FLOAT32_C(  -182.10), SIMDE_FLOAT32_C(   209.58), SIMDE_FLOAT32_C(   -87.20),
        SIMDE_FLOAT32_C(   881.00), SIMDE_FLOAT32_C(  -293.52), SIMDE_FLOAT32_C(   987.86), SIMDE_FLOAT32_C(   699.35),
        SIMDE_FLOAT32_C(  -955.66), SIMDE_FLOAT32_C(    21.89), SIMDE_FLOAT32_C(  -711.35), SIMDE_FLOAT32_C(   529.52),
        SIMDE_FLOAT32_C(  -995.12), SIMDE_FLOAT32_C(   987.39), SIMDE_FLOAT32_C(  -513.16), SIMDE_FLOAT32_C(   648.24) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),     -SIMDE_MATH_INFINITYF,     -SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF } },
    { UINT16_C(23765),
      { SIMDE_FLOAT32_C(  -988.43), SIMDE_FLOAT32_C(  -421.58), SIMDE_FLOAT32_C(   119.12), SIMDE_FLOAT32_C(  -505.24),
        SIMDE_FLOAT32_C(  -743.69), SIMDE_FLOAT32_C(   355.29), SIMDE_FLOAT32_C(   388.18), SIMDE_FLOAT32_C(   740.85),
        SIMDE_FLOAT32_C(   260.29), SIMDE_FLOAT32_C(  -408.46), SIMDE_FLOAT32_C(   612.30), SIMDE_FLOAT32_C(   -57.05),
        SIMDE_FLOAT32_C(  -256.50), SIMDE_FLOAT32_C(  -108.76), SIMDE_FLOAT32_C(   -71.94), SIMDE_FLOAT32_C(   136.70) },
      { SIMDE_FLOAT32_C(   709.14), SIMDE_FLOAT32_C(  -862.36), SIMDE_FLOAT32_C(  -950.50), SIMDE_FLOAT32_C(   590.14),
        SIMDE_FLOAT32_C(  -155.88), SIMDE_FLOAT32_C(  -962.63), SIMDE_FLOAT32_C(   289.49), SIMDE_FLOAT32_C(  -111.55),
        SIMDE_FLOAT32_C(    59.26), SIMDE_FLOAT32_C(   578.14), SIMDE_FLOAT32_C(  -582.02), SIMDE_FLOAT32_C(    64.14),
        SIMDE_FLOAT32_C(   565.53), SIMDE_FLOAT32_C(   -95.18), SIMDE_FLOAT32_C(  -287.62), SIMDE_FLOAT32_C(   577.10) },
      {     -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(-1052386735331381084160.00),
            -SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00) } },
    { UINT16_C(13355),
      { SIMDE_FLOAT32_C(   483.24), SIMDE_FLOAT32_C(   831.50), SIMDE_FLOAT32_C(  -928.13), SIMDE_FLOAT32_C(   739.55),
        SIMDE_FLOAT32_C(   186.79), SIMDE_FLOAT32_C(   460.05), SIMDE_FLOAT32_C(   480.40), SIMDE_FLOAT32_C(  -552.91),
        SIMDE_FLOAT32_C(  -948.41), SIMDE_FLOAT32_C(    92.70), SIMDE_FLOAT32_C(   390.03), SIMDE_FLOAT32_C(  -204.90),
        SIMDE_FLOAT32_C(   983.95), SIMDE_FLOAT32_C(  -681.91), SIMDE_FLOAT32_C(   931.80), SIMDE_FLOAT32_C(   693.08) },
      { SIMDE_FLOAT32_C(  -544.27), SIMDE_FLOAT32_C(   981.30), SIMDE_FLOAT32_C(   283.22), SIMDE_FLOAT32_C(   299.84),
        SIMDE_FLOAT32_C(  -981.34), SIMDE_FLOAT32_C(  -427.29), SIMDE_FLOAT32_C(  -811.70), SIMDE_FLOAT32_C(    77.92),
        SIMDE_FLOAT32_C(  -849.14), SIMDE_FLOAT32_C(  -393.73), SIMDE_FLOAT32_C(  -857.94), SIMDE_FLOAT32_C(   716.39),
        SIMDE_FLOAT32_C(   511.09), SIMDE_FLOAT32_C(  -145.55), SIMDE_FLOAT32_C(   293.49), SIMDE_FLOAT32_C(    -5.67) },
      { SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(     0.00),      SIMDE_MATH_INFINITYF,
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
        SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00),
             SIMDE_MATH_INFINITYF, SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512 a = simde_mm512_loadu_ps(test_vec[i].a);
    simde__m512 b = simde_mm512_loadu_ps(test_vec[i].b);
    simde__m512 r = simde_mm512_maskz_scalef_ps(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x16(r, simde_mm512_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x16_full(8, 2, values, -1000.0f, 1000.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask16 k = simde_test_x86_random_mmask16();
    simde__m512 a = simde_test_x86_random_extract_f32x16(i, 2, 0, values);
    simde__m512 b = simde_test_x86_random_extract_f32x16(i, 2, 1, values);
    simde__m512 r = simde_mm512_maskz_scalef_ps(k, a, b);

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

static int
test_simde_mm_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    14.65) },
      { SIMDE_FLOAT64_C(    73.76),             SIMDE_MATH_NAN },
      {             SIMDE_MATH_NAN,             SIMDE_MATH_NAN } },
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -30.10) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -60.62) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -0.00) } },
    #endif
    { { SIMDE_FLOAT64_C(    18.39), SIMDE_FLOAT64_C(   -19.05) },
      { SIMDE_FLOAT64_C(     8.69), SIMDE_FLOAT64_C(     2.38) },
      { SIMDE_FLOAT64_C(  4707.84), SIMDE_FLOAT64_C(   -76.20) } },
    { { SIMDE_FLOAT64_C(   -25.14), SIMDE_FLOAT64_C(    99.57) },
      { SIMDE_FLOAT64_C(    63.92), SIMDE_FLOAT64_C(    15.05) },
      { SIMDE_FLOAT64_C(-231875573006529069056.00), SIMDE_FLOAT64_C(3262709.76) } },
    { { SIMDE_FLOAT64_C(   -26.71), SIMDE_FLOAT64_C(   -61.81) },
      { SIMDE_FLOAT64_C(    53.58), SIMDE_FLOAT64_C(   -85.95) },
      { SIMDE_FLOAT64_C(-240582292094131904.00), SIMDE_FLOAT64_C(    -0.00) } },
    { { SIMDE_FLOAT64_C(    30.91), SIMDE_FLOAT64_C(    80.20) },
      { SIMDE_FLOAT64_C(   -51.60), SIMDE_FLOAT64_C(   -87.81) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { { SIMDE_FLOAT64_C(    50.75), SIMDE_FLOAT64_C(   -84.71) },
      { SIMDE_FLOAT64_C(   -31.49), SIMDE_FLOAT64_C(    85.93) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-3277059397745767354566967296.00) } },
    { { SIMDE_FLOAT64_C(   -22.94), SIMDE_FLOAT64_C(     9.42) },
      { SIMDE_FLOAT64_C(    83.85), SIMDE_FLOAT64_C(     4.58) },
      { SIMDE_FLOAT64_C(-221862066415676758511583232.00), SIMDE_FLOAT64_C(   150.72) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_scalef_pd(a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_scalef_pd(a, b);

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

static int
test_simde_mm_mask_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 src[2];
    const simde__mmask8 k;
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT64_C(  -683.93), SIMDE_FLOAT64_C(  -643.14) },
      UINT8_C( 97),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    57.61) },
      { SIMDE_FLOAT64_C(    53.43),             SIMDE_MATH_NAN },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(  -643.14) } },
    #endif
    { { SIMDE_FLOAT64_C(  -408.83), SIMDE_FLOAT64_C(   845.11) },
      UINT8_C( 22),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    48.83) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    45.90) },
      { SIMDE_FLOAT64_C(  -408.83), SIMDE_FLOAT64_C(1718052889097666.50) } },
    { { SIMDE_FLOAT64_C(  -949.80), SIMDE_FLOAT64_C(  -857.08) },
      UINT8_C(201),
      { SIMDE_FLOAT64_C(   -70.22), SIMDE_FLOAT64_C(    50.02) },
      { SIMDE_FLOAT64_C(   -51.72), SIMDE_FLOAT64_C(     4.64) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(  -857.08) } },
    { { SIMDE_FLOAT64_C(  -466.99), SIMDE_FLOAT64_C(   189.32) },
      UINT8_C(190),
      { SIMDE_FLOAT64_C(    49.59), SIMDE_FLOAT64_C(   -87.80) },
      { SIMDE_FLOAT64_C(   -80.31), SIMDE_FLOAT64_C(   -77.12) },
      { SIMDE_FLOAT64_C(  -466.99), SIMDE_FLOAT64_C(    -0.00) } },
    { { SIMDE_FLOAT64_C(  -344.95), SIMDE_FLOAT64_C(   386.18) },
      UINT8_C(156),
      { SIMDE_FLOAT64_C(   -49.61), SIMDE_FLOAT64_C(    73.26) },
      { SIMDE_FLOAT64_C(   -63.07), SIMDE_FLOAT64_C(    81.30) },
      { SIMDE_FLOAT64_C(  -344.95), SIMDE_FLOAT64_C(   386.18) } },
    { { SIMDE_FLOAT64_C(   158.99), SIMDE_FLOAT64_C(   118.79) },
      UINT8_C( 37),
      { SIMDE_FLOAT64_C(    53.46), SIMDE_FLOAT64_C(   -14.67) },
      { SIMDE_FLOAT64_C(    93.50), SIMDE_FLOAT64_C(     4.21) },
      { SIMDE_FLOAT64_C(529442196001571444413106749440.00), SIMDE_FLOAT64_C(   118.79) } },
    { { SIMDE_FLOAT64_C(   -27.96), SIMDE_FLOAT64_C(  -346.62) },
      UINT8_C(189),
      { SIMDE_FLOAT64_C(     0.62), SIMDE_FLOAT64_C(   -37.99) },
      { SIMDE_FLOAT64_C(    -9.86), SIMDE_FLOAT64_C(    77.68) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(  -346.62) } },
    { { SIMDE_FLOAT64_C(   -93.00), SIMDE_FLOAT64_C(   695.44) },
      UINT8_C(140),
      { SIMDE_FLOAT64_C(    71.43), SIMDE_FLOAT64_C(   -26.01) },
      { SIMDE_FLOAT64_C(   -17.74), SIMDE_FLOAT64_C(    95.49) },
      { SIMDE_FLOAT64_C(   -93.00), SIMDE_FLOAT64_C(   695.44) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d src = simde_mm_loadu_pd(test_vec[i].src);
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_mask_scalef_pd(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128d src = simde_test_x86_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_mask_scalef_pd(src, k, a, b);

    simde_test_x86_write_f64x2(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm_maskz_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT8_C(123),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -40.32) },
      { SIMDE_FLOAT64_C(    61.82),             SIMDE_MATH_NAN },
      {             SIMDE_MATH_NAN,             SIMDE_MATH_NAN } },
    #endif
    { UINT8_C( 40),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -55.92) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    65.28) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(206),
      { SIMDE_FLOAT64_C(   -20.24), SIMDE_FLOAT64_C(    17.07) },
      { SIMDE_FLOAT64_C(   -75.60), SIMDE_FLOAT64_C(   -35.73) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(202),
      { SIMDE_FLOAT64_C(    55.84), SIMDE_FLOAT64_C(   -70.58) },
      { SIMDE_FLOAT64_C(   -21.43), SIMDE_FLOAT64_C(    44.63) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-1241656491014881.25) } },
    { UINT8_C( 11),
      { SIMDE_FLOAT64_C(   -17.28), SIMDE_FLOAT64_C(    97.50) },
      { SIMDE_FLOAT64_C(   -16.98), SIMDE_FLOAT64_C(    48.23) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(27443810229288960.00) } },
    { UINT8_C(223),
      { SIMDE_FLOAT64_C(    36.11), SIMDE_FLOAT64_C(   -55.71) },
      { SIMDE_FLOAT64_C(   -35.87), SIMDE_FLOAT64_C(   -52.01) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00) } },
    { UINT8_C(137),
      { SIMDE_FLOAT64_C(   -57.52), SIMDE_FLOAT64_C(    61.33) },
      { SIMDE_FLOAT64_C(    13.33), SIMDE_FLOAT64_C(    26.00) },
      { SIMDE_FLOAT64_C(-471203.84), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(221),
      { SIMDE_FLOAT64_C(   -47.97), SIMDE_FLOAT64_C(   -17.12) },
      { SIMDE_FLOAT64_C(    10.14), SIMDE_FLOAT64_C(   -95.26) },
      { SIMDE_FLOAT64_C(-49121.28), SIMDE_FLOAT64_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_maskz_scalef_pd(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_maskz_scalef_pd(k, a, b);

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

static int
test_simde_mm256_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 a[4];
    const simde_float64 b[4];
    const simde_float64 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -98.02),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    14.34) },
      { SIMDE_FLOAT64_C(    22.61),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -40.04) },
      {             SIMDE_MATH_NAN,             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(     0.00) } },
    #endif
    { { SIMDE_FLOAT64_C(    -4.76), SIMDE_FLOAT64_C(     2.92), SIMDE_FLOAT64_C(    74.43), SIMDE_FLOAT64_C(    19.75) },
      { SIMDE_FLOAT64_C(     1.84), SIMDE_FLOAT64_C(   -74.38), SIMDE_FLOAT64_C(   -33.99), SIMDE_FLOAT64_C(   -68.40) },
      { SIMDE_FLOAT64_C(    -9.52), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { { SIMDE_FLOAT64_C(    68.17), SIMDE_FLOAT64_C(   -15.58), SIMDE_FLOAT64_C(    50.42), SIMDE_FLOAT64_C(   -37.05) },
      { SIMDE_FLOAT64_C(   -69.82), SIMDE_FLOAT64_C(   -94.10), SIMDE_FLOAT64_C(    71.05), SIMDE_FLOAT64_C(   -56.51) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(119050859033143759863808.00), SIMDE_FLOAT64_C(    -0.00) } },
    { { SIMDE_FLOAT64_C(   -36.90), SIMDE_FLOAT64_C(    88.15), SIMDE_FLOAT64_C(    42.92), SIMDE_FLOAT64_C(   -12.71) },
      { SIMDE_FLOAT64_C(    79.73), SIMDE_FLOAT64_C(   -61.58), SIMDE_FLOAT64_C(   -58.02), SIMDE_FLOAT64_C(     6.34) },
      { SIMDE_FLOAT64_C(-22304681371889907414335488.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(  -813.44) } },
    { { SIMDE_FLOAT64_C(   -59.60), SIMDE_FLOAT64_C(   -82.73), SIMDE_FLOAT64_C(   -79.32), SIMDE_FLOAT64_C(    63.02) },
      { SIMDE_FLOAT64_C(    65.75), SIMDE_FLOAT64_C(    91.64), SIMDE_FLOAT64_C(   -77.02), SIMDE_FLOAT64_C(   -39.01) },
      { SIMDE_FLOAT64_C(-2198851893586178605056.00), SIMDE_FLOAT64_C(-204829558900159030136433278976.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00) } },
    { { SIMDE_FLOAT64_C(    -5.44), SIMDE_FLOAT64_C(    97.41), SIMDE_FLOAT64_C(    80.74), SIMDE_FLOAT64_C(    96.39) },
      { SIMDE_FLOAT64_C(   -76.97), SIMDE_FLOAT64_C(   -53.25), SIMDE_FLOAT64_C(   -72.00), SIMDE_FLOAT64_C(    91.20) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(238650080773435610802428051456.00) } },
    { { SIMDE_FLOAT64_C(    31.18), SIMDE_FLOAT64_C(    78.42), SIMDE_FLOAT64_C(   -45.85), SIMDE_FLOAT64_C(    61.36) },
      { SIMDE_FLOAT64_C(    84.31), SIMDE_FLOAT64_C(   -74.80), SIMDE_FLOAT64_C(   -95.16), SIMDE_FLOAT64_C(   -52.59) },
      { SIMDE_FLOAT64_C(603108912889346197179858944.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00) } },
    { { SIMDE_FLOAT64_C(   -86.66), SIMDE_FLOAT64_C(    47.76), SIMDE_FLOAT64_C(    34.70), SIMDE_FLOAT64_C(    93.08) },
      { SIMDE_FLOAT64_C(    86.19), SIMDE_FLOAT64_C(    76.68), SIMDE_FLOAT64_C(    -0.58), SIMDE_FLOAT64_C(   -73.41) },
      { SIMDE_FLOAT64_C(-6704992737779440650039590912.00), SIMDE_FLOAT64_C(3608643571549667936174080.00), SIMDE_FLOAT64_C(    17.35), SIMDE_FLOAT64_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256d a = simde_mm256_loadu_pd(test_vec[i].a);
    simde__m256d b = simde_mm256_loadu_pd(test_vec[i].b);
    simde__m256d r = simde_mm256_scalef_pd(a, b);
    simde_test_x86_assert_equal_f64x4(r, simde_mm256_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m256d a = simde_test_x86_random_extract_f64x4(i, 2, 0, values);
    simde__m256d b = simde_test_x86_random_extract_f64x4(i, 2, 1, values);
    simde__m256d r = simde_mm256_scalef_pd(a, b);

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

static int
test_simde_mm256_mask_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 src[4];
    const simde__mmask8 k;
    const simde_float64 a[4];
    const simde_float64 b[4];
    const simde_float64 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT64_C(  -835.99), SIMDE_FLOAT64_C(    39.26), SIMDE_FLOAT64_C(   644.55), SIMDE_FLOAT64_C(   246.88) },
      UINT8_C( 98),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    20.10),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    59.70) },
      { SIMDE_FLOAT64_C(    11.73),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -93.71) },
      { SIMDE_FLOAT64_C(  -835.99),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   644.55), SIMDE_FLOAT64_C(   246.88) } },
    #endif
    { { SIMDE_FLOAT64_C(  -880.30), SIMDE_FLOAT64_C(  -570.31), SIMDE_FLOAT64_C(   584.35), SIMDE_FLOAT64_C(  -378.30) },
      UINT8_C(  6),
      { SIMDE_FLOAT64_C(   -90.01), SIMDE_FLOAT64_C(   -98.57), SIMDE_FLOAT64_C(   -97.32), SIMDE_FLOAT64_C(   -66.98) },
      { SIMDE_FLOAT64_C(   -51.82), SIMDE_FLOAT64_C(   -69.32), SIMDE_FLOAT64_C(   -75.78), SIMDE_FLOAT64_C(    79.36) },
      { SIMDE_FLOAT64_C(  -880.30), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(  -378.30) } },
    { { SIMDE_FLOAT64_C(   345.86), SIMDE_FLOAT64_C(   430.52), SIMDE_FLOAT64_C(   697.90), SIMDE_FLOAT64_C(   -99.07) },
      UINT8_C( 91),
      { SIMDE_FLOAT64_C(   -90.90), SIMDE_FLOAT64_C(   -21.63), SIMDE_FLOAT64_C(    40.71), SIMDE_FLOAT64_C(    93.41) },
      { SIMDE_FLOAT64_C(     3.56), SIMDE_FLOAT64_C(    45.56), SIMDE_FLOAT64_C(   -59.18), SIMDE_FLOAT64_C(    16.91) },
      { SIMDE_FLOAT64_C(  -727.20), SIMDE_FLOAT64_C(-761037968281436.12), SIMDE_FLOAT64_C(   697.90), SIMDE_FLOAT64_C(6121717.76) } },
    { { SIMDE_FLOAT64_C(  -763.22), SIMDE_FLOAT64_C(   863.15), SIMDE_FLOAT64_C(   164.23), SIMDE_FLOAT64_C(   811.29) },
      UINT8_C(249),
      { SIMDE_FLOAT64_C(    -6.68), SIMDE_FLOAT64_C(    75.52), SIMDE_FLOAT64_C(     9.98), SIMDE_FLOAT64_C(   -20.49) },
      { SIMDE_FLOAT64_C(    52.20), SIMDE_FLOAT64_C(   -90.60), SIMDE_FLOAT64_C(     6.09), SIMDE_FLOAT64_C(    46.15) },
      { SIMDE_FLOAT64_C(-30084045510834912.00), SIMDE_FLOAT64_C(   863.15), SIMDE_FLOAT64_C(   164.23), SIMDE_FLOAT64_C(-1441855568200335.25) } },
    { { SIMDE_FLOAT64_C(  -593.66), SIMDE_FLOAT64_C(  -445.14), SIMDE_FLOAT64_C(   631.97), SIMDE_FLOAT64_C(   403.63) },
      UINT8_C( 71),
      { SIMDE_FLOAT64_C(    29.49), SIMDE_FLOAT64_C(    -4.30), SIMDE_FLOAT64_C(     5.85), SIMDE_FLOAT64_C(   -58.77) },
      { SIMDE_FLOAT64_C(     8.29), SIMDE_FLOAT64_C(    26.54), SIMDE_FLOAT64_C(   -52.48), SIMDE_FLOAT64_C(    18.28) },
      { SIMDE_FLOAT64_C(  7549.44), SIMDE_FLOAT64_C(-288568115.20), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   403.63) } },
    { { SIMDE_FLOAT64_C(   778.03), SIMDE_FLOAT64_C(   922.89), SIMDE_FLOAT64_C(  -664.40), SIMDE_FLOAT64_C(   -14.97) },
      UINT8_C(118),
      { SIMDE_FLOAT64_C(    27.97), SIMDE_FLOAT64_C(   -49.80), SIMDE_FLOAT64_C(    51.30), SIMDE_FLOAT64_C(    76.15) },
      { SIMDE_FLOAT64_C(   -19.12), SIMDE_FLOAT64_C(    75.52), SIMDE_FLOAT64_C(    55.51), SIMDE_FLOAT64_C(   -10.02) },
      { SIMDE_FLOAT64_C(   778.03), SIMDE_FLOAT64_C(-1881390806775266545762304.00), SIMDE_FLOAT64_C(1848277287072851456.00), SIMDE_FLOAT64_C(   -14.97) } },
    { { SIMDE_FLOAT64_C(   567.88), SIMDE_FLOAT64_C(   149.04), SIMDE_FLOAT64_C(   -57.09), SIMDE_FLOAT64_C(   212.43) },
      UINT8_C(210),
      { SIMDE_FLOAT64_C(   -46.11), SIMDE_FLOAT64_C(    -3.78), SIMDE_FLOAT64_C(   -16.61), SIMDE_FLOAT64_C(    57.45) },
      { SIMDE_FLOAT64_C(   -58.22), SIMDE_FLOAT64_C(    24.21), SIMDE_FLOAT64_C(   -25.64), SIMDE_FLOAT64_C(    35.10) },
      { SIMDE_FLOAT64_C(   567.88), SIMDE_FLOAT64_C(-63417876.48), SIMDE_FLOAT64_C(   -57.09), SIMDE_FLOAT64_C(   212.43) } },
    { { SIMDE_FLOAT64_C(   247.57), SIMDE_FLOAT64_C(   332.13), SIMDE_FLOAT64_C(  -174.39), SIMDE_FLOAT64_C(  -168.09) },
      UINT8_C( 28),
      { SIMDE_FLOAT64_C(    -0.27), SIMDE_FLOAT64_C(    84.34), SIMDE_FLOAT64_C(   -85.39), SIMDE_FLOAT64_C(   -48.07) },
      { SIMDE_FLOAT64_C(    93.74), SIMDE_FLOAT64_C(    20.70), SIMDE_FLOAT64_C(    98.08), SIMDE_FLOAT64_C(    23.23) },
      { SIMDE_FLOAT64_C(   247.57), SIMDE_FLOAT64_C(   332.13), SIMDE_FLOAT64_C(-27061171188372127328594856771584.00), SIMDE_FLOAT64_C(-403240386.56) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256d src = simde_mm256_loadu_pd(test_vec[i].src);
    simde__m256d a = simde_mm256_loadu_pd(test_vec[i].a);
    simde__m256d b = simde_mm256_loadu_pd(test_vec[i].b);
    simde__m256d r = simde_mm256_mask_scalef_pd(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x4(r, simde_mm256_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m256d src = simde_test_x86_random_f64x4(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m256d a = simde_test_x86_random_extract_f64x4(i, 2, 0, values);
    simde__m256d b = simde_test_x86_random_extract_f64x4(i, 2, 1, values);
    simde__m256d r = simde_mm256_mask_scalef_pd(src, k, a, b);

    simde_test_x86_write_f64x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm256_maskz_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float64 a[4];
    const simde_float64 b[4];
    const simde_float64 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT8_C( 69),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -82.22),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -53.38) },
      { SIMDE_FLOAT64_C(     7.87),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -5.81) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(     0.00),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(     0.00) } },
    #endif
    { UINT8_C(236),
      { SIMDE_FLOAT64_C(   -12.11), SIMDE_FLOAT64_C(   -48.57), SIMDE_FLOAT64_C(    22.28), SIMDE_FLOAT64_C(    28.52) },
      { SIMDE_FLOAT64_C(     6.91), SIMDE_FLOAT64_C(   -14.52), SIMDE_FLOAT64_C(   -31.11), SIMDE_FLOAT64_C(    46.74) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(2006916583946977.25) } },
    { UINT8_C( 31),
      { SIMDE_FLOAT64_C(   -36.72), SIMDE_FLOAT64_C(   -38.82), SIMDE_FLOAT64_C(    80.30), SIMDE_FLOAT64_C(    61.79) },
      { SIMDE_FLOAT64_C(   -48.46), SIMDE_FLOAT64_C(    37.08), SIMDE_FLOAT64_C(   -23.31), SIMDE_FLOAT64_C(    45.83) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(-5335380173783.04), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(2174042351368929.25) } },
    { UINT8_C(147),
      { SIMDE_FLOAT64_C(   -41.67), SIMDE_FLOAT64_C(    16.28), SIMDE_FLOAT64_C(   -29.41), SIMDE_FLOAT64_C(    91.54) },
      { SIMDE_FLOAT64_C(    98.84), SIMDE_FLOAT64_C(    53.78), SIMDE_FLOAT64_C(    86.92), SIMDE_FLOAT64_C(   -24.33) },
      { SIMDE_FLOAT64_C(-13205750127877580330523860926464.00), SIMDE_FLOAT64_C(146637203867183360.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C( 72),
      { SIMDE_FLOAT64_C(    71.56), SIMDE_FLOAT64_C(    25.36), SIMDE_FLOAT64_C(    22.29), SIMDE_FLOAT64_C(   -20.57) },
      { SIMDE_FLOAT64_C(    -3.18), SIMDE_FLOAT64_C(    92.59), SIMDE_FLOAT64_C(    73.62), SIMDE_FLOAT64_C(    84.72) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-397881665751566759476854784.00) } },
    { UINT8_C(232),
      { SIMDE_FLOAT64_C(   -55.98), SIMDE_FLOAT64_C(    -4.10), SIMDE_FLOAT64_C(    13.24), SIMDE_FLOAT64_C(    50.93) },
      { SIMDE_FLOAT64_C(    81.38), SIMDE_FLOAT64_C(    82.13), SIMDE_FLOAT64_C(    -2.33), SIMDE_FLOAT64_C(   -55.34) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(160),
      { SIMDE_FLOAT64_C(   -56.69), SIMDE_FLOAT64_C(   -22.04), SIMDE_FLOAT64_C(   -93.56), SIMDE_FLOAT64_C(    -5.15) },
      { SIMDE_FLOAT64_C(   -84.95), SIMDE_FLOAT64_C(   -16.87), SIMDE_FLOAT64_C(   -59.32), SIMDE_FLOAT64_C(   -26.63) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C( 29),
      { SIMDE_FLOAT64_C(    99.42), SIMDE_FLOAT64_C(    11.27), SIMDE_FLOAT64_C(   -35.09), SIMDE_FLOAT64_C(    98.26) },
      { SIMDE_FLOAT64_C(   -34.94), SIMDE_FLOAT64_C(   -48.16), SIMDE_FLOAT64_C(   -26.07), SIMDE_FLOAT64_C(   -63.38) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m256d a = simde_mm256_loadu_pd(test_vec[i].a);
    simde__m256d b = simde_mm256_loadu_pd(test_vec[i].b);
    simde__m256d r = simde_mm256_maskz_scalef_pd(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x4(r, simde_mm256_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m256d a = simde_test_x86_random_extract_f64x4(i, 2, 0, values);
    simde__m256d b = simde_test_x86_random_extract_f64x4(i, 2, 1, values);
    simde__m256d r = simde_mm256_maskz_scalef_pd(k, a, b);

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

static int
test_simde_mm512_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 a[8];
    const simde_float64 b[8];
    const simde_float64 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(     3.52),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    82.72),
        SIMDE_FLOAT64_C(   -70.09), SIMDE_FLOAT64_C(    38.95), SIMDE_FLOAT64_C(   -64.55), SIMDE_FLOAT64_C(    80.50) },
      { SIMDE_FLOAT64_C(    55.63),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    88.21),
        SIMDE_FLOAT64_C(   -89.05), SIMDE_FLOAT64_C(    49.51), SIMDE_FLOAT64_C(    20.06), SIMDE_FLOAT64_C(    16.65) },
      {             SIMDE_MATH_NAN,             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(25600600012421663733070168064.00),
        SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(21926900685760104.00), SIMDE_FLOAT64_C(-67685580.80), SIMDE_FLOAT64_C(5275648.00) } },
    #endif
    { { SIMDE_FLOAT64_C(    72.14), SIMDE_FLOAT64_C(   -64.35), SIMDE_FLOAT64_C(   -86.99), SIMDE_FLOAT64_C(    12.78),
        SIMDE_FLOAT64_C(    48.87), SIMDE_FLOAT64_C(    35.58), SIMDE_FLOAT64_C(   -50.15), SIMDE_FLOAT64_C(   -28.04) },
      { SIMDE_FLOAT64_C(   -50.35), SIMDE_FLOAT64_C(    12.93), SIMDE_FLOAT64_C(   -43.72), SIMDE_FLOAT64_C(    45.63),
        SIMDE_FLOAT64_C(    18.72), SIMDE_FLOAT64_C(    92.32), SIMDE_FLOAT64_C(   -91.81), SIMDE_FLOAT64_C(    52.08) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-263577.60), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(449656275295272.94),
        SIMDE_FLOAT64_C(12810977.28), SIMDE_FLOAT64_C(176183626391095312279394058240.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(-126280933551468704.00) } },
    { { SIMDE_FLOAT64_C(    -4.16), SIMDE_FLOAT64_C(   -75.71), SIMDE_FLOAT64_C(    34.79), SIMDE_FLOAT64_C(    25.75),
        SIMDE_FLOAT64_C(    63.24), SIMDE_FLOAT64_C(    70.24), SIMDE_FLOAT64_C(     6.25), SIMDE_FLOAT64_C(    18.87) },
      { SIMDE_FLOAT64_C(    52.58), SIMDE_FLOAT64_C(   -80.99), SIMDE_FLOAT64_C(     7.07), SIMDE_FLOAT64_C(    63.54),
        SIMDE_FLOAT64_C(    68.52), SIMDE_FLOAT64_C(   -72.86), SIMDE_FLOAT64_C(   -19.81), SIMDE_FLOAT64_C(    40.66) },
      { SIMDE_FLOAT64_C(-18734974449861264.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(  4453.12), SIMDE_FLOAT64_C(237501829949010477056.00),
        SIMDE_FLOAT64_C(18665153523542273294336.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(20747784416133.12) } },
    { { SIMDE_FLOAT64_C(   -37.21), SIMDE_FLOAT64_C(    -6.81), SIMDE_FLOAT64_C(   -46.56), SIMDE_FLOAT64_C(   -88.34),
        SIMDE_FLOAT64_C(   -71.23), SIMDE_FLOAT64_C(     3.29), SIMDE_FLOAT64_C(   -16.38), SIMDE_FLOAT64_C(   -21.58) },
      { SIMDE_FLOAT64_C(   -83.78), SIMDE_FLOAT64_C(    39.89), SIMDE_FLOAT64_C(   -75.94), SIMDE_FLOAT64_C(    34.93),
        SIMDE_FLOAT64_C(    32.21), SIMDE_FLOAT64_C(   -67.75), SIMDE_FLOAT64_C(   -12.99), SIMDE_FLOAT64_C(   -71.95) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(-3743837092577.28), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(-1517669643714.56),
        SIMDE_FLOAT64_C(-305930520494.08), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(    -0.00) } },
    { { SIMDE_FLOAT64_C(   -43.46), SIMDE_FLOAT64_C(   -78.20), SIMDE_FLOAT64_C(    53.80), SIMDE_FLOAT64_C(   -80.23),
        SIMDE_FLOAT64_C(    92.04), SIMDE_FLOAT64_C(   -39.95), SIMDE_FLOAT64_C(    38.64), SIMDE_FLOAT64_C(    44.63) },
      { SIMDE_FLOAT64_C(   -20.94), SIMDE_FLOAT64_C(   -54.29), SIMDE_FLOAT64_C(     8.17), SIMDE_FLOAT64_C(   -52.42),
        SIMDE_FLOAT64_C(   -27.15), SIMDE_FLOAT64_C(    88.35), SIMDE_FLOAT64_C(    88.24), SIMDE_FLOAT64_C(    35.64) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C( 13772.80), SIMDE_FLOAT64_C(    -0.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-12363926142362736375164305408.00), SIMDE_FLOAT64_C(11958500779496773631447400448.00), SIMDE_FLOAT64_C(1533475123363.84) } },
    { { SIMDE_FLOAT64_C(   -18.45), SIMDE_FLOAT64_C(   -58.32), SIMDE_FLOAT64_C(    47.30), SIMDE_FLOAT64_C(    10.32),
        SIMDE_FLOAT64_C(    44.97), SIMDE_FLOAT64_C(   -69.08), SIMDE_FLOAT64_C(    88.74), SIMDE_FLOAT64_C(    61.18) },
      { SIMDE_FLOAT64_C(    70.81), SIMDE_FLOAT64_C(   -87.20), SIMDE_FLOAT64_C(    -3.89), SIMDE_FLOAT64_C(     3.02),
        SIMDE_FLOAT64_C(   -54.95), SIMDE_FLOAT64_C(    83.12), SIMDE_FLOAT64_C(    31.07), SIMDE_FLOAT64_C(     1.58) },
      { SIMDE_FLOAT64_C(-21781915402236237709312.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     2.96), SIMDE_FLOAT64_C(    82.56),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-668100764951828650616946688.00), SIMDE_FLOAT64_C(190567698923.52), SIMDE_FLOAT64_C(   122.36) } },
    { { SIMDE_FLOAT64_C(   -95.08), SIMDE_FLOAT64_C(   -15.13), SIMDE_FLOAT64_C(    21.36), SIMDE_FLOAT64_C(    96.97),
        SIMDE_FLOAT64_C(    44.91), SIMDE_FLOAT64_C(   -40.00), SIMDE_FLOAT64_C(    41.60), SIMDE_FLOAT64_C(   -76.03) },
      { SIMDE_FLOAT64_C(     5.71), SIMDE_FLOAT64_C(   -50.24), SIMDE_FLOAT64_C(   -28.45), SIMDE_FLOAT64_C(    78.56),
        SIMDE_FLOAT64_C(   -61.89), SIMDE_FLOAT64_C(   -40.21), SIMDE_FLOAT64_C(    14.19), SIMDE_FLOAT64_C(    19.66) },
      { SIMDE_FLOAT64_C( -3042.56), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(29307384182007647424217088.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(681574.40), SIMDE_FLOAT64_C(-39861616.64) } },
    { { SIMDE_FLOAT64_C(     1.47), SIMDE_FLOAT64_C(   -38.51), SIMDE_FLOAT64_C(   -70.02), SIMDE_FLOAT64_C(   -53.56),
        SIMDE_FLOAT64_C(    -7.59), SIMDE_FLOAT64_C(   -81.28), SIMDE_FLOAT64_C(   -92.38), SIMDE_FLOAT64_C(   -36.78) },
      { SIMDE_FLOAT64_C(   -68.49), SIMDE_FLOAT64_C(     3.73), SIMDE_FLOAT64_C(    66.24), SIMDE_FLOAT64_C(   -23.44),
        SIMDE_FLOAT64_C(   -13.15), SIMDE_FLOAT64_C(    -2.69), SIMDE_FLOAT64_C(    78.14), SIMDE_FLOAT64_C(    -8.22) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(  -308.08), SIMDE_FLOAT64_C(-5166564080164570923008.00), SIMDE_FLOAT64_C(    -0.00),
        SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(   -10.16), SIMDE_FLOAT64_C(-27920141803999859415449600.00), SIMDE_FLOAT64_C(    -0.07) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512d a = simde_mm512_loadu_pd(test_vec[i].a);
    simde__m512d b = simde_mm512_loadu_pd(test_vec[i].b);
    simde__m512d r = simde_mm512_scalef_pd(a, b);
    simde_test_x86_assert_equal_f64x8(r, simde_mm512_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x8_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m512d a = simde_test_x86_random_extract_f64x8(i, 2, 0, values);
    simde__m512d b = simde_test_x86_random_extract_f64x8(i, 2, 1, values);
    simde__m512d r = simde_mm512_scalef_pd(a, b);

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

static int
test_simde_mm512_mask_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 src[8];
    const simde__mmask8 k;
    const simde_float64 a[8];
    const simde_float64 b[8];
    const simde_float64 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT64_C(  -161.86), SIMDE_FLOAT64_C(  -689.84), SIMDE_FLOAT64_C(  -760.83), SIMDE_FLOAT64_C(  -853.23),
        SIMDE_FLOAT64_C(    59.60), SIMDE_FLOAT64_C(  -500.46), SIMDE_FLOAT64_C(  -972.68), SIMDE_FLOAT64_C(   329.52) },
      UINT8_C( 53),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -0.50),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    27.08),
        SIMDE_FLOAT64_C(    59.49), SIMDE_FLOAT64_C(   -69.66), SIMDE_FLOAT64_C(    51.05), SIMDE_FLOAT64_C(   -34.80) },
      { SIMDE_FLOAT64_C(   -19.90),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    18.21),
        SIMDE_FLOAT64_C(   -17.60), SIMDE_FLOAT64_C(    57.95), SIMDE_FLOAT64_C(   -62.13), SIMDE_FLOAT64_C(    83.87) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(  -689.84),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(  -853.23),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-10039064001364119552.00), SIMDE_FLOAT64_C(  -972.68), SIMDE_FLOAT64_C(   329.52) } },
    #endif
    { { SIMDE_FLOAT64_C(   466.56), SIMDE_FLOAT64_C(   875.54), SIMDE_FLOAT64_C(  -763.98), SIMDE_FLOAT64_C(   645.69),
        SIMDE_FLOAT64_C(  -868.26), SIMDE_FLOAT64_C(   770.97), SIMDE_FLOAT64_C(  -135.66), SIMDE_FLOAT64_C(  -602.20) },
      UINT8_C(134),
      { SIMDE_FLOAT64_C(   -80.56), SIMDE_FLOAT64_C(   -32.15), SIMDE_FLOAT64_C(   -69.69), SIMDE_FLOAT64_C(    11.85),
        SIMDE_FLOAT64_C(   -13.44), SIMDE_FLOAT64_C(   -62.07), SIMDE_FLOAT64_C(    75.06), SIMDE_FLOAT64_C(    18.08) },
      { SIMDE_FLOAT64_C(    41.66), SIMDE_FLOAT64_C(    41.30), SIMDE_FLOAT64_C(    94.63), SIMDE_FLOAT64_C(   -71.49),
        SIMDE_FLOAT64_C(   -61.39), SIMDE_FLOAT64_C(    72.78), SIMDE_FLOAT64_C(    20.29), SIMDE_FLOAT64_C(   -79.22) },
      { SIMDE_FLOAT64_C(   466.56), SIMDE_FLOAT64_C(-70698597665996.80), SIMDE_FLOAT64_C(-1380352661404770376687523201024.00), SIMDE_FLOAT64_C(   645.69),
        SIMDE_FLOAT64_C(  -868.26), SIMDE_FLOAT64_C(   770.97), SIMDE_FLOAT64_C(  -135.66), SIMDE_FLOAT64_C(     0.00) } },
    { { SIMDE_FLOAT64_C(   172.80), SIMDE_FLOAT64_C(  -845.80), SIMDE_FLOAT64_C(  -987.32), SIMDE_FLOAT64_C(  -965.66),
        SIMDE_FLOAT64_C(  -172.29), SIMDE_FLOAT64_C(   -41.83), SIMDE_FLOAT64_C(   298.33), SIMDE_FLOAT64_C(   572.92) },
      UINT8_C(149),
      { SIMDE_FLOAT64_C(   -27.73), SIMDE_FLOAT64_C(   -90.97), SIMDE_FLOAT64_C(    47.86), SIMDE_FLOAT64_C(   -68.23),
        SIMDE_FLOAT64_C(   -60.63), SIMDE_FLOAT64_C(    -1.09), SIMDE_FLOAT64_C(    -3.03), SIMDE_FLOAT64_C(    19.47) },
      { SIMDE_FLOAT64_C(    21.52), SIMDE_FLOAT64_C(    40.73), SIMDE_FLOAT64_C(   -62.31), SIMDE_FLOAT64_C(   -96.08),
        SIMDE_FLOAT64_C(    -1.32), SIMDE_FLOAT64_C(   -24.44), SIMDE_FLOAT64_C(    87.79), SIMDE_FLOAT64_C(    18.12) },
      { SIMDE_FLOAT64_C(-58154024.96), SIMDE_FLOAT64_C(  -845.80), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(  -965.66),
        SIMDE_FLOAT64_C(   -15.16), SIMDE_FLOAT64_C(   -41.83), SIMDE_FLOAT64_C(   298.33), SIMDE_FLOAT64_C(5103943.68) } },
    { { SIMDE_FLOAT64_C(    21.90), SIMDE_FLOAT64_C(  -732.90), SIMDE_FLOAT64_C(  -290.17), SIMDE_FLOAT64_C(  -259.18),
        SIMDE_FLOAT64_C(   105.25), SIMDE_FLOAT64_C(    19.99), SIMDE_FLOAT64_C(   -20.01), SIMDE_FLOAT64_C(   252.01) },
      UINT8_C( 47),
      { SIMDE_FLOAT64_C(    43.41), SIMDE_FLOAT64_C(   -81.90), SIMDE_FLOAT64_C(   -70.04), SIMDE_FLOAT64_C(   -70.03),
        SIMDE_FLOAT64_C(   -43.98), SIMDE_FLOAT64_C(   -94.97), SIMDE_FLOAT64_C(    48.05), SIMDE_FLOAT64_C(    97.68) },
      { SIMDE_FLOAT64_C(    46.33), SIMDE_FLOAT64_C(    42.68), SIMDE_FLOAT64_C(   -73.81), SIMDE_FLOAT64_C(    84.94),
        SIMDE_FLOAT64_C(    15.46), SIMDE_FLOAT64_C(    46.48), SIMDE_FLOAT64_C(   -94.29), SIMDE_FLOAT64_C(    87.73) },
      { SIMDE_FLOAT64_C(3054707184752394.00), SIMDE_FLOAT64_C(-360200009259417.62), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(-1354577202361799719665008640.00),
        SIMDE_FLOAT64_C(   105.25), SIMDE_FLOAT64_C(-6682919634552750.00), SIMDE_FLOAT64_C(   -20.01), SIMDE_FLOAT64_C(   252.01) } },
    { { SIMDE_FLOAT64_C(   479.53), SIMDE_FLOAT64_C(   279.33), SIMDE_FLOAT64_C(   409.11), SIMDE_FLOAT64_C(  -981.28),
        SIMDE_FLOAT64_C(  -254.11), SIMDE_FLOAT64_C(   284.65), SIMDE_FLOAT64_C(  -745.27), SIMDE_FLOAT64_C(  -608.42) },
      UINT8_C(  4),
      { SIMDE_FLOAT64_C(    55.51), SIMDE_FLOAT64_C(    53.58), SIMDE_FLOAT64_C(   -80.50), SIMDE_FLOAT64_C(    94.89),
        SIMDE_FLOAT64_C(   -47.51), SIMDE_FLOAT64_C(    16.47), SIMDE_FLOAT64_C(    14.36), SIMDE_FLOAT64_C(    74.01) },
      { SIMDE_FLOAT64_C(   -42.81), SIMDE_FLOAT64_C(    52.05), SIMDE_FLOAT64_C(    77.93), SIMDE_FLOAT64_C(    55.87),
        SIMDE_FLOAT64_C(   -72.39), SIMDE_FLOAT64_C(    65.72), SIMDE_FLOAT64_C(   -26.01), SIMDE_FLOAT64_C(    71.02) },
      { SIMDE_FLOAT64_C(   479.53), SIMDE_FLOAT64_C(   279.33), SIMDE_FLOAT64_C(-12164816059872206070480896.00), SIMDE_FLOAT64_C(  -981.28),
        SIMDE_FLOAT64_C(  -254.11), SIMDE_FLOAT64_C(   284.65), SIMDE_FLOAT64_C(  -745.27), SIMDE_FLOAT64_C(  -608.42) } },
    { { SIMDE_FLOAT64_C(  -974.30), SIMDE_FLOAT64_C(   255.92), SIMDE_FLOAT64_C(   814.19), SIMDE_FLOAT64_C(   729.95),
        SIMDE_FLOAT64_C(  -571.28), SIMDE_FLOAT64_C(   968.38), SIMDE_FLOAT64_C(   742.63), SIMDE_FLOAT64_C(  -536.94) },
      UINT8_C( 19),
      { SIMDE_FLOAT64_C(    83.81), SIMDE_FLOAT64_C(     3.95), SIMDE_FLOAT64_C(   -99.01), SIMDE_FLOAT64_C(   -60.17),
        SIMDE_FLOAT64_C(     8.98), SIMDE_FLOAT64_C(    49.03), SIMDE_FLOAT64_C(   -62.49), SIMDE_FLOAT64_C(   -44.69) },
      { SIMDE_FLOAT64_C(    -8.29), SIMDE_FLOAT64_C(   -36.29), SIMDE_FLOAT64_C(   -59.76), SIMDE_FLOAT64_C(   -92.83),
        SIMDE_FLOAT64_C(   -89.81), SIMDE_FLOAT64_C(   -54.04), SIMDE_FLOAT64_C(    94.90), SIMDE_FLOAT64_C(    65.70) },
      { SIMDE_FLOAT64_C(     0.16), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   814.19), SIMDE_FLOAT64_C(   729.95),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   968.38), SIMDE_FLOAT64_C(   742.63), SIMDE_FLOAT64_C(  -536.94) } },
    { { SIMDE_FLOAT64_C(  -299.20), SIMDE_FLOAT64_C(   761.39), SIMDE_FLOAT64_C(  -630.98), SIMDE_FLOAT64_C(  -293.69),
        SIMDE_FLOAT64_C(  -216.71), SIMDE_FLOAT64_C(  -363.88), SIMDE_FLOAT64_C(   416.14), SIMDE_FLOAT64_C(   524.11) },
      UINT8_C(105),
      { SIMDE_FLOAT64_C(    99.53), SIMDE_FLOAT64_C(   -85.60), SIMDE_FLOAT64_C(    60.58), SIMDE_FLOAT64_C(   -47.97),
        SIMDE_FLOAT64_C(    30.86), SIMDE_FLOAT64_C(   -25.06), SIMDE_FLOAT64_C(   -73.96), SIMDE_FLOAT64_C(    88.06) },
      { SIMDE_FLOAT64_C(   -73.01), SIMDE_FLOAT64_C(   -96.03), SIMDE_FLOAT64_C(    43.92), SIMDE_FLOAT64_C(   -45.40),
        SIMDE_FLOAT64_C(    69.68), SIMDE_FLOAT64_C(   -82.09), SIMDE_FLOAT64_C(   -74.38), SIMDE_FLOAT64_C(    53.49) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   761.39), SIMDE_FLOAT64_C(  -630.98), SIMDE_FLOAT64_C(    -0.00),
        SIMDE_FLOAT64_C(  -216.71), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(   524.11) } },
    { { SIMDE_FLOAT64_C(  -563.87), SIMDE_FLOAT64_C(  -495.90), SIMDE_FLOAT64_C(    -6.62), SIMDE_FLOAT64_C(  -484.29),
        SIMDE_FLOAT64_C(   983.63), SIMDE_FLOAT64_C(  -727.29), SIMDE_FLOAT64_C(   924.82), SIMDE_FLOAT64_C(  -997.65) },
      UINT8_C(190),
      { SIMDE_FLOAT64_C(    21.87), SIMDE_FLOAT64_C(   -73.39), SIMDE_FLOAT64_C(    93.33), SIMDE_FLOAT64_C(   -69.15),
        SIMDE_FLOAT64_C(    75.64), SIMDE_FLOAT64_C(   -69.16), SIMDE_FLOAT64_C(   -13.85), SIMDE_FLOAT64_C(   -32.65) },
      { SIMDE_FLOAT64_C(    -5.45), SIMDE_FLOAT64_C(    26.40), SIMDE_FLOAT64_C(   -25.48), SIMDE_FLOAT64_C(     4.73),
        SIMDE_FLOAT64_C(    72.36), SIMDE_FLOAT64_C(   -30.58), SIMDE_FLOAT64_C(   -29.57), SIMDE_FLOAT64_C(    71.89) },
      { SIMDE_FLOAT64_C(  -563.87), SIMDE_FLOAT64_C(-4925119528.96), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C( -1106.40),
        SIMDE_FLOAT64_C(357199800764259966648320.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(   924.82), SIMDE_FLOAT64_C(-77092632832846954758144.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512d src = simde_mm512_loadu_pd(test_vec[i].src);
    simde__m512d a = simde_mm512_loadu_pd(test_vec[i].a);
    simde__m512d b = simde_mm512_loadu_pd(test_vec[i].b);
    simde__m512d r = simde_mm512_mask_scalef_pd(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x8(r, simde_mm512_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x8_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m512d src = simde_test_x86_random_f64x8(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m512d a = simde_test_x86_random_extract_f64x8(i, 2, 0, values);
    simde__m512d b = simde_test_x86_random_extract_f64x8(i, 2, 1, values);
    simde__m512d r = simde_mm512_mask_scalef_pd(src, k, a, b);

    simde_test_x86_write_f64x8(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x8(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x8(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x8(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm512_maskz_scalef_pd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float64 a[8];
    const simde_float64 b[8];
    const simde_float64 r[8];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT8_C( 75),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -74.29),             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -37.41),
        SIMDE_FLOAT64_C(   -71.72), SIMDE_FLOAT64_C(   -33.39), SIMDE_FLOAT64_C(   -55.99), SIMDE_FLOAT64_C(   -98.73) },
      { SIMDE_FLOAT64_C(     9.48),             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    55.79),
        SIMDE_FLOAT64_C(    20.45), SIMDE_FLOAT64_C(   -54.38), SIMDE_FLOAT64_C(    31.93), SIMDE_FLOAT64_C(    57.36) },
      {             SIMDE_MATH_NAN,             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-1347837296479441920.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-120237609451.52), SIMDE_FLOAT64_C(     0.00) } },
    #endif
    { UINT8_C(115),
      { SIMDE_FLOAT64_C(    16.25), SIMDE_FLOAT64_C(   -89.74), SIMDE_FLOAT64_C(   -79.03), SIMDE_FLOAT64_C(   -42.14),
        SIMDE_FLOAT64_C(    62.67), SIMDE_FLOAT64_C(    95.10), SIMDE_FLOAT64_C(     1.47), SIMDE_FLOAT64_C(   -86.92) },
      { SIMDE_FLOAT64_C(    -5.56), SIMDE_FLOAT64_C(    53.05), SIMDE_FLOAT64_C(   -88.56), SIMDE_FLOAT64_C(    21.71),
        SIMDE_FLOAT64_C(    45.53), SIMDE_FLOAT64_C(   -88.32), SIMDE_FLOAT64_C(   -76.43), SIMDE_FLOAT64_C(   -33.52) },
      { SIMDE_FLOAT64_C(     0.25), SIMDE_FLOAT64_C(-808306061120456576.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(2205004598807101.50), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(182),
      { SIMDE_FLOAT64_C(   -62.62), SIMDE_FLOAT64_C(    64.59), SIMDE_FLOAT64_C(    29.06), SIMDE_FLOAT64_C(   -34.34),
        SIMDE_FLOAT64_C(   -68.80), SIMDE_FLOAT64_C(    73.07), SIMDE_FLOAT64_C(   -33.07), SIMDE_FLOAT64_C(    40.68) },
      { SIMDE_FLOAT64_C(   -86.09), SIMDE_FLOAT64_C(   -57.53), SIMDE_FLOAT64_C(    -3.53), SIMDE_FLOAT64_C(    34.36),
        SIMDE_FLOAT64_C(   -11.91), SIMDE_FLOAT64_C(   -71.60), SIMDE_FLOAT64_C(    -8.28), SIMDE_FLOAT64_C(   -95.66) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     1.82), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(    -0.02), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C( 11),
      { SIMDE_FLOAT64_C(   -61.35), SIMDE_FLOAT64_C(    12.69), SIMDE_FLOAT64_C(   -37.80), SIMDE_FLOAT64_C(   -98.68),
        SIMDE_FLOAT64_C(     7.79), SIMDE_FLOAT64_C(    63.67), SIMDE_FLOAT64_C(   -85.60), SIMDE_FLOAT64_C(   -97.77) },
      { SIMDE_FLOAT64_C(    16.72), SIMDE_FLOAT64_C(   -74.16), SIMDE_FLOAT64_C(    23.94), SIMDE_FLOAT64_C(   -37.75),
        SIMDE_FLOAT64_C(   -62.49), SIMDE_FLOAT64_C(    47.52), SIMDE_FLOAT64_C(    28.72), SIMDE_FLOAT64_C(   -25.10) },
      { SIMDE_FLOAT64_C(-4020633.60), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C( 86),
      { SIMDE_FLOAT64_C(    12.11), SIMDE_FLOAT64_C(   -42.22), SIMDE_FLOAT64_C(    40.56), SIMDE_FLOAT64_C(    43.31),
        SIMDE_FLOAT64_C(   -69.15), SIMDE_FLOAT64_C(   -92.51), SIMDE_FLOAT64_C(   -16.01), SIMDE_FLOAT64_C(   -55.24) },
      { SIMDE_FLOAT64_C(   -50.04), SIMDE_FLOAT64_C(    80.46), SIMDE_FLOAT64_C(    79.12), SIMDE_FLOAT64_C(    38.05),
        SIMDE_FLOAT64_C(   -91.14), SIMDE_FLOAT64_C(   -29.16), SIMDE_FLOAT64_C(    42.39), SIMDE_FLOAT64_C(   -52.49) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-51040848104129642381705216.00), SIMDE_FLOAT64_C(24517015621784681037430784.00), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-70412724642775.05), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(100),
      { SIMDE_FLOAT64_C(    83.52), SIMDE_FLOAT64_C(   -95.42), SIMDE_FLOAT64_C(   -51.17), SIMDE_FLOAT64_C(    -8.69),
        SIMDE_FLOAT64_C(    68.26), SIMDE_FLOAT64_C(   -36.77), SIMDE_FLOAT64_C(    -6.45), SIMDE_FLOAT64_C(   -15.03) },
      { SIMDE_FLOAT64_C(   -10.93), SIMDE_FLOAT64_C(   -82.51), SIMDE_FLOAT64_C(    47.22), SIMDE_FLOAT64_C(    26.58),
        SIMDE_FLOAT64_C(    65.01), SIMDE_FLOAT64_C(   -24.06), SIMDE_FLOAT64_C(   -98.52), SIMDE_FLOAT64_C(   -22.88) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(-7201537279142134.00), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(135),
      { SIMDE_FLOAT64_C(    33.72), SIMDE_FLOAT64_C(    42.04), SIMDE_FLOAT64_C(   -79.57), SIMDE_FLOAT64_C(    64.57),
        SIMDE_FLOAT64_C(    49.53), SIMDE_FLOAT64_C(     4.42), SIMDE_FLOAT64_C(   -90.67), SIMDE_FLOAT64_C(    99.49) },
      { SIMDE_FLOAT64_C(   -15.11), SIMDE_FLOAT64_C(    88.45), SIMDE_FLOAT64_C(    37.55), SIMDE_FLOAT64_C(    -6.25),
        SIMDE_FLOAT64_C(   -40.71), SIMDE_FLOAT64_C(   -20.07), SIMDE_FLOAT64_C(    41.26), SIMDE_FLOAT64_C(   -57.19) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(13010749812889346425307004928.00), SIMDE_FLOAT64_C(-10936017527767.04), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
    { UINT8_C(  5),
      { SIMDE_FLOAT64_C(   -15.48), SIMDE_FLOAT64_C(    90.09), SIMDE_FLOAT64_C(    34.13), SIMDE_FLOAT64_C(   -47.23),
        SIMDE_FLOAT64_C(   -46.68), SIMDE_FLOAT64_C(   -72.33), SIMDE_FLOAT64_C(    37.75), SIMDE_FLOAT64_C(    42.39) },
      { SIMDE_FLOAT64_C(   -54.84), SIMDE_FLOAT64_C(   -15.03), SIMDE_FLOAT64_C(   -31.03), SIMDE_FLOAT64_C(   -89.83),
        SIMDE_FLOAT64_C(    60.91), SIMDE_FLOAT64_C(   -29.55), SIMDE_FLOAT64_C(   -12.71), SIMDE_FLOAT64_C(    -5.37) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00),
        SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(     0.00) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m512d a = simde_mm512_loadu_pd(test_vec[i].a);
    simde__m512d b = simde_mm512_loadu_pd(test_vec[i].b);
    simde__m512d r = simde_mm512_maskz_scalef_pd(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x8(r, simde_mm512_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x8_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m512d a = simde_test_x86_random_extract_f64x8(i, 2, 0, values);
    simde__m512d b = simde_test_x86_random_extract_f64x8(i, 2, 1, values);
    simde__m512d r = simde_mm512_maskz_scalef_pd(k, a, b);

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

static int
test_simde_mm_scalef_ss (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(     8.46),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -43.86) },
      { SIMDE_FLOAT32_C(     2.77),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    94.26) },
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(     8.46),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -43.86) } },
    #endif
    { { SIMDE_FLOAT32_C(    22.22), SIMDE_FLOAT32_C(    99.63), SIMDE_FLOAT32_C(    63.82), SIMDE_FLOAT32_C(   -81.67) },
      { SIMDE_FLOAT32_C(    56.56), SIMDE_FLOAT32_C(    -8.28), SIMDE_FLOAT32_C(   -19.28), SIMDE_FLOAT32_C(   -43.97) },
      { SIMDE_FLOAT32_C(1601119690044735488.00), SIMDE_FLOAT32_C(    99.63), SIMDE_FLOAT32_C(    63.82), SIMDE_FLOAT32_C(   -81.67) } },
    { { SIMDE_FLOAT32_C(   -70.33), SIMDE_FLOAT32_C(    37.05), SIMDE_FLOAT32_C(   -71.07), SIMDE_FLOAT32_C(    34.14) },
      { SIMDE_FLOAT32_C(   -79.13), SIMDE_FLOAT32_C(    49.31), SIMDE_FLOAT32_C(    -6.87), SIMDE_FLOAT32_C(    71.23) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    37.05), SIMDE_FLOAT32_C(   -71.07), SIMDE_FLOAT32_C(    34.14) } },
    { { SIMDE_FLOAT32_C(    29.98), SIMDE_FLOAT32_C(    69.93), SIMDE_FLOAT32_C(   -39.05), SIMDE_FLOAT32_C(   -77.82) },
      { SIMDE_FLOAT32_C(   -34.23), SIMDE_FLOAT32_C(   -95.61), SIMDE_FLOAT32_C(   -20.06), SIMDE_FLOAT32_C(    75.82) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(    69.93), SIMDE_FLOAT32_C(   -39.05), SIMDE_FLOAT32_C(   -77.82) } },
    { { SIMDE_FLOAT32_C(    12.85), SIMDE_FLOAT32_C(    72.11), SIMDE_FLOAT32_C(   -68.04), SIMDE_FLOAT32_C(   -84.38) },
      { SIMDE_FLOAT32_C(    93.74), SIMDE_FLOAT32_C(   -93.74), SIMDE_FLOAT32_C(   -90.12), SIMDE_FLOAT32_C(    15.95) },
      { SIMDE_FLOAT32_C(127260239816430278555346141184.00), SIMDE_FLOAT32_C(    72.11), SIMDE_FLOAT32_C(   -68.04), SIMDE_FLOAT32_C(   -84.38) } },
    { { SIMDE_FLOAT32_C(   -94.12), SIMDE_FLOAT32_C(    73.70), SIMDE_FLOAT32_C(    34.29), SIMDE_FLOAT32_C(    62.45) },
      { SIMDE_FLOAT32_C(   -34.57), SIMDE_FLOAT32_C(   -85.00), SIMDE_FLOAT32_C(   -81.52), SIMDE_FLOAT32_C(    -4.90) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(    73.70), SIMDE_FLOAT32_C(    34.29), SIMDE_FLOAT32_C(    62.45) } },
    { { SIMDE_FLOAT32_C(    52.06), SIMDE_FLOAT32_C(   -52.60), SIMDE_FLOAT32_C(   -70.76), SIMDE_FLOAT32_C(    72.93) },
      { SIMDE_FLOAT32_C(    96.71), SIMDE_FLOAT32_C(    22.38), SIMDE_FLOAT32_C(    44.16), SIMDE_FLOAT32_C(    26.69) },
      { SIMDE_FLOAT32_C(4124618249295925180436523778048.00), SIMDE_FLOAT32_C(   -52.60), SIMDE_FLOAT32_C(   -70.76), SIMDE_FLOAT32_C(    72.93) } },
    { { SIMDE_FLOAT32_C(    -7.69), SIMDE_FLOAT32_C(   -94.90), SIMDE_FLOAT32_C(    48.88), SIMDE_FLOAT32_C(    58.08) },
      { SIMDE_FLOAT32_C(   -90.51), SIMDE_FLOAT32_C(   -71.19), SIMDE_FLOAT32_C(    33.90), SIMDE_FLOAT32_C(    22.34) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   -94.90), SIMDE_FLOAT32_C(    48.88), SIMDE_FLOAT32_C(    58.08) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_scalef_ss(a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_scalef_ss(a, b);

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

static int
test_simde_mm_mask_scalef_ss (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float32 src[4];
    const simde__mmask8 k;
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT32_C(   321.56), SIMDE_FLOAT32_C(   103.07), SIMDE_FLOAT32_C(   870.41), SIMDE_FLOAT32_C(   353.61) },
      UINT8_C( 68),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    14.74),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -72.92) },
      { SIMDE_FLOAT32_C(    42.33),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -50.64) },
      { SIMDE_FLOAT32_C(   321.56), SIMDE_FLOAT32_C(    14.74),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -72.92) } },
    #endif
    { { SIMDE_FLOAT32_C(   573.63), SIMDE_FLOAT32_C(  -621.46), SIMDE_FLOAT32_C(  -603.81), SIMDE_FLOAT32_C(  -953.39) },
      UINT8_C(119),
      { SIMDE_FLOAT32_C(    -0.71), SIMDE_FLOAT32_C(    -1.98), SIMDE_FLOAT32_C(   -23.02), SIMDE_FLOAT32_C(    52.28) },
      { SIMDE_FLOAT32_C(    95.17), SIMDE_FLOAT32_C(   -63.55), SIMDE_FLOAT32_C(    71.25), SIMDE_FLOAT32_C(    69.36) },
      { SIMDE_FLOAT32_C(-28125996842537872929171963904.00), SIMDE_FLOAT32_C(    -1.98), SIMDE_FLOAT32_C(   -23.02), SIMDE_FLOAT32_C(    52.28) } },
    { { SIMDE_FLOAT32_C(   484.51), SIMDE_FLOAT32_C(  -115.93), SIMDE_FLOAT32_C(   186.45), SIMDE_FLOAT32_C(  -733.62) },
      UINT8_C( 47),
      { SIMDE_FLOAT32_C(    64.20), SIMDE_FLOAT32_C(   -96.12), SIMDE_FLOAT32_C(   -96.39), SIMDE_FLOAT32_C(   -17.49) },
      { SIMDE_FLOAT32_C(   -36.36), SIMDE_FLOAT32_C(   -78.88), SIMDE_FLOAT32_C(    -0.44), SIMDE_FLOAT32_C(    32.66) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   -96.12), SIMDE_FLOAT32_C(   -96.39), SIMDE_FLOAT32_C(   -17.49) } },
    { { SIMDE_FLOAT32_C(   485.42), SIMDE_FLOAT32_C(    84.35), SIMDE_FLOAT32_C(  -331.91), SIMDE_FLOAT32_C(  -579.17) },
      UINT8_C(110),
      { SIMDE_FLOAT32_C(    35.09), SIMDE_FLOAT32_C(   -20.10), SIMDE_FLOAT32_C(    97.37), SIMDE_FLOAT32_C(   -96.10) },
      { SIMDE_FLOAT32_C(   -27.26), SIMDE_FLOAT32_C(   -36.11), SIMDE_FLOAT32_C(    -8.13), SIMDE_FLOAT32_C(   -49.72) },
      { SIMDE_FLOAT32_C(   485.42), SIMDE_FLOAT32_C(   -20.10), SIMDE_FLOAT32_C(    97.37), SIMDE_FLOAT32_C(   -96.10) } },
    { { SIMDE_FLOAT32_C(   -31.73), SIMDE_FLOAT32_C(  -317.18), SIMDE_FLOAT32_C(  -506.44), SIMDE_FLOAT32_C(  -932.52) },
      UINT8_C( 58),
      { SIMDE_FLOAT32_C(    78.63), SIMDE_FLOAT32_C(    98.37), SIMDE_FLOAT32_C(   -22.64), SIMDE_FLOAT32_C(    20.96) },
      { SIMDE_FLOAT32_C(   -96.80), SIMDE_FLOAT32_C(   -84.35), SIMDE_FLOAT32_C(    70.32), SIMDE_FLOAT32_C(     2.49) },
      { SIMDE_FLOAT32_C(   -31.73), SIMDE_FLOAT32_C(    98.37), SIMDE_FLOAT32_C(   -22.64), SIMDE_FLOAT32_C(    20.96) } },
    { { SIMDE_FLOAT32_C(   -87.31), SIMDE_FLOAT32_C(   894.08), SIMDE_FLOAT32_C(   793.10), SIMDE_FLOAT32_C(  -749.47) },
      UINT8_C( 58),
      { SIMDE_FLOAT32_C(    13.66), SIMDE_FLOAT32_C(   -52.70), SIMDE_FLOAT32_C(   -45.23), SIMDE_FLOAT32_C(     8.83) },
      { SIMDE_FLOAT32_C(   -16.25), SIMDE_FLOAT32_C(   -73.98), SIMDE_FLOAT32_C(   -21.81), SIMDE_FLOAT32_C(   -52.06) },
      { SIMDE_FLOAT32_C(   -87.31), SIMDE_FLOAT32_C(   -52.70), SIMDE_FLOAT32_C(   -45.23), SIMDE_FLOAT32_C(     8.83) } },
    { { SIMDE_FLOAT32_C(  -546.05), SIMDE_FLOAT32_C(   572.09), SIMDE_FLOAT32_C(   326.61), SIMDE_FLOAT32_C(  -675.63) },
      UINT8_C( 85),
      { SIMDE_FLOAT32_C(   -70.10), SIMDE_FLOAT32_C(   -18.20), SIMDE_FLOAT32_C(    30.46), SIMDE_FLOAT32_C(    -6.46) },
      { SIMDE_FLOAT32_C(     2.91), SIMDE_FLOAT32_C(   -69.98), SIMDE_FLOAT32_C(   -73.80), SIMDE_FLOAT32_C(   -61.99) },
      { SIMDE_FLOAT32_C(  -280.40), SIMDE_FLOAT32_C(   -18.20), SIMDE_FLOAT32_C(    30.46), SIMDE_FLOAT32_C(    -6.46) } },
    { { SIMDE_FLOAT32_C(  -413.85), SIMDE_FLOAT32_C(   897.99), SIMDE_FLOAT32_C(   304.24), SIMDE_FLOAT32_C(   -17.66) },
      UINT8_C( 74),
      { SIMDE_FLOAT32_C(     9.92), SIMDE_FLOAT32_C(   -76.43), SIMDE_FLOAT32_C(   -58.09), SIMDE_FLOAT32_C(    82.66) },
      { SIMDE_FLOAT32_C(   -12.54), SIMDE_FLOAT32_C(    33.78), SIMDE_FLOAT32_C(   -67.05), SIMDE_FLOAT32_C(   -33.92) },
      { SIMDE_FLOAT32_C(  -413.85), SIMDE_FLOAT32_C(   -76.43), SIMDE_FLOAT32_C(   -58.09), SIMDE_FLOAT32_C(    82.66) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 src = simde_mm_loadu_ps(test_vec[i].src);
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_mask_scalef_ss(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128 src = simde_test_x86_random_f32x4(SIMDE_FLOAT32_C(-1000.0), SIMDE_FLOAT32_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_mask_scalef_ss(src, k, a, b);

    simde_test_x86_write_f32x4(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f32x4(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm_maskz_scalef_ss (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float32 a[4];
    const simde_float32 b[4];
    const simde_float32 r[4];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { UINT8_C( 91),
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -13.69),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    92.32) },
      { SIMDE_FLOAT32_C(    -7.87),            SIMDE_MATH_NANF,            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    40.59) },
      {            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(   -13.69),            SIMDE_MATH_NANF, SIMDE_FLOAT32_C(    92.32) } },
  #endif
    { UINT8_C(186),
      { SIMDE_FLOAT32_C(    67.39), SIMDE_FLOAT32_C(   -52.02), SIMDE_FLOAT32_C(    54.28), SIMDE_FLOAT32_C(    29.68) },
      { SIMDE_FLOAT32_C(   -66.62), SIMDE_FLOAT32_C(    66.41), SIMDE_FLOAT32_C(    55.44), SIMDE_FLOAT32_C(   -26.62) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   -52.02), SIMDE_FLOAT32_C(    54.28), SIMDE_FLOAT32_C(    29.68) } },
    { UINT8_C(219),
      { SIMDE_FLOAT32_C(   -81.80), SIMDE_FLOAT32_C(    26.08), SIMDE_FLOAT32_C(    64.57), SIMDE_FLOAT32_C(   -95.69) },
      { SIMDE_FLOAT32_C(    75.38), SIMDE_FLOAT32_C(   -99.29), SIMDE_FLOAT32_C(    88.91), SIMDE_FLOAT32_C(   -94.01) },
      { SIMDE_FLOAT32_C(-3090316741682046288527360.00), SIMDE_FLOAT32_C(    26.08), SIMDE_FLOAT32_C(    64.57), SIMDE_FLOAT32_C(   -95.69) } },
    { UINT8_C(121),
      { SIMDE_FLOAT32_C(   -17.89), SIMDE_FLOAT32_C(   -96.36), SIMDE_FLOAT32_C(    42.61), SIMDE_FLOAT32_C(   -46.05) },
      { SIMDE_FLOAT32_C(   -69.23), SIMDE_FLOAT32_C(    42.52), SIMDE_FLOAT32_C(   -33.23), SIMDE_FLOAT32_C(    79.27) },
      { SIMDE_FLOAT32_C(    -0.00), SIMDE_FLOAT32_C(   -96.36), SIMDE_FLOAT32_C(    42.61), SIMDE_FLOAT32_C(   -46.05) } },
    { UINT8_C(188),
      { SIMDE_FLOAT32_C(   -71.17), SIMDE_FLOAT32_C(     2.07), SIMDE_FLOAT32_C(    71.59), SIMDE_FLOAT32_C(    20.96) },
      { SIMDE_FLOAT32_C(    50.12), SIMDE_FLOAT32_C(    64.72), SIMDE_FLOAT32_C(   -38.45), SIMDE_FLOAT32_C(    17.51) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(     2.07), SIMDE_FLOAT32_C(    71.59), SIMDE_FLOAT32_C(    20.96) } },
    { UINT8_C( 40),
      { SIMDE_FLOAT32_C(   -87.30), SIMDE_FLOAT32_C(   -84.17), SIMDE_FLOAT32_C(   -52.81), SIMDE_FLOAT32_C(   -53.92) },
      { SIMDE_FLOAT32_C(    82.24), SIMDE_FLOAT32_C(   -97.37), SIMDE_FLOAT32_C(    19.46), SIMDE_FLOAT32_C(   -99.56) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   -84.17), SIMDE_FLOAT32_C(   -52.81), SIMDE_FLOAT32_C(   -53.92) } },
    { UINT8_C(121),
      { SIMDE_FLOAT32_C(    28.72), SIMDE_FLOAT32_C(   -15.97), SIMDE_FLOAT32_C(   -95.25), SIMDE_FLOAT32_C(     4.09) },
      { SIMDE_FLOAT32_C(   -15.26), SIMDE_FLOAT32_C(    93.67), SIMDE_FLOAT32_C(    10.09), SIMDE_FLOAT32_C(    66.85) },
      { SIMDE_FLOAT32_C(     0.00), SIMDE_FLOAT32_C(   -15.97), SIMDE_FLOAT32_C(   -95.25), SIMDE_FLOAT32_C(     4.09) } },
    { UINT8_C(159),
      { SIMDE_FLOAT32_C(    97.31), SIMDE_FLOAT32_C(   -47.31), SIMDE_FLOAT32_C(   -79.20), SIMDE_FLOAT32_C(   -71.92) },
      { SIMDE_FLOAT32_C(    95.22), SIMDE_FLOAT32_C(   -12.43), SIMDE_FLOAT32_C(   -92.66), SIMDE_FLOAT32_C(   -75.95) },
      { SIMDE_FLOAT32_C(3854846150417465776443546927104.00), SIMDE_FLOAT32_C(   -47.31), SIMDE_FLOAT32_C(   -79.20), SIMDE_FLOAT32_C(   -71.92) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
    simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
    simde__m128 r = simde_mm_maskz_scalef_ss(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float32 values[8 * 2 * sizeof(simde__m128)];
  simde_test_x86_random_f32x4_full(8, 2, values, -100.0f, 100.0f, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128 a = simde_test_x86_random_extract_f32x4(i, 2, 0, values);
    simde__m128 b = simde_test_x86_random_extract_f32x4(i, 2, 1, values);
    simde__m128 r = simde_mm_maskz_scalef_ss(k, a, b);

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

static int
test_simde_mm_scalef_sd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -7.28) },
      { SIMDE_FLOAT64_C(    15.70),             SIMDE_MATH_NAN },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -7.28) } },
    { {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -32.67) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -36.49) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -32.67) } },
  #endif
    { { SIMDE_FLOAT64_C(    74.68), SIMDE_FLOAT64_C(    88.10) },
      { SIMDE_FLOAT64_C(    15.04), SIMDE_FLOAT64_C(    11.85) },
      { SIMDE_FLOAT64_C(2447114.24), SIMDE_FLOAT64_C(    88.10) } },
    { { SIMDE_FLOAT64_C(   -68.62), SIMDE_FLOAT64_C(    24.41) },
      { SIMDE_FLOAT64_C(    76.59), SIMDE_FLOAT64_C(    61.07) },
      { SIMDE_FLOAT64_C(-5184780608872241216618496.00), SIMDE_FLOAT64_C(    24.41) } },
    { { SIMDE_FLOAT64_C(   -35.11), SIMDE_FLOAT64_C(    50.04) },
      { SIMDE_FLOAT64_C(    67.17), SIMDE_FLOAT64_C(   -63.07) },
      { SIMDE_FLOAT64_C(-5181321475423538774016.00), SIMDE_FLOAT64_C(    50.04) } },
    { { SIMDE_FLOAT64_C(    39.02), SIMDE_FLOAT64_C(   -47.15) },
      { SIMDE_FLOAT64_C(    76.34), SIMDE_FLOAT64_C(     7.26) },
      { SIMDE_FLOAT64_C(2948267842585177136037888.00), SIMDE_FLOAT64_C(   -47.15) } },
    { { SIMDE_FLOAT64_C(    27.11), SIMDE_FLOAT64_C(    65.60) },
      { SIMDE_FLOAT64_C(    84.64), SIMDE_FLOAT64_C(    93.98) },
      { SIMDE_FLOAT64_C(524383663516041539825434624.00), SIMDE_FLOAT64_C(    65.60) } },
    { { SIMDE_FLOAT64_C(    79.86), SIMDE_FLOAT64_C(    22.49) },
      { SIMDE_FLOAT64_C(   -72.03), SIMDE_FLOAT64_C(   -51.51) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    22.49) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_scalef_sd(a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0, 100.0, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_scalef_sd(a, b);

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

static int
test_simde_mm_mask_scalef_sd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde_float64 src[2];
    const simde__mmask8 k;
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    #if !defined(SIMDE_FAST_MATH)
    { { SIMDE_FLOAT64_C(  -756.00), SIMDE_FLOAT64_C(   511.84) },
      UINT8_C( 43),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    43.68) },
      { SIMDE_FLOAT64_C(    61.65),             SIMDE_MATH_NAN },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    43.68) } },
  #endif
    { { SIMDE_FLOAT64_C(  -645.93), SIMDE_FLOAT64_C(  -177.17) },
      UINT8_C( 56),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    31.10) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    85.68) },
      { SIMDE_FLOAT64_C(  -645.93), SIMDE_FLOAT64_C(    31.10) } },
    { { SIMDE_FLOAT64_C(  -789.10), SIMDE_FLOAT64_C(  -985.21) },
      UINT8_C(154),
      { SIMDE_FLOAT64_C(    19.20), SIMDE_FLOAT64_C(    93.02) },
      { SIMDE_FLOAT64_C(    -2.47), SIMDE_FLOAT64_C(    50.57) },
      { SIMDE_FLOAT64_C(  -789.10), SIMDE_FLOAT64_C(    93.02) } },
    { { SIMDE_FLOAT64_C(   186.22), SIMDE_FLOAT64_C(   520.54) },
      UINT8_C(150),
      { SIMDE_FLOAT64_C(    17.42), SIMDE_FLOAT64_C(   -25.88) },
      { SIMDE_FLOAT64_C(    11.64), SIMDE_FLOAT64_C(    82.31) },
      { SIMDE_FLOAT64_C(   186.22), SIMDE_FLOAT64_C(   -25.88) } },
    { { SIMDE_FLOAT64_C(   927.41), SIMDE_FLOAT64_C(  -363.02) },
      UINT8_C(111),
      { SIMDE_FLOAT64_C(   -75.84), SIMDE_FLOAT64_C(   -21.19) },
      { SIMDE_FLOAT64_C(   -80.76), SIMDE_FLOAT64_C(    63.18) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(   -21.19) } },
    { { SIMDE_FLOAT64_C(  -830.99), SIMDE_FLOAT64_C(   425.11) },
      UINT8_C(181),
      { SIMDE_FLOAT64_C(    31.66), SIMDE_FLOAT64_C(    95.59) },
      { SIMDE_FLOAT64_C(   -29.56), SIMDE_FLOAT64_C(   -41.23) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    95.59) } },
    { { SIMDE_FLOAT64_C(   800.81), SIMDE_FLOAT64_C(  -258.28) },
      UINT8_C(152),
      { SIMDE_FLOAT64_C(    61.19), SIMDE_FLOAT64_C(   -44.92) },
      { SIMDE_FLOAT64_C(   -47.25), SIMDE_FLOAT64_C(    41.05) },
      { SIMDE_FLOAT64_C(   800.81), SIMDE_FLOAT64_C(   -44.92) } },
    { { SIMDE_FLOAT64_C(  -494.75), SIMDE_FLOAT64_C(   329.42) },
      UINT8_C( 55),
      { SIMDE_FLOAT64_C(    77.57), SIMDE_FLOAT64_C(   -19.28) },
      { SIMDE_FLOAT64_C(    89.53), SIMDE_FLOAT64_C(    92.79) },
      { SIMDE_FLOAT64_C(48013504423683469739837882368.00), SIMDE_FLOAT64_C(   -19.28) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d src = simde_mm_loadu_pd(test_vec[i].src);
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_mask_scalef_sd(src, test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0, 100.0, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__m128d src = simde_test_x86_random_f64x2(SIMDE_FLOAT64_C(-1000.0), SIMDE_FLOAT64_C(1000.0));
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_mask_scalef_sd(src, k, a, b);

    simde_test_x86_write_f64x2(2, src, SIMDE_TEST_VEC_POS_FIRST);
    simde_test_x86_write_mmask8(2, k, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, a, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
    simde_test_x86_write_f64x2(2, r, SIMDE_TEST_VEC_POS_LAST);
  }
  return 1;
#endif
}

static int
test_simde_mm_maskz_scalef_sd (SIMDE_MUNIT_TEST_ARGS) {
#if 1
  static const struct {
    const simde__mmask8 k;
    const simde_float64 a[2];
    const simde_float64 b[2];
    const simde_float64 r[2];
  } test_vec[] = {
    { UINT8_C( 22),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    85.69) },
      { SIMDE_FLOAT64_C(    -4.94),             SIMDE_MATH_NAN },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(    85.69) } },
    { UINT8_C(108),
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(   -15.41) },
      {             SIMDE_MATH_NAN, SIMDE_FLOAT64_C(    -9.18) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   -15.41) } },
    { UINT8_C( 87),
      { SIMDE_FLOAT64_C(   -64.22), SIMDE_FLOAT64_C(   -16.77) },
      { SIMDE_FLOAT64_C(    26.22), SIMDE_FLOAT64_C(    18.06) },
      { SIMDE_FLOAT64_C(-4309731246.08), SIMDE_FLOAT64_C(   -16.77) } },
    { UINT8_C( 35),
      { SIMDE_FLOAT64_C(    68.46), SIMDE_FLOAT64_C(    47.31) },
      { SIMDE_FLOAT64_C(    19.54), SIMDE_FLOAT64_C(   -53.28) },
      { SIMDE_FLOAT64_C(35892756.48), SIMDE_FLOAT64_C(    47.31) } },
    { UINT8_C(199),
      { SIMDE_FLOAT64_C(   -34.06), SIMDE_FLOAT64_C(   -28.41) },
      { SIMDE_FLOAT64_C(   -57.61), SIMDE_FLOAT64_C(   -41.32) },
      { SIMDE_FLOAT64_C(    -0.00), SIMDE_FLOAT64_C(   -28.41) } },
    { UINT8_C(204),
      { SIMDE_FLOAT64_C(    35.29), SIMDE_FLOAT64_C(   -79.62) },
      { SIMDE_FLOAT64_C(   -24.42), SIMDE_FLOAT64_C(   -22.20) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   -79.62) } },
    { UINT8_C(246),
      { SIMDE_FLOAT64_C(   -82.38), SIMDE_FLOAT64_C(   -44.34) },
      { SIMDE_FLOAT64_C(    51.97), SIMDE_FLOAT64_C(   -89.56) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   -44.34) } },
    { UINT8_C( 76),
      { SIMDE_FLOAT64_C(     6.18), SIMDE_FLOAT64_C(   -15.08) },
      { SIMDE_FLOAT64_C(    64.45), SIMDE_FLOAT64_C(   -88.21) },
      { SIMDE_FLOAT64_C(     0.00), SIMDE_FLOAT64_C(   -15.08) } },
  };

  for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
    simde__m128d a = simde_mm_loadu_pd(test_vec[i].a);
    simde__m128d b = simde_mm_loadu_pd(test_vec[i].b);
    simde__m128d r = simde_mm_maskz_scalef_sd(test_vec[i].k, a, b);
    simde_test_x86_assert_equal_f64x2(r, simde_mm_loadu_pd(test_vec[i].r), 1);
  }

  return 0;
#else
  fputc('\n', stdout);
  simde_float64 values[8 * 2 * sizeof(simde__m128d)];
  simde_test_x86_random_f64x2_full(8, 2, values, -100.0, 100.0, SIMDE_TEST_VEC_FLOAT_NAN);

  for (size_t i = 0 ; i < 8 ; i++) {
    simde__mmask8 k = simde_test_x86_random_mmask8();
    simde__m128d a = simde_test_x86_random_extract_f64x2(i, 2, 0, values);
    simde__m128d b = simde_test_x86_random_extract_f64x2(i, 2, 1, values);
    simde__m128d r = simde_mm_maskz_scalef_sd(k, a, b);

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

SIMDE_TEST_FUNC_LIST_BEGIN
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_mask_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_maskz_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_mask_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_maskz_scalef_ps)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_mask_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm256_maskz_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_mask_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm512_maskz_scalef_pd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_scalef_ss)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_scalef_ss)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_scalef_ss)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_scalef_sd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_mask_scalef_sd)
  SIMDE_TEST_FUNC_LIST_ENTRY(mm_maskz_scalef_sd)
SIMDE_TEST_FUNC_LIST_END

#include <test/x86/avx512/test-avx512-footer.h>
