Haichao Wang

28 papers A* 3C 1Journal 23Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Soft Comput.
Yan-Ling Bao, Shumin Cheng, Haichao Wang
2026 J jnl
Int. J. Fuzzy Syst.
Shumin Cheng, Yanling Bao, Haichao Wang
2026 J jnl
Comput. Geosci.
Bohan Chen, Yan Zhang, Liangliang Yao, Haichao Wang, Qifeng Chen, Miaomiao Wang
2025 J jnl
IEEE Trans. Big Data
Ziyu Jia, Heng Liang, Yucheng Liu, Haichao Wang, Tianzi Jiang
2025 J jnl
CoRR
Haichao Wang, Jiangtao Wen, Yuxing Han
2025 J jnl
CoRR
Haichao Wang, Xinyue Xi, Jiangtao Wen, Yuxing Han
2025 J jnl
Pattern Anal. Appl.
Xiaowei Liu, Haichao Wang
2024 C conf
INDIN
Ziyi Wang, Yuanye Chen, Hua Wang, Haichao Wang, Fang Fang
2024 J jnl
Pattern Anal. Appl.
Qiqi Zhou, Haichao Wang
2024 A* conf
KDD
Ziyu Jia, Haichao Wang, Yucheng Liu, Tianzi Jiang
2024 J jnl
Int. J. Approx. Reason.
Mingjie Cai, Haichao Wang, Feng Xu, Qingguo Li
2024 J jnl
Expert Syst. Appl.
Feng Xu, Mingjie Cai, Qingguo Li, Haichao Wang, Hamido Fujita
2023 conf
CNML
Haichao Wang, Zhonghua Wang, Yong Wang
2023 A* conf
ACM Multimedia
Yucheng Liu, Ziyu Jia, Haichao Wang
2023 J jnl
Remote. Sens.
Meng Wang, Shengrong Lou, Weiwei Hu, Haichao Wang, Xinming Wang, Fengxian Fan, Ravi Varma, Dean S. Venables, Jun Chen
2023 A* conf
IJCAI
Heng Liang, Yucheng Liu, Haichao Wang, Ziyu Jia
2022 J jnl
Soft Comput.
Yueming Yin, Chaoqun Wei, Haichao Wang, Zhenghong Wang, Qinglu Deng
2021 J jnl
Remote. Sens.
Haichao Wang, Zheng Shi, Xuejuan Wang, Yongbo Tan, Honglei Wang, Luying Li, Xiaotong Lin
2021 J jnl
EURASIP J. Adv. Signal Process.
Wanning Liu, Yitao Xu, Ducheng Wu, Haichao Wang, Xueqiang Zheng, Xueqiang Chen
2018 J jnl
Adv. Eng. Softw.
Haichao Wang, Zhijiang Wang, Pengfei Bai, Shengsun Hu, Yanshen Zhang, Ren Wang
2018 J jnl
Int. J. Prod. Res.
Haichao Wang, Jie Zhang, Youlong Lv, Xiaolong Zhang, Guoqiang Guo, Wei Qin, Xiaoxi Wang
2017 J jnl
Frontiers Inf. Technol. Electron. Eng.
Guohai Situ, Haichao Wang
2016 J jnl
EURASIP J. Embed. Syst.
Haichao Wang, Zeng Dong
2016 J jnl
CoRR
Yang Chen, Cheng Cheng, Qiyu Sun, Haichao Wang
2013 J jnl
CoRR
Xuemei Chen, Haichao Wang, Rongrong Wang
2013 J jnl
CoRR
Thomas Strohmer, Haichao Wang
2010 J jnl
CoRR
Akram Aldroubi, Qiyu Sun, Haichao Wang
2008 J jnl
CoRR
Akram Aldroubi, Haichao Wang, Kourosh Zarringhalam
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