LCOV - code coverage report
Current view: top level - core/include/scipp/core/element - logical.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 18 18 100.0 %
Date: 2024-04-28 01:25:40 Functions: 10 10 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: BSD-3-Clause
       2             : // Copyright (c) 2023 Scipp contributors (https://github.com/scipp)
       3             : /// @file
       4             : /// @author Simon Heybrock
       5             : #pragma once
       6             : 
       7             : #include "scipp/common/overloaded.h"
       8             : #include "scipp/core/element/arg_list.h"
       9             : #include "scipp/core/transform_common.h"
      10             : 
      11             : namespace scipp::core::element {
      12             : 
      13             : constexpr auto logical =
      14             :     overloaded{arg_list<bool>,
      15         265 :                [](const units::Unit &a) {
      16         265 :                  expect::equals(units::none, a);
      17         265 :                  return a;
      18             :                },
      19        7373 :                [](const units::Unit &a, const units::Unit &b) {
      20        7373 :                  expect::equals(units::none, a);
      21        7373 :                  expect::equals(units::none, b);
      22        7373 :                  return units::none;
      23             :                }};
      24             : 
      25             : constexpr auto logical_and =
      26         505 :     overloaded{logical, [](const auto &a, const auto &b) { return a && b; }};
      27             : constexpr auto logical_or =
      28      462437 :     overloaded{logical, [](const auto &a, const auto &b) { return a || b; }};
      29             : constexpr auto logical_xor =
      30          24 :     overloaded{logical, [](const auto &a, const auto &b) { return a != b; }};
      31             : constexpr auto logical_not =
      32        2387 :     overloaded{logical, [](const auto &x) { return !x; }};
      33             : 
      34             : constexpr auto logical_inplace =
      35         252 :     overloaded{arg_list<bool>, [](units::Unit &var, const units::Unit &other) {
      36         252 :                  expect::equals(units::none, var);
      37         252 :                  expect::equals(units::none, other);
      38         252 :                }};
      39             : 
      40             : constexpr auto logical_and_equals =
      41       22903 :     overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a && b; }};
      42             : constexpr auto logical_or_equals =
      43        7340 :     overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a || b; }};
      44             : constexpr auto logical_xor_equals =
      45          51 :     overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a != b; }};
      46             : 
      47             : } // namespace scipp::core::element

Generated by: LCOV version 1.14