/* * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include "disassembler.h" using namespace panda::disasm; #cmakedefine DISASM_BIN_DIR "@DISASM_BIN_DIR@/" TEST(record_test, empty_record) { Disassembler d {}; std::stringstream ss {}; d.Disassemble(std::string(DISASM_BIN_DIR) + "empty_record.bc"); d.Serialize(ss, false); EXPECT_TRUE(ss.str().find(".record A {\n}") != std::string::npos) << "record translated incorrectly"; } TEST(record_test, record_with_fields) { Disassembler d {}; std::stringstream ss {}; d.Disassemble(std::string(DISASM_BIN_DIR) + "record_with_fields.bc"); d.Serialize(ss, false); EXPECT_TRUE(ss.str().find("u1 a") != std::string::npos) << "u1 translated incorrectly"; EXPECT_TRUE(ss.str().find("i8 b") != std::string::npos) << "i8 translated incorrectly"; EXPECT_TRUE(ss.str().find("u8 c") != std::string::npos) << "u8 translated incorrectly"; EXPECT_TRUE(ss.str().find("i16 d") != std::string::npos) << "i16 translated incorrectly"; EXPECT_TRUE(ss.str().find("u16 e") != std::string::npos) << "u16 translated incorrectly"; EXPECT_TRUE(ss.str().find("i32 f") != std::string::npos) << "i32 translated incorrectly"; EXPECT_TRUE(ss.str().find("u32 g") != std::string::npos) << "u32 translated incorrectly"; EXPECT_TRUE(ss.str().find("f32 h") != std::string::npos) << "f32 translated incorrectly"; EXPECT_TRUE(ss.str().find("f64 i") != std::string::npos) << "f64 translated incorrectly"; EXPECT_TRUE(ss.str().find("i64 j") != std::string::npos) << "i64 translated incorrectly"; EXPECT_TRUE(ss.str().find("u64 k") != std::string::npos) << "u64 translated incorrectly"; } TEST(record_test, record_with_record) { Disassembler d {}; std::stringstream ss {}; d.Disassemble(std::string(DISASM_BIN_DIR) + "record_in_record.bc"); d.Serialize(ss, false); size_t beg_a = ss.str().find(".record A"); size_t end_a = ss.str().find('}', beg_a); size_t beg_b = ss.str().find(".record B"); size_t end_b = ss.str().find("}", beg_b); ASSERT_TRUE(beg_a != std::string::npos && end_a != std::string::npos) << "record A not found"; ASSERT_TRUE(beg_b != std::string::npos && end_b != std::string::npos) << "record B not found"; std::string rec_a = ss.str().substr(beg_a, end_a + 1); std::string rec_b = ss.str().substr(beg_b, end_b + 1); EXPECT_TRUE(rec_a.find("i64 aw") != std::string::npos); EXPECT_TRUE(rec_b.find("A a") != std::string::npos); EXPECT_TRUE(rec_b.find("i32 c") != std::string::npos); } #undef DISASM_BIN_DIR