Xiangyu Pan

16 papers C 2Journal 11Unranked 3
YearRankTypeTitle / Venue / Authors
2025 C conf
CSCWD
Zhenkui Shi, Zhile Cao, Xiangyu Pan, Jiahao Zeng, Feng Yu
2025 C conf
CSCWD
Jialin Wang, Zhenkui Shi, Xiangyu Pan, Jiahao Zeng
2024 conf
ICIC (7)
Di Sun, Tingting Yang, Xiangyu Pan, Jiahao Wang, Gang Pan
2024 J jnl
Genom. Proteom. Bioinform.
Chao Li, Bingchun Chen, Suo Langda, Peng Pu, Xiaojia Zhu, Shiwei Zhou, Peter Kalds, Ke Zhang, Meenu Bhati, Alexander S. Leonard, Shuhong Huang, Ran Li, Awang Cuoji, Xiran Wang, Haolin Zhu, Yujiang Wu, Renqin Cuomu, Ba Gui, Ming Li, Yutao Wang, Yan Li, Wenwen Fang, Ting Jia, Tianchun Pu, Xiangyu Pan, Yudong Cai, Chong He, Liming Wang, Yu Jiang, Jian-Lin Han, Yulin Chen, Ping Zhou, Hubert Pausch, Xiaolong Wang
2023 J jnl
J. Syst. Archit.
Xiangyu Pan, Yuqiao Jin, Fagen Li
2023 J jnl
Genom. Proteom. Bioinform.
Xiangyu Pan, Zhaoxia Ma, Xinqi Sun, Hui Li, Tingting Zhang, Chen Zhao, Nini Wang, Rasmus Heller, Wing Hung Wong, Wen Wang, Yu Jiang, Yong Wang
2023 J jnl
IEEE Trans. Cogn. Dev. Syst.
Hui Chang, Yixuan Sheng, Jinbiao Liu, Hongyu Yang, Xiangyu Pan, Honghai Liu
2022 conf
ICIRA (2)
Xiangyu Pan, Hui Chang, Honghai Liu
2022 J jnl
IEEE Trans. Fuzzy Syst.
Lun Hu, Xiangyu Pan, Zehai Tang, Xin Luo
2022 J jnl
IEEE Internet Things J.
Xiangyu Pan, Yuqiao Jin, Ziqing Wang, Fagen Li
2022 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Xiangyu Pan, Lun Hu, Pengwei Hu, Zhu-Hong You
2021 J jnl
IEEE Trans. Netw. Sci. Eng.
Lun Hu, Jun Zhang, Xiangyu Pan, Xin Luo, Huaqiang Yuan
2021 J jnl
Integr. Comput. Aided Eng.
Lun Hu, Xiangyu Pan, Hong Yan, Pengwei Hu, Tiantian He
2021 J jnl
Bioinform.
Lun Hu, Jun Zhang, Xiangyu Pan, Hong Yan, Zhu-Hong You
2021 conf
CASE
Lun Hu, Xiangyu Pan, Xin Luo
2021 J jnl
J. Syst. Archit.
Xiangyu Pan, Fagen Li
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