Jack W. Carlyle

16 papers A* 4C 1Journal 5Unranked 6
YearRankTypeTitle / Venue / Authors
2012 J jnl
Comput. J.
Azaria Paz, Jack W. Carlyle
1997 C conf
Developments in Language Theory
Azaria Paz, Jack W. Carlyle
1991 conf
IPPS
Alberto Avritzer, Mario Gerla, Jack W. Carlyle
1990 A* conf
INFOCOM
Alberto Avritzer, Mario Gerla, Berthier A. Ribeiro-Neto, Jack W. Carlyle, Walter J. Karplus
1989 A* conf
INFOCOM
Joseph Betser, Alberto Avritzer, Jack W. Carlyle, Walter J. Karplus
1989 conf
ACM Conference on Computer Science
Joseph Betser, Alberto Avritzer, Jack W. Carlyle, Walter J. Karplus
1986 conf
Graph-Grammars and Their Application to Computer Science
Jack W. Carlyle, Sheila A. Greibach, Azaria Paz
1983 J jnl
Math. Syst. Theory
Jack W. Carlyle, Sheila A. Greibach, Azaria Paz
1975 A* ed.
STOC
William C. Rounds, Nancy Martin, Jack W. Carlyle, Michael A. Harrison
1974 conf
SWAT
Jack W. Carlyle, Sheila A. Greibach, Azaria Paz
1974 A* ed.
STOC
Robert L. Constable, Robert W. Ritchie, Jack W. Carlyle, Michael A. Harrison
1971 J jnl
J. Comput. Syst. Sci.
Jack W. Carlyle, Azaria Paz
1968 conf
SWAT
T. T. Nieh, Jack W. Carlyle
1965 conf
SWCT
Jack W. Carlyle
1964 J jnl
IEEE Trans. Inf. Theory
Jack W. Carlyle, John B. Thomas
1964 J jnl
Inf. Control.
Jack W. Carlyle
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