logical.cpp (1805B)
1 /** 2 * KFR (https://www.kfrlib.com) 3 * Copyright (C) 2016-2023 Dan Cazarin 4 * See LICENSE.txt for details 5 */ 6 7 #include <kfr/simd/logical.hpp> 8 9 namespace kfr 10 { 11 inline namespace CMT_ARCH_NAME 12 { 13 14 TEST(logical_all) 15 { 16 CHECK(all(mask<f32, 4>{ true, true, true, true }) == true); 17 CHECK(all(mask<f32, 4>{ true, false, true, false }) == false); 18 CHECK(all(mask<f32, 4>{ false, true, false, true }) == false); 19 CHECK(all(mask<f32, 4>{ false, false, false, false }) == false); 20 } 21 TEST(logical_any) 22 { 23 CHECK(any(mask<f32, 4>{ true, true, true, true }) == true); 24 CHECK(any(mask<f32, 4>{ true, false, true, false }) == true); 25 CHECK(any(mask<f32, 4>{ false, true, false, true }) == true); 26 CHECK(any(mask<f32, 4>{ false, false, false, false }) == false); 27 } 28 29 TEST(intrin_any_all) 30 { 31 testo::matrix(named("type") = unsigned_vector_types<vec>, 32 [](auto type) 33 { 34 using T = typename decltype(type)::type; 35 constexpr size_t width = widthof<T>(); 36 using Tsub = subtype<T>; 37 const auto x = enumerate<Tsub, width>() == Tsub(0); 38 CHECK(any(x) == true); 39 if (width == 1) 40 CHECK(all(x) == true); 41 else 42 CHECK(all(x) == false); 43 const auto y = zerovector<Tsub, width>() == Tsub(127); 44 CHECK(all(y) == false); 45 CHECK(any(y) == false); 46 const auto z = zerovector<Tsub, width>() == Tsub(0); 47 CHECK(all(z) == true); 48 CHECK(any(z) == true); 49 }); 50 } 51 } // namespace CMT_ARCH_NAME 52 } // namespace kfr