James D. Currie

115 papers C 4Journal 106Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
Electron. J. Comb.
James D. Currie, L'ubomíra Dvoráková, Pascal Ochem, Daniela Opocenská, Narad Rampersad, Jeffrey O. Shallit
2025 J jnl
Discret. Math. Theor. Comput. Sci.
James D. Currie, Narad Rampersad
2025 J jnl
CoRR
Narad Rampersad, James D. Currie
2025 J jnl
CoRR
John M. Campbell, James D. Currie, Narad Rampersad
2025 J jnl
Electron. J. Comb.
James D. Currie, Lucas Mol, Jarkko Peltomäki
2025 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Narad Rampersad
2025 conf
WORDS
James D. Currie, Narad Rampersad
2025 J jnl
CoRR
James D. Currie
2024 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Narad Rampersad
2024 J jnl
SIAM J. Discret. Math.
James D. Currie, Lucas Mol, Narad Rampersad, Jeffrey O. Shallit
2024 J jnl
Electron. J. Comb.
James D. Currie, Narad Rampersad
2024 J jnl
CoRR
James D. Currie, Lucas Mol, Jarkko Peltomäki
2023 J jnl
CoRR
James D. Currie, Narad Rampersad
2023 J jnl
Discret. Math. Theor. Comput. Sci.
Aseem R. Baranwal, James D. Currie, Lucas Mol, Pascal Ochem, Narad Rampersad, Jeffrey O. Shallit
2023 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Pascal Ochem, Narad Rampersad, Jeffrey O. Shallit
2023 J jnl
CoRR
James D. Currie, Narad Rampersad
2023 J jnl
CoRR
James D. Currie, Narad Rampersad
2023 J jnl
CoRR
James D. Currie
2022 J jnl
CoRR
Aseem R. Baranwal, James D. Currie, Lucas Mol, Pascal Ochem, Narad Rampersad, Jeffrey O. Shallit
2022 J jnl
CoRR
James D. Currie, Pascal Ochem, Narad Rampersad, Jeffrey O. Shallit
2022 J jnl
CoRR
James D. Currie, Pascal Ochem, Narad Rampersad, Jeffrey O. Shallit
2021 J jnl
Theor. Comput. Sci.
James D. Currie, Jesse T. Johnson
2021 J jnl
CoRR
James D. Currie, Lucas Mol, Narad Rampersad, Jeffrey O. Shallit
2021 J jnl
Theor. Comput. Sci.
James D. Currie, Lucas Mol
2020 J jnl
J. Integer Seq.
James D. Currie, Lucas Mol, Narad Rampersad
2020 J jnl
Discret. Math. Theor. Comput. Sci.
James D. Currie, Lucas Mol, Narad Rampersad
2020 J jnl
CoRR
James D. Currie, Lucas Mol
2019 J jnl
Electron. J. Comb.
James D. Currie, Lucas Mol, Narad Rampersad
2019 J jnl
J. Integer Seq.
James D. Currie
2019 J jnl
CoRR
James D. Currie
2019 J jnl
CoRR
James D. Currie, Tero Harju, Pascal Ochem, Narad Rampersad
2019 J jnl
Theor. Comput. Sci.
James D. Currie, Tero Harju, Pascal Ochem, Narad Rampersad
2019 J jnl
CoRR
James D. Currie, Lucas Mol, Narad Rampersad
2019 conf
WORDS
James D. Currie, Lucas Mol
2019 J jnl
CoRR
James D. Currie, Lucas Mol, Narad Rampersad
2019 J jnl
CoRR
James D. Currie, Lucas Mol
2018 J jnl
Theor. Comput. Sci.
James D. Currie, Lucas Mol, Narad Rampersad
2018 J jnl
CoRR
James D. Currie, Lucas Mol, Narad Rampersad
2018 J jnl
Theor. Comput. Sci.
James D. Currie, Florin Manea, Dirk Nowotka, Kamellia Reshadi
2017 J jnl
Int. J. Algebra Comput.
James D. Currie, Lucas Mol, Narad Rampersad
2017 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Lucas Mol, Narad Rampersad
2016 J jnl
Electron. J. Comb.
James D. Currie
2016 J jnl
CoRR
James D. Currie
2016 J jnl
Electron. J. Comb.
James D. Currie, Philip Lafrance
2016 J jnl
Theor. Comput. Sci.
James D. Currie, Narad Rampersad
2015 J jnl
CoRR
James D. Currie, Philip Lafrance
2015 J jnl
J. Integer Seq.
James D. Currie, Narad Rampersad
2015 J jnl
CoRR
James D. Currie, Narad Rampersad
2015 J jnl
CoRR
James D. Currie, Narad Rampersad
2015 C conf
DLT
James D. Currie, Florin Manea, Dirk Nowotka
2014 J jnl
Integers
Francine Blanchet-Sadri, James D. Currie, Narad Rampersad, Nathan Fox
2014 J jnl
J. ACM
Julien Cassaigne, James D. Currie, Luke Schaeffer, Jeffrey O. Shallit
2014 J jnl
Dagstuhl Reports
Maxime Crochemore, James D. Currie, Gregory Kucherov, Dirk Nowotka
2014 J jnl
Discret. Math.
James D. Currie, Narad Rampersad, Kalle Saari, Luca Q. Zamboni
2014 J jnl
Electron. J. Comb.
James D. Currie, Kalle Saari
2014 J jnl
J. Integer Seq.
James D. Currie
2013 C conf
Developments in Language Theory
James D. Currie, Narad Rampersad, Kalle Saari
2013 J jnl
CoRR
James D. Currie, Narad Rampersad, Kalle Saari
2013 J jnl
Theor. Comput. Sci.
James D. Currie
2013 conf
WORDS
James D. Currie, Narad Rampersad, Kalle Saari
2013 J jnl
CoRR
James D. Currie, Narad Rampersad, Kalle Saari
2012 J jnl
J. Comb. Theory A
James D. Currie, Narad Rampersad
2012 J jnl
CoRR
James D. Currie
2012 J jnl
Int. J. Found. Comput. Sci.
Bastian Bischoff, James D. Currie, Dirk Nowotka
2011 J jnl
Math. Comput.
James D. Currie, Narad Rampersad
2011 J jnl
CoRR
Julien Cassaigne, James D. Currie, Luke Schaeffer, Jeffrey O. Shallit
2011 J jnl
CoRR
James D. Currie, Narad Rampersad
2011 J jnl
Theor. Comput. Sci.
James D. Currie
2011 J jnl
CoRR
James D. Currie
2011 J jnl
Adv. Appl. Math.
James D. Currie, Narad Rampersad
2010 J jnl
Discret. Math. Theor. Comput. Sci.
James D. Currie, Narad Rampersad
2010 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Narad Rampersad
2009 J jnl
Theor. Comput. Sci.
James D. Currie, Ali Aberkane
2009 J jnl
CoRR
James D. Currie, Narad Rampersad
2009 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Narad Rampersad
2009 J jnl
CoRR
James D. Currie, Narad Rampersad
2009 J jnl
Theor. Comput. Sci.
James D. Currie, Narad Rampersad
2009 J jnl
RAIRO Theor. Informatics Appl.
James D. Currie, Kalle Saari
2009 J jnl
CoRR
James D. Currie
2009 J jnl
Discret. Appl. Math.
James D. Currie, Narad Rampersad
2008 J jnl
CoRR
James D. Currie, Narad Rampersad
2008 J jnl
CoRR
James D. Currie, Narad Rampersad
2008 J jnl
CoRR
James D. Currie, Narad Rampersad
2008 J jnl
Electron. J. Comb.
James D. Currie, Narad Rampersad
2008 J jnl
CoRR
James D. Currie, Narad Rampersad
2008 J jnl
Theor. Comput. Sci.
James D. Currie, Terry I. Visentin
2008 J jnl
Theor. Comput. Sci.
James D. Currie
2008 J jnl
CoRR
James D. Currie, Narad Rampersad
2007 J jnl
Eur. J. Comb.
Morteza Mohammad Noori, James D. Currie
2007 J jnl
Acta Informatica
James D. Currie, Terry I. Visentin
2006 J jnl
Electron. J. Comb.
James D. Currie, Narad Rampersad, Jeffrey O. Shallit
2005 J jnl
Theor. Comput. Sci.
James D. Currie
2005 J jnl
Theor. Comput. Sci.
Ali Aberkane, James D. Currie
2004 J jnl
Theor. Comput. Sci.
James D. Currie
2004 J jnl
Electron. J. Comb.
Ali Aberkane, James D. Currie
2003 J jnl
Acta Informatica
James D. Currie, Erica Moodie
2003 J jnl
Comb.
James D. Currie, Cameron W. Pierce
2003 J jnl
Eur. J. Comb.
James D. Currie, Robert O. Shelton
2003 conf
Grammars and Automata for String Processing
James D. Currie
2002 C conf
Developments in Language Theory
James D. Currie, D. Sean Fitzpatrick
2002 J jnl
Order
James D. Currie, Terry I. Visentin
2002 J jnl
Discret. Math.
James D. Currie
2002 J jnl
Electron. J. Comb.
James D. Currie, Jamie Simpson
2002 J jnl
Electron. J. Comb.
James D. Currie
1999 J jnl
J. Autom. Lang. Comb.
James D. Currie, Holger Petersen, John Michael Robson, Jeffrey O. Shallit
1999 J jnl
Eur. J. Comb.
Julien Cassaigne, James D. Currie
1998 J jnl
Electron. J. Comb.
Jean-Paul Allouche, James D. Currie, Jeffrey O. Shallit
1996 J jnl
J. Autom. Lang. Comb.
James D. Currie, Robert O. Shelton
1996 J jnl
Comb.
James D. Currie
1995 J jnl
Electron. J. Comb.
James D. Currie
1995 C conf
Developments in Language Theory
James D. Currie, Robert O. Shelton
1995 J jnl
Eur. J. Comb.
James D. Currie
1992 J jnl
Discret. Math.
James D. Currie
1991 J jnl
Discret. Math.
James D. Currie
1987
James D. Currie
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