/*************************************************************************** * Copyright (c) Wolf Vollprecht, Johan Mabille and Sylvain Corlay * * Copyright (c) QuantStack * * * * Distributed under the terms of the BSD 3-Clause License. * * * * The full license is in the file LICENSE, distributed with this software. * ****************************************************************************/ #include #include "gtest/gtest.h" #include "xtensor-python/pytensor.hpp" #include "xtensor-python/pyarray.hpp" #include "xtensor/xarray.hpp" #include "xtensor/xtensor.hpp" namespace xt { template ::value, int> = 0> inline bool sfinae_has_fixed_rank(E&&) { return false; } template ::value, int> = 0> inline bool sfinae_has_fixed_rank(E&&) { return true; } TEST(sfinae, fixed_rank) { xt::pyarray a = {{9, 9, 9}, {9, 9, 9}}; xt::pytensor b = {9, 9}; xt::pytensor c = {{9, 9}, {9, 9}}; EXPECT_TRUE(sfinae_has_fixed_rank(a) == false); EXPECT_TRUE(sfinae_has_fixed_rank(b) == true); EXPECT_TRUE(sfinae_has_fixed_rank(c) == true); } TEST(sfinae, get_rank) { xt::pytensor A = xt::zeros({2}); xt::pytensor B = xt::zeros({2, 2}); xt::pyarray C = xt::zeros({2, 2}); EXPECT_TRUE(xt::get_rank::value == 1ul); EXPECT_TRUE(xt::get_rank::value == 2ul); EXPECT_TRUE(xt::get_rank::value == SIZE_MAX); } }