Xiaoke Tang

19 papers C 1Journal 12Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans Autom. Sci. Eng.
Bin Zhang, Xiaoke Tang, Jun Cheng, Mengzhuo Luo, Dan Zhang, Leszek Rutkowski, Mei Yan
2025 J jnl
Fuzzy Sets Syst.
Xiaoke Tang, Dian Zhang, Jun Cheng, Dan Zhang, Wenhai Qi, Yu Fu
2025 J jnl
J. Frankl. Inst.
Xiaoke Tang, Yunliang Wang, Jun Cheng, Dan Zhang, Wenhai Qi
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Xiaoke Tang, Jun Cheng, Bin Zhang, Leszek Rutkowski, Wentao Huang
2023 J jnl
Comput. Ind. Eng.
Fuli Sui, Xiaoke Tang, Zihao Dong, Xingjia Gan, Peng Luo, Jing Sun
2022 J jnl
Wirel. Pers. Commun.
Sihai Qiu, Dongyan Zhao, Yubo Wang, Xiaoke Tang, Xu Zhao, Yubing Zhang
2022 J jnl
Inf. Sci.
Jing Sun, Xingjia Gan, Dunwei Gong, Xiaoke Tang, Hongwei Dai, Zhaoman Zhong
2021 J jnl
Microelectron. J.
Xiaoke Tang, Xu Zhao, Ang Hu, Dongsheng Liu, Zirui Jin
2021 J jnl
Microelectron. J.
Hongwei Shen, Yubo Wang, Xiaoke Tang, Dejian Li, Xi Feng
2021 J jnl
J. Web Eng.
Hongqiang Li, Dongyan Zhao, Xiaoke Tang, Jie Gan, Xu Zhao, Yubing Zhang
2021 J jnl
J. Intell. Fuzzy Syst.
Nan Zhao, Yubo Wang, Xiaoke Tang, Jie Gan, Xu Zhao, Yubing Zhang
2020 J jnl
IEEE Access
Shasha Zhai, Xiaoke Tang, Tiancong Huang, Xu Zhao, Yucheng Wu
2020 conf
ICRAI
Sihai Qiu, Dongyan Zhao, Yubo Wang, Xiaoke Tang, Xu Zhao, Yubing Zhang
2019 conf
ICCT
Yapeng Zhang, Xu Hu, Xi Feng, Yi Hu, Xiaoke Tang
2019 conf
ICCT
Hongqiang Li, Yubing Zhang, Xu Zhao, Xiaoke Tang
2019 conf
SmartGridComm
Huijun Chen, Yi Hu, Zhe Zhang, Yan Ma, Xiaoke Tang
2019 conf
ICCT
Yi Xu, Xu Hu, Xi Feng, Yi Hu, Xiaoke Tang
2019 conf
ICCT
Jichao Liu, Yahong Zhao, Ji Yang, Xiaoke Tang
2017 C conf
CIS
Sihang Pu, Zheng Guo, Junrong Liu, Dawu Gu, Yingxuan Yang, Xiaoke Tang, Jie Gan
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