James H. Pikul

15 papers A* 2A 1Journal 10Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
Sci. Robotics
Yichao Shi, James H. Pikul
2025 J jnl
CoRR
Gregory M. Campbell, Gentian Muhaxheri, Leonardo Ferreira Guilhoto, Christian D. Santangelo, Paris Perdikaris, James H. Pikul, Mark Yim
2025 A* conf
ICRA
Jessica Yin, Haozhi Qi, Jitendra Malik, James H. Pikul, Mark Yim, Tess Lee Hellebrekers
2025 A* conf
ICRA
Jessica Yin, Paarth Shah, Naveen Kuppuswamy, Andrew Beaulieu, Avinash Uttamchandani, Alejandro M. Castro, James H. Pikul, Russ Tedrake
2024 conf
RoboSoft
Gregory M. Campbell, R. Daelan Roosa, Kevin T. Turner, James H. Pikul, Mark Yim
2024 J jnl
CoRR
Jessica Yin, Haozhi Qi, Jitendra Malik, James H. Pikul, Mark Yim, Tess Lee Hellebrekers
2024 J jnl
Frontiers Robotics AI
Rithwik Udayagiri, Jessica Yin, Xinyao Cai, William Townsend, Varun Trivedi, Rohan Shende, O. Francis Sowande, Laura A. Prosser, James H. Pikul, Michelle J. Johnson
2023 J jnl
Adv. Intell. Syst.
Min Wang, Yue Gao, James H. Pikul
2023 J jnl
CoRR
Jessica Yin, Paarth Shah, Naveen Kuppuswamy, Andrew Beaulieu, Avinash Uttamchandani, Alejandro M. Castro, James H. Pikul, Russ Tedrake
2022 J jnl
Sci. Robotics
David J. Levine, Gokulanand M. Iyer, R. Daelan Roosa, Kevin T. Turner, James H. Pikul
2022 A conf
IROS
Gregory M. Campbell, Jessica Yin, Yuyang Song, Umesh Gandhi, Mark Yim, James H. Pikul
2022 J jnl
CoRR
Gregory M. Campbell, Jessica Yin, Yuyang Song, Umesh Gandhi, Mark Yim, James H. Pikul
2022 J jnl
IEEE Robotics Autom. Lett.
Yichao Shi, Zhimin Jiang, James H. Pikul
2022 conf
RoboSoft
Jessica Yin, Gregory M. Campbell, James H. Pikul, Mark Yim
2022 J jnl
CoRR
Jessica Yin, Gregory M. Campbell, James H. Pikul, Mark Yim
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