Jacques Bernussou

30 papers C 1Misc 1Journal 23Unranked 5
YearRankTypeTitle / Venue / Authors
2009 J jnl
IEEE Trans. Autom. Control.
Germain Garcia, Sophie Tarbouriech, Jacques Bernussou
2008 J jnl
IEEE Trans. Autom. Control.
Jamal Daafouz, Jacques Bernussou, José Claudio Geromel
2005 conf
CDC/ECC
Ernesto Granado, William Colmenares, Jacques Bernussou, Germain Garcia
2005 conf
CDC/ECC
Jacques Bernussou, José Claudio Geromel, Rubens H. Korogui
2002 J jnl
SIAM J. Control. Optim.
José Claudio Geromel, Maurício C. de Oliveira, Jacques Bernussou
2002 conf
CDC
Jamal Daafouz, Jacques Bernussou
2002 J jnl
Autom.
Germain Garcia, Jamal Daafouz, Jacques Bernussou
2001 J jnl
IEEE Trans. Autom. Control.
Pierre Apkarian, Hoang Duong Tuan, Jacques Bernussou
2001 J jnl
Syst. Control. Lett.
Jamal Daafouz, Jacques Bernussou
2001 conf
CDC
Jamal Daafouz, Jacques Bernussou
2000 C conf
ACC
Olivier Bachelier, Dimitri Peaucelle, Denis Arzelier, Jacques Bernussou
2000 conf
CDC
Pierre Apkarian, Hoang Duong Tuan, Jacques Bernussou
2000 J jnl
SIAM J. Control. Optim.
José Claudio Geromel, Jacques Bernussou, Germain Garcia, Maurício C. de Oliveira
1999 J jnl
IEEE Trans. Autom. Control.
José Claudio Geromel, Jacques Bernussou, Maurício Carvalho de Oliveira
1998 J jnl
IEEE Trans. Autom. Control.
Germain Garcia, Jamal Daafouz, Jacques Bernussou
1998 J jnl
IEEE Trans. Control. Syst. Technol.
Jamal Daafouz, Germain Garcia, Jacques Bernussou
1996 J jnl
Math. Control. Signals Syst.
Germain Garcia, Jacques Bernussou
1995 J jnl
Eur. J. Control
Germain Garcia, Jacques Bernussou, Denis Arzelier
1995 J jnl
IEEE Trans. Autom. Control.
Germain Garcia, Jacques Bernussou
1994 J jnl
Autom.
José Claudio Geromel, Jacques Bernussou, Pedro Luis Dias Peres
1993 J jnl
IEEE Trans. Autom. Control.
Denis Arzelier, Jacques Bernussou, Germain Garcia
1993 J jnl
Autom.
Pedro Luis Dias Peres, José Claudio Geromel, Jacques Bernussou
1989 J jnl
Autom.
R. I. Badr, Mohamed F. Hassan, Jacques Bernussou, A. Y. Bilal
1987 J jnl
IEEE Trans. Commun.
Francoise Le Gall, Jacques Bernussou
1986 J jnl
IEEE J. Sel. Areas Commun.
Jean-Marie Garcia, Francoise Le Gall, Jacques Bernussou
1984 Misc conf
Performance
Francoise Le Gall, Jacques Bernussou, Jean-Marie Garcia
1983 J jnl
IEEE Trans. Commun.
Francoise Le Gall, Jacques Bernussou
1983 J jnl
IEEE Trans. Commun.
Francoise Le Gall, Jacques Bernussou
1982 J jnl
Autom.
José Claudio Geromel, Jacques Bernussou
1979 J jnl
Autom.
José Claudio Geromel, Jacques Bernussou
tests/unit/test_decompile_arch.py
← Index tests/unit/test_decompile_arch.py python
"""Unit tests for architecture modules:
- bninja/arch/creator.py
- bninja/arch/x86.py
"""
import sys
import pytest

# Install binaryninja stubs before importing arch modules
from tests.unit.conftest_binja_stubs import install_binja_stubs
install_binja_stubs()

from redb.extractors.decompiler.bninja.arch.creator import ArchitectureCreator
from redb.extractors.decompiler.bninja.arch.x86 import Arch_x86


# ============================================================================
# 3a. ArchitectureCreator
# ============================================================================

class TestArchitectureCreator:
    def test_create_x86(self):
        arch = ArchitectureCreator("x86").get()
        assert isinstance(arch, Arch_x86)

    def test_create_x86_case_insensitive(self):
        for name in ["X86", "x86", "X86"]:
            arch = ArchitectureCreator(name).get()
            assert isinstance(arch, Arch_x86)

    def test_unsupported_arch_raises(self):
        with pytest.raises(ValueError, match="Unsupported architecture"):
            ArchitectureCreator("arm").get()


# ============================================================================
# 3b. Arch_x86
# ============================================================================

class TestArch_x86Registers:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_register_valid(self):
        assert self.arch.is_register("RAX") is True
        assert self.arch.is_register("eax") is True
        assert self.arch.is_register("XMM0") is True

    def test_is_register_invalid(self):
        assert self.arch.is_register("INVALID_REG") is False

    def test_is_general_purpose_register(self):
        assert self.arch.is_general_purpose_register("RAX") is True
        assert self.arch.is_general_purpose_register("XMM0") is False

    def test_is_stack_register(self):
        assert self.arch.is_stack_register("RSP") is True
        assert self.arch.is_stack_register("RBP") is True
        assert self.arch.is_stack_register("RAX") is False

    def test_is_xmm_register(self):
        assert self.arch.is_xmm_register("XMM0") is True
        assert self.arch.is_xmm_register("RAX") is False


class TestArch_x86OpcodeCategories:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_opcode_categories_populated(self):
        assert len(self.arch.opcode_categories) > 0

    def test_opcode_mov_category(self):
        assert self.arch.opcode_categories["MOV"] == "DATA_MOVEMENT"

    def test_opcode_call_category(self):
        assert self.arch.opcode_categories["CALL"] == "CONTROL_FLOW"

    def test_opcode_add_category(self):
        assert self.arch.opcode_categories["ADD"] == "ARITHMETIC"


class TestArch_x86ControlFlow:
    def setup_method(self):
        self.arch = Arch_x86()

    def test_is_control_flow_instruction_by_mnemonic(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("JMP") is True
        assert self.arch.is_control_flow_instruction_by_mnemonic("MOV") is False

    def test_is_control_flow_instruction_call(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("CALL") is True

    def test_is_control_flow_instruction_ret(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("RET") is True

    def test_is_control_flow_instruction_loop(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("LOOP") is True

    def test_is_control_flow_instruction_empty(self):
        assert self.arch.is_control_flow_instruction_by_mnemonic("") is False
        assert self.arch.is_control_flow_instruction_by_mnemonic(None) is False