mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-31 13:17:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | ||
|  * 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));
 | ||
|     }
 | ||
| }
 | 
