I. R. Goodman

21 papers Journal 17Unranked 3
YearRankTypeTitle / Venue / Authors
2013 J jnl
CoRR
I. R. Goodman
2005 J jnl
Ann. Math. Artif. Intell.
Donald Bamber, I. R. Goodman, Hung T. Nguyen
2004 J jnl
Soft Comput.
Donald Bamber, I. R. Goodman, Hung T. Nguyen
2002 J jnl
Int. J. Approx. Reason.
Raul Trejo, Vladik Kreinovich, I. R. Goodman, Jesus Martinez, Reginaldo Gonzalez
2002 conf
JCIS
I. R. Goodman, Donald Bamber, Hung T. Nguyen, W. C. Torrez
2002 J jnl
Inf. Sci.
I. R. Goodman, Donald Bamber, Hung T. Nguyen, W. C. Torrez
2001 J jnl
Inf. Sci.
Donald Bamber, I. R. Goodman, Hung T. Nguyen
2001 J jnl
Int. J. Intell. Syst.
I. R. Goodman, Vladik Kreinovich
2001 conf
ISIPTA
Donald Bamber, I. R. Goodman
1999 J jnl
Inf. Sci.
I. R. Goodman
1999 J jnl
Inf. Sci.
I. R. Goodman, Hung T. Nguyen
1995 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
I. R. Goodman, Hung T. Nguyen
1994 J jnl
Inf. Sci.
I. R. Goodman, Hung T. Nguyen
1994 J jnl
Int. J. Intell. Syst.
Hung T. Nguyen, I. R. Goodman
1994 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
I. R. Goodman
1993 J jnl
Inf. Sci.
I. R. Goodman, Hung T. Nguyen
1991 book
Conditional inference and logic for intelligent systems - a theory of measure-free conditioning.
I. R. Goodman, Hung T. Nguyen, Elbert A. Walker
1991 J jnl
Inf. Sci.
I. R. Goodman
1990 conf
ISMVL
I. R. Goodman
1988 J jnl
Int. J. Approx. Reason.
I. R. Goodman
1984 J jnl
Inf. Sci.
I. R. Goodman
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