I-Lun Tseng

21 papers A* 1C 1Misc 1Journal 8Unranked 9
YearRankTypeTitle / Venue / Authors
2024 conf
ISPD
I-Lun Tseng
2024 conf
APCCAS
I-Lun Tseng
2022 J jnl
CoRR
Fu-Chieh Chang, Yu-Wei Tseng, Ya-Wen Yu, Ssu-Rui Lee, Alexandru Cioba, I-Lun Tseng, Da-Shan Shiu, Jhih-Wei Hsu, Cheng-Yuan Wang, Chien-Yi Yang, Ren-Chu Wang, Yao-Wen Chang, Tai-Chen Chen, Tung-Chieh Chen
2022 A* conf
DAC
Fu-Chieh Chang, Yu-Wei Tseng, Ya-Wen Yu, Ssu-Rui Lee, Alexandru Cioba, I-Lun Tseng, Da-Shan Shiu, Jhih-Wei Hsu, Cheng-Yuan Wang, Chien-Yi Yang, Ren-Chu Wang, Yao-Wen Chang, Tai-Chen Chen, Tung-Chieh Chen
2019 conf
APCCAS
I-Lun Tseng, Zhao Chuan Lee, Vikas Tripathi, Chun Ming Tommy Yip, Zhinan Chen, Jonathan Ong
2018 J jnl
CoRR
Yongfu Li, Valerio Perez, I-Lun Tseng, Zhao Chuan Lee, Vikas Tripathi, Jason Khaw, Yoong Seang Jonathan Ong
2018 conf
APCCAS
I-Lun Tseng, Yongfu Li, Valerio Perez, Vikas Tripathi, Zhao Chuan Lee, Yoong Seang Jonathan Ong
2018 J jnl
CoRR
I-Lun Tseng, Yongfu Li, Valerio Perez, Vikas Tripathi, Zhao Chuan Lee, Yoong Seang Jonathan Ong
2018 J jnl
CoRR
Vikas Tripathi, Valerio Perez, Yongfu Li, Zhao Chuan Lee, I-Lun Tseng, Jonathan Ong
2018 J jnl
CoRR
I-Lun Tseng, Valerio Perez, Yongfu Li, Zhao Chuan Lee, Vikas Tripathi, Yoong Seang Jonathan Ong
2018 conf
ISVLSI
Yongfu Li, I-Lun Tseng, Zhao Chuan Lee, Valerio Perez, Vikas Tripathi, Yoong Seang Jonathan Ong
2018 J jnl
CoRR
Vikas Tripathi, Yongfu Li, Zhao Chuan Lee, I-Lun Tseng, Jason Khaw, Jonathan Ong
2013 J jnl
ACM Trans. Design Autom. Electr. Syst.
Yao-Lin Chang, I-Lun Tseng
2013 conf
MWSCAS
Yao-I Tseng, I-Lun Tseng, Adam Postula
2013 conf
NEWCAS
Yao-I Tseng, I-Lun Tseng, Tsao Hsiao Huang, Adam Postula
2013 conf
ISQED
Hsin-Hung Liu, Rung-Bin Lin, I-Lun Tseng
2010 Misc conf
IC-AI
I-Lun Tseng, Huan-Wen Chen, Che-I Lee, Adam Postula
2008
I-Lun Tseng
2008 J jnl
ACM Trans. Design Autom. Electr. Syst.
I-Lun Tseng, Adam Postula
2006 conf
ACM Great Lakes Symposium on VLSI
I-Lun Tseng, Adam Postula
2004 C conf
FDL
I-Lun Tseng, Adam Postula
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