// { dg-do run { target c++26 } }
// { dg-require-effective-target x86 }
// { dg-additional-options "-msse2" }

#include "test_setup.h"

template <typename V>
  struct Tests
  {
    using T = typename V::value_type;
    using M = typename V::mask_type;

    ADD_TEST(VecCatChunk) {
      std::tuple{test_iota<V>, test_iota<V, 1>},
      [](auto& t, const V v0, const V v1) {
	auto c = cat(v0, v1);
	t.verify_equal(c.size(), V::size() * 2);
	for (int i = 0; i < V::size(); ++i)
	  t.verify_equal(c[i], v0[i])(i);
	for (int i = 0; i < V::size(); ++i)
	  t.verify_equal(c[i + V::size()], v1[i])(i);
	const auto [c0, c1] = simd::chunk<V>(c);
	t.verify_equal(c0, v0);
	t.verify_equal(c1, v1);
	if constexpr (V::size() <= 35)
	  {
	    auto d = cat(v1, c, v0);
	    for (int i = 0; i < V::size(); ++i)
	      {
		t.verify_equal(d[i], v1[i])(i);
		t.verify_equal(d[i + V::size()], v0[i])(i);
		t.verify_equal(d[i + 2 * V::size()], v1[i])(i);
		t.verify_equal(d[i + 3 * V::size()], v0[i])(i);
	      }
	    const auto [...chunked] = simd::chunk<3>(d);
	    t.verify_equal(cat(chunked...), d);
	  }
      }
    };

    ADD_TEST(MaskCatChunk) {
      std::tuple{M([](int i) { return 1 == (i & 1); }), M([](int i) { return 1 == (i % 3); })},
      [](auto& t, const M k0, const M k1) {
	auto c = cat(k0, k1);
	t.verify_equal(c.size(), V::size() * 2);
	for (int i = 0; i < V::size(); ++i)
	  t.verify_equal(c[i], k0[i])(i);
	for (int i = 0; i < V::size(); ++i)
	  t.verify_equal(c[i + V::size()], k1[i])(i);
	const auto [c0, c1] = simd::chunk<M>(c);
	t.verify_equal(c0, k0);
	t.verify_equal(c1, k1);
	if constexpr (V::size() <= 35)
	  {
	    auto d = cat(k1, c, k0);
	    for (int i = 0; i < V::size(); ++i)
	      {
		t.verify_equal(d[i], k1[i])(i);
		t.verify_equal(d[i + V::size()], k0[i])(i);
		t.verify_equal(d[i + 2 * V::size()], k1[i])(i);
		t.verify_equal(d[i + 3 * V::size()], k0[i])(i);
	      }
	    const auto [...chunked] = simd::chunk<3>(d);
	    t.verify_equal(cat(chunked...), d);
	  }
      }
    };
  };

#include "create_tests.h" // { dg-prune-output "Wpsabi" }
