Rachel Hegeman

12 papers Journal 10Unranked 2
YearRankTypeTitle / Venue / Authors
2022 J jnl
IEEE Trans. Robotics
Shahriar Sefati, Rachel Hegeman, Iulian Iordachita, Russell H. Taylor, Mehran Armand
2022 J jnl
Field Robotics
Jay Jasper, Ara Kourchians, Mark Gonzalez, Blair Emanuel, John V. Nicholson, Greg McCutcheon, Max P. Austin, Matt Kozlowski, Emma Holmes, Rachel Hegeman, Stephen McCrory, Michael Zeher, David Handelman, Robert J. Griffin, Sisir Karumanchi, Christian Hubicki, Brett Kennedy, Jonathan E. Clark, Jerry E. Pratt, Dilip Patel, Jason L. Pusey
2022 J jnl
Field Robotics
Robert J. Griffin, Stephen McCrory, Sylvain Bertrand, Duncan Calvert, Inho Lee, Peter D. Neuhaus, Douglas Stephen, Jay Jasper, Sisir Karumanchi, Ara Kourchians, Blair Emanuel, Emma Holmes, Rachel Hegeman, Jason L. Pusey, Jerry E. Pratt
2019 J jnl
CoRR
Robert B. Grupp, Mathias Unberath, Cong Gao, Rachel Hegeman, Ryan J. Murphy, Clayton P. Alexander, Yoshito Otake, Benjamin A. McArthur, Mehran Armand, Russell H. Taylor
2019 J jnl
IEEE Robotics Autom. Lett.
Farshid Alambeigi, Zerui Wang, Rachel Hegeman, Yun-Hui Liu, Mehran Armand
2019 conf
ISMR
Shahriar Sefati, Rachel Hegeman, Farshid Alambeigi, Iulian Iordachita, Mehran Armand
2019 J jnl
CoRR
Robert B. Grupp, Ryan J. Murphy, Rachel Hegeman, Clayton P. Alexander, Mathias Unberath, Yoshito Otake, Benjamin A. McArthur, Mehran Armand, Russell H. Taylor
2019 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Bastian Bier, Florian Goldmann, Jan-Nico Zaech, Javad Fotouhi, Rachel Hegeman, Robert B. Grupp, Mehran Armand, Greg Osgood, Nassir Navab, Andreas Maier, Mathias Unberath
2018 J jnl
IEEE Robotics Autom. Lett.
Farshid Alambeigi, Zerui Wang, Rachel Hegeman, Yun-Hui Liu, Mehran Armand
2018 J jnl
CoRR
Shahriar Sefati, Rachel Hegeman, Farshid Alambeigi, Iulian Iordachita, Mehran Armand
2018 conf
BioRob
Farshid Alambeigi, Mahsan Bakhtiarinejad, Armina Azizi, Rachel Hegeman, Iulian Iordachita, Harpal Khanuja, Mehran Armand
2018 J jnl
CoRR
Farshid Alambeigi, Mahsan Bakhtiarinejad, Armina Azizi, Rachel Hegeman, Iulian Iordachita, Harpal Khanuja, Mehran Armand
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