wasm-micro-runtime/tests/unit/compilation/aot_emit_compare_test.cc
2024-06-04 11:24:27 +08:00

113 lines
3.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2019 Intel Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/
#include "gtest/gtest.h"
#include "aot_emit_compare.h"
class compilation_aot_emit_compare_test : public testing::Test
{
protected:
virtual void SetUp() {}
virtual void TearDown() {}
public:
};
TEST_F(compilation_aot_emit_compare_test, aot_compile_op_i32_compare)
{
AOTCompContext comp_ctx = { 0 };
AOTFuncContext func_ctx = { 0 };
IntCond cond = INT_EQZ;
IntCond cond1 = INT_EQZ;
/* false cond = 0 */
EXPECT_FALSE(aot_compile_op_i32_compare(&comp_ctx, &func_ctx, cond));
/* false cond = -1 */
EXPECT_FALSE(
aot_compile_op_i32_compare(&comp_ctx, &func_ctx, (IntCond)(-1)));
/* false cond = [1:10] || [11:100] */
for (int i = 0; i < 0xFFFF; i++) {
/* Generate random number range[m,n] int a=m+rand()%(n-m+1); */
cond = (IntCond)(1 + (rand() % (INT_GE_U - 1 + 1)));
cond1 = (IntCond)((INT_GE_U + 1) + (rand() % (100 - 1 + 1)));
EXPECT_FALSE(aot_compile_op_i32_compare(&comp_ctx, &func_ctx, cond));
EXPECT_FALSE(aot_compile_op_i32_compare(&comp_ctx, &func_ctx, cond1));
}
}
TEST_F(compilation_aot_emit_compare_test, aot_compile_op_i64_compare)
{
AOTCompContext comp_ctx = { 0 };
AOTFuncContext func_ctx = { 0 };
IntCond cond = INT_EQZ;
IntCond cond1 = INT_EQZ;
/* false cond = 0 */
// EXPECT_FALSE(aot_compile_op_i64_compare(&comp_ctx, &func_ctx, cond));
/* false cond = -1 */
EXPECT_FALSE(
aot_compile_op_i64_compare(&comp_ctx, &func_ctx, (IntCond)(-1)));
/* false cond = [1:10] || [11:100] */
for (int i = 0; i < 0xFFFF; i++) {
/* Generate random number range[m,n] int a=m+rand()%(n-m+1); */
cond = (IntCond)(1 + (rand() % (INT_GE_U - 1 + 1)));
cond1 = (IntCond)((INT_GE_U + 1) + (rand() % (100 - 1 + 1)));
EXPECT_FALSE(aot_compile_op_i64_compare(&comp_ctx, &func_ctx, cond));
EXPECT_FALSE(aot_compile_op_i64_compare(&comp_ctx, &func_ctx, cond1));
}
}
TEST_F(compilation_aot_emit_compare_test, aot_compile_op_f32_compare)
{
AOTCompContext comp_ctx = { 0 };
AOTFuncContext func_ctx = { 0 };
FloatCond cond = FLOAT_EQ;
FloatCond cond1 = FLOAT_EQ;
/* false cond = 0 */
EXPECT_FALSE(aot_compile_op_f32_compare(&comp_ctx, &func_ctx, cond));
/* false cond = -1 */
EXPECT_FALSE(
aot_compile_op_f32_compare(&comp_ctx, &func_ctx, (FloatCond)(-1)));
/* false cond = [1:10] || [7:100] */
for (int i = 0; i < 0xFFFF; i++) {
/* Generate random number range[m,n] int a=m+rand()%(n-m+1); */
cond = (FloatCond)(1 + (rand() % (FLOAT_UNO - 1 + 1)));
cond1 = (FloatCond)((FLOAT_UNO + 1) + (rand() % (100 - 1 + 1)));
EXPECT_FALSE(aot_compile_op_f32_compare(&comp_ctx, &func_ctx, cond));
EXPECT_FALSE(aot_compile_op_f32_compare(&comp_ctx, &func_ctx, cond1));
}
}
TEST_F(compilation_aot_emit_compare_test, aot_compile_op_f64_compare)
{
AOTCompContext comp_ctx = { 0 };
AOTFuncContext func_ctx = { 0 };
FloatCond cond = FLOAT_EQ;
FloatCond cond1 = FLOAT_EQ;
/* false cond = 0 */
EXPECT_FALSE(aot_compile_op_f64_compare(&comp_ctx, &func_ctx, cond));
/* false cond = -1 */
EXPECT_FALSE(
aot_compile_op_f64_compare(&comp_ctx, &func_ctx, (FloatCond)(-1)));
/* false cond = [1:10] || [7:100] */
for (int i = 0; i < 0xFFFF; i++) {
/* Generate random number range[m,n] int a=m+rand()%(n-m+1); */
cond = (FloatCond)(1 + (rand() % (FLOAT_UNO - 1 + 1)));
cond1 = (FloatCond)((FLOAT_UNO + 1) + (rand() % (100 - 1 + 1)));
EXPECT_FALSE(aot_compile_op_f64_compare(&comp_ctx, &func_ctx, cond));
EXPECT_FALSE(aot_compile_op_f64_compare(&comp_ctx, &func_ctx, cond1));
}
}