Kaixi Wang

15 papers C 1Misc 1Journal 10Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Inf. Secur. Appl.
Zhehan Li, Kaixi Wang, Li Guo
2025 J jnl
Multim. Syst.
Zichen Wang, Kaixi Wang, Xiaozhu Jia, Xinchun Cui
2025 J jnl
Comput. Electr. Eng.
Jinglei Wang, Kaixi Wang
2025 J jnl
J. Netw. Comput. Appl.
Kaixi Wang, Yunhe Cui, Guowei Shen, Chun Guo, Yi Chen, Qing Qian
2024 conf
ICIC (9)
ShenHong Cao, Kaixi Wang, Yanbin Fan
2024 conf
NLPCC (3)
Qingwei Zeng, Kaixi Wang
2023 J jnl
J. Netw. Comput. Appl.
Kaixi Wang, Yunhe Cui, Qing Qian, Yi Chen, Chun Guo, Guowei Shen
2021 J jnl
Int. J. Digit. Crime Forensics
Kaixi Wang, Xiangmei Yu, Ziyi Zou
2021 J jnl
Multim. Syst.
Xinhao Sun, Kaixi Wang, Shujun Li
2021 J jnl
Neuroinformatics
Bingye Lei, Fengchun Wu, Jing Zhou, Dongsheng Xiong, Kaixi Wang, Lingyin Kong, Pengfei Ke, Jun Chen, Yuping Ning, Xiaobo Li, Zhiming Xiang, Kai Wu
2019 J jnl
IEEE Access
Kaixi Wang, Quansheng Gao
2019 J jnl
IEEE Access
Congfei Sun, Kaixi Wang
2019 C conf
IWDW
Danyang Zhao, Kaixi Wang
2018 conf
ICCCS (4)
Quansheng Gao, Kaixi Wang
2013 Misc conf
ICNC
Xinfeng Xie, Zhongqing Yu, Kaixi Wang
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