kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

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