Weihan Liu

19 papers C 1Journal 15Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
Image Vis. Comput.
Mingwen Shao, Weihan Liu, Qiwang Li, Lingzhuang Meng, Yecong Wan
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Ting Wang, Weihan Liu, Zhongmei Li, Zhencheng Ye, Xin Peng, Wenli Du
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Chenze Wu, Weihan Liu, Xiangchen Meng, Lixin Dong, Jie Cheng
2025 J jnl
J. Am. Medical Informatics Assoc.
Anne Fu, Trong Shen, Surain B. Roberts, Weihan Liu, Shruthi Vaidyanathan, Kayley-Jasmin Marchena-Romero, Yuen Yu Phyllis Lam, Kieran Shah, Denise Y. F. Mak, Stephen Chin, Seth J. Stern, Radha Koppula, Lisa F. Joyce, Nicholas Pellegrino, Nancy Harris, Vivian Ng, Siddhartha Srivastava, Nathaniel Manikan, Amelia Wilkinson, Jenny Gastmeier, Jason C. Kwan, Hapiloe Byaruhanga, Linia Shaji, Siji George, Stephanie Handsor, Reshma Anna Roy, Chong Sung Kim, Selam Mequanint, Fahad Razak, Amol A. Verma
2025 J jnl
Appl. Intell.
Weihan Liu, Mingwen Shao, Lingzhuang Meng, Yuanjian Qiao, Zhiyuan Bao
2024 C conf
IGARSS
Jie Cheng, Shugui Zhou, Quan Zhang, Xiangchen Meng, Weihan Liu, Shengyue Dong, Aixia Yang, Qi Zeng, Manqing Liu, Zhengyang Wang, Mengfei Guo, Chenze Wu, Hao Sun, Helin Wang
2024 J jnl
Vis. Comput.
Mingwen Shao, Zhiyuan Bao, Weihan Liu, Yuanjian Qiao, Yecong Wan
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Weihan Liu, Jie Cheng
2023 J jnl
IEEE Trans. Ind. Informatics
Weihan Liu, Ting Wang, Zhongmei Li, Zhencheng Ye, Xin Peng, Wenli Du
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Weihan Liu, Jie Cheng, Qiao Wang
2023 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiangchen Meng, Weihan Liu, Jie Cheng, Hao Guo, Beibei Yao
2023 conf
ICIAI
Weihan Liu
2022 J jnl
Remote. Sens.
Shengyue Dong, Jie Cheng, Jiancheng Shi, Chunxiang Shi, Shuai Sun, Weihan Liu
2022 J jnl
IEEE Trans. Ind. Electron.
Fei Yang, Yayun Liu, Weihan Liu, Kai Yao
2022 J jnl
Int. J. Digit. Earth
Weihan Liu, Jiancheng Shi, Shunlin Liang, Shugui Zhou, Jie Cheng
2021 conf
ICCIR
Weihan Liu
2017 J jnl
Remote. Sens.
Hao Sun, Yanmei Wang, Weihan Liu, Shuyun Yuan, Ruwei Nie
2017 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Hao Sun, Weihan Liu, Yanmei Wang, Shuyun Yuan
2017 conf
WCSP
Weihan Liu, Yang Li, Feng Yang, Lianghui Ding, Cheng Zhi
tests/unit/test_decompile_arch.py
← Index tests/unit/test_decompile_arch.py python
"""Unit tests for architecture modules:
- bninja/arch/creator.py
- bninja/arch/x86.py
"""
import sys
import pytest

# Install binaryninja stubs before importing arch modules
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

from redb.extractors.decompiler.bninja.arch.creator import ArchitectureCreator
from redb.extractors.decompiler.bninja.arch.x86 import Arch_x86


# ============================================================================
# 3a. ArchitectureCreator
# ============================================================================

class TestArchitectureCreator:
    def test_create_x86(self):
        arch = ArchitectureCreator("x86").get()
        assert isinstance(arch, Arch_x86)

    def test_create_x86_case_insensitive(self):
        for name in ["X86", "x86", "X86"]:
            arch = ArchitectureCreator(name).get()
            assert isinstance(arch, Arch_x86)

    def test_unsupported_arch_raises(self):
        with pytest.raises(ValueError, match="Unsupported architecture"):
            ArchitectureCreator("arm").get()


# ============================================================================
# 3b. Arch_x86
# ============================================================================

class TestArch_x86Registers:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_register_valid(self):
        assert self.arch.is_register("RAX") is True
        assert self.arch.is_register("eax") is True
        assert self.arch.is_register("XMM0") is True

    def test_is_register_invalid(self):
        assert self.arch.is_register("INVALID_REG") is False

    def test_is_general_purpose_register(self):
        assert self.arch.is_general_purpose_register("RAX") is True
        assert self.arch.is_general_purpose_register("XMM0") is False

    def test_is_stack_register(self):
        assert self.arch.is_stack_register("RSP") is True
        assert self.arch.is_stack_register("RBP") is True
        assert self.arch.is_stack_register("RAX") is False

    def test_is_xmm_register(self):
        assert self.arch.is_xmm_register("XMM0") is True
        assert self.arch.is_xmm_register("RAX") is False


class TestArch_x86OpcodeCategories:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_opcode_categories_populated(self):
        assert len(self.arch.opcode_categories) > 0

    def test_opcode_mov_category(self):
        assert self.arch.opcode_categories["MOV"] == "DATA_MOVEMENT"

    def test_opcode_call_category(self):
        assert self.arch.opcode_categories["CALL"] == "CONTROL_FLOW"

    def test_opcode_add_category(self):
        assert self.arch.opcode_categories["ADD"] == "ARITHMETIC"


class TestArch_x86ControlFlow:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_control_flow_instruction_by_mnemonic(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("JMP") is True
        assert self.arch.is_control_flow_instruction_by_mnemonic("MOV") is False

    def test_is_control_flow_instruction_call(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("CALL") is True

    def test_is_control_flow_instruction_ret(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("RET") is True

    def test_is_control_flow_instruction_loop(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("LOOP") is True

    def test_is_control_flow_instruction_empty(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("") is False
        assert self.arch.is_control_flow_instruction_by_mnemonic(None) is False