Kaihua Wang

24 papers Journal 14Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neural Networks
Fan Shi, Kaihua Wang, Yinghong Cao, Jun Mou
2026 J jnl
Electron. Commer. Res.
Xin Li, Kaihua Wang
2025 J jnl
Int. J. Prod. Res.
Xiaoqing Wang, Kaihua Wang, Baochang Xu, Wenxin Jin
2025 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Pengxuan Li, Kaihua Wang, Suo Gao, Xianying Xu, Jun Mou
2024 J jnl
IEEE Access
Yinghong Cao, Linian Wang, Kaihua Wang, Xianying Xu, Bo Li
2024 J jnl
IEEE Access
Yinghong Cao, Yan Liu, Kaihua Wang, Xianying Xu, Jinshi Lu
2023 J jnl
IET Comput. Vis.
Zhoufeng Liu, Kaihua Wang, Chunlei Li, Shunmin Ding, Jiangtao Xi
2020 J jnl
Appl. Math. Comput.
Junbiao Guan, Kaihua Wang
2019 J jnl
Appl. Math. Comput.
Junbiao Guan, Kaihua Wang
2018 J jnl
Remote. Sens.
Peng Yuan, Weiping Jiang, Kaihua Wang, Nico Sneeuw
2018 J jnl
Remote. Sens.
Qusen Chen, Weiping Jiang, Xiaolin Meng, Peng Jiang, Kaihua Wang, Yilin Xie, Jun Ye
2017 J jnl
EURASIP J. Wirel. Commun. Netw.
Weifeng Mou, Weiwei Yang, Yuzhen Huang, Xiaoming Xu, Yueming Cai, Kaihua Wang
2016 conf
WCSP
Pan Yuan, Yunpeng Cheng, Weiwei Yang, Kaihua Wang, Heng Wang
2016 conf
WOCC
Weiwei Yang, Kaihua Wang, Xiaoming Xu, Jun Zhou
2016 J jnl
J. Cell. Autom.
Junbiao Guan, Kaihua Wang, Fangyue Chen
2012 conf
ICICA (2)
Wenxiang Zhang, Zhanji Gui, Kaihua Wang
2012 conf
ICICA (LNCS)
Yan Yan, Kaihua Wang, Zhanji Gui
2012 conf
ICICA (LNCS)
Kaihua Wang, Wenxiang Zhang, Zhanji Gui
2011 J jnl
Complex Syst.
Junbiao Guan, Kaihua Wang
2011 conf
WCSP
Kaihua Wang, Chunxiao Cai, Yueming Cai
2011 conf
ICICA (2)
Kaihua Wang, Wenxiang Zhang, Zhanji Gui
2011 conf
ICICA (2)
Kaihua Wang, Yan Yan, Zhanji Gui
2011 conf
ICICA (2)
Kaihua Wang, Zhanji Gui
2007 conf
ICNSC
Jihong Li, Yijun Song, Kaihua Wang
tests/unit/test_decompile_function_type.py
← Index tests/unit/test_decompile_function_type.py python
"""Unit tests for bninja/function_type.py."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import install_binja_stubs, SymbolType
install_binja_stubs()

from redb.extractors.decompiler.bninja.function_type import (
    FunctionType,
    FunctionTypeAnalysis,
)


# ============================================================================
# 4a. FunctionType / FunctionTypeAnalysis
# ============================================================================


class TestFunctionTypeEnum:
    def test_function_type_enum_values(self):
        assert FunctionType.USER.value == "USER"
        assert FunctionType.LIBRARY.value == "LIBRARY"
        assert FunctionType.EXTERNAL.value == "EXTERNAL"
        assert FunctionType.THUNK.value == "THUNK"
        assert FunctionType.UNKNOWN.value == "UNKNOWN"


class TestFunctionTypeAnalysis:
    def _make_function(self, symbol_type=None, is_thunk=False, raise_on_symbol=False):
        func = MagicMock()
        func.is_thunk = is_thunk
        if raise_on_symbol:
            type(func).symbol = property(lambda self: (_ for _ in ()).throw(Exception("no symbol")))
        else:
            func.symbol.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        return func

    def test_user_function_type(self):
        func = self._make_function(symbol_type=SymbolType.FunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.USER

    def test_external_function_type(self):
        func = self._make_function(symbol_type=SymbolType.ImportedFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.EXTERNAL

    def test_library_function_type(self):
        func = self._make_function(symbol_type=SymbolType.LibraryFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.LIBRARY

    def test_thunk_function_type(self):
        # Thunk overrides the symbol type
        func = self._make_function(
            symbol_type=SymbolType.FunctionSymbol, is_thunk=True
        )
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.THUNK

    def test_exception_returns_unknown(self):
        func = self._make_function(raise_on_symbol=True)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.UNKNOWN