// Copyright (c) Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #include #include "ck/utility/index_expression.hpp" using namespace ck; /** * Test basic evaluation of literal values and index variables * - Number<7> should evaluate to the literal constant 7 regardless of index value * - Ik (index variable) should evaluate to the provided index value */ TEST(IndexExpression, EvalLiteralAndIk) { EXPECT_EQ((index_expression::eval_v, 3>), 7); EXPECT_EQ((index_expression::eval_v, 5>), 7); EXPECT_EQ((index_expression::eval_v), 3); EXPECT_EQ((index_expression::eval_v), 7); } /** * Test arithmetic operations with index expressions */ TEST(IndexExpression, EvalAddMultDivMod) { using ExprAdd = index_expression::Add>; using ExprMult = index_expression::Mult>; using ExprDiv = index_expression::Div>; using ExprMod = index_expression::Mod>; EXPECT_EQ((index_expression::eval_v), 8); EXPECT_EQ((index_expression::eval_v), 16); EXPECT_EQ((index_expression::eval_v), 4); EXPECT_EQ((index_expression::eval_v), 1); } /** * Test nested compound expressions to verify proper precedence and composition */ TEST(IndexExpression, EvalNestedExpression) { // Build nested expression: (ik + (2 * 5)) / 2 using InnerMult = index_expression::Mult, Number<5>>; using InnerAdd = index_expression::Add; using Expr = index_expression::Div>; // With ik=6: ((6 + (2*5)) / 2) = 8 EXPECT_EQ((index_expression::eval_v), 8); }