Ilya Shvartsman

18 papers Journal 7Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Optim. Theory Appl.
Ilya Shvartsman
2024 J jnl
Math. Control. Signals Syst.
Vladimir Gaitsgory, Ilya Shvartsman
2023 conf
CDC
Ilya Shvartsman
2022 J jnl
SIAM J. Control. Optim.
Vivek S. Borkar, Vladimir Gaitsgory, Ilya Shvartsman
2019 J jnl
SIAM J. Control. Optim.
Vivek S. Borkar, Vladimir Gaitsgory, Ilya Shvartsman
2019 conf
CDC
Vivek S. Borkar, Vladimir Gaitsgory, Ilya Shvartsman
2016 conf
CDC
Vladimir Gaitsgory, Alex Parkinson, Ilya Shvartsman
2012 J jnl
Commun. Stat. Simul. Comput.
Ilya Shvartsman, Vernon M. Chinchilli, Hsiao-pin Liu
2012 J jnl
J. Optim. Theory Appl.
Ilya Shvartsman
2011 conf
CDC/ECC
Ilya Shvartsman
2011 conf
CDC/ECC
Boris S. Mordukhovich, Ilya Shvartsman
2010 conf
CDC
Ilya Shvartsman
2006 conf
CDC
Hartmut Logemann, Eugene P. Ryan, Ilya Shvartsman
2005 conf
CDC/ECC
Hartmut Logemann, Eugene P. Ryan, Ilya Shvartsman
2005 conf
CDC/ECC
Boris S. Mordukhovich, Ilya Shvartsman
2004 conf
CDC
Boris S. Mordukhovich, Ilya Shvartsman
2004 J jnl
SIAM J. Control. Optim.
Boris S. Mordukhovich, Ilya Shvartsman
2002 conf
CDC
Boris S. Mordukhovich, Ilya Shvartsman
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