Jan Fabian Ehmke

65 papers C 2Journal 42Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
Eur. J. Oper. Res.
Shaohua Yu, Ann Melissa Campbell, Jan Fabian Ehmke, Jakob Puchinger
2026 J jnl
Central Eur. J. Oper. Res.
Seyedeh Asra Ahmadi, Peiman Ghasemi, Jan Fabian Ehmke
2025 J jnl
Eur. J. Oper. Res.
Steffen Elting, Jan Fabian Ehmke, Margaretha Gansterer
2025 J jnl
Eng. Appl. Artif. Intell.
Peiman Ghasemi, Alireza Goli, Fariba Goodarzian, Jan Fabian Ehmke
2024 J jnl
Networks
Steffen Elting, Jan Fabian Ehmke, Margaretha Gansterer
2024 J jnl
OR Spectr.
Charlotte Köhler, Ann Melissa Campbell, Jan Fabian Ehmke
2024 J jnl
OR Spectr.
Jan Fabian Ehmke, Robert Klein, Claudius Steinhardt, Arne Strauss
2024 J jnl
Transp. Sci.
Jarmo Haferkamp, Marlin W. Ulmer, Jan Fabian Ehmke
2024 J jnl
Central Eur. J. Oper. Res.
Melanie Burian, Charlotte Köhler, Ann Melissa Campbell, Jan Fabian Ehmke
2023 J jnl
Comput. Oper. Res.
Corinna Krebs, Jan Fabian Ehmke, Henriette Koch
2023 J jnl
EURO J. Transp. Logist.
Charlotte Köhler, Jan Fabian Ehmke, Ann Melissa Campbell, Catherine Cleophas
2023 J jnl
Networks
Rico Kötschau, Ninja Soeffker, Jan Fabian Ehmke
2023 J jnl
Ann. Oper. Res.
Corinna Krebs, Jan Fabian Ehmke
2022 J jnl
Networks
Jarmo Haferkamp, Jan Fabian Ehmke
2022 J jnl
Eur. J. Oper. Res.
Michael Redmond, Ann Melissa Campbell, Jan Fabian Ehmke
2021 J jnl
Networks
Iurii Bakach, Ann Melissa Campbell, Jan Fabian Ehmke
2021 J jnl
OR Spectr.
Corinna Krebs, Jan Fabian Ehmke, Henriette Koch
2021 J jnl
Oper. Res. Forum
Magdalena A. K. Lang, Catherine Cleophas, Jan Fabian Ehmke
2021 J jnl
EURO J. Transp. Logist.
Corinna Krebs, Jan Fabian Ehmke
2021 J jnl
EURO J. Transp. Logist.
Iurii Bakach, Ann Melissa Campbell, Jan Fabian Ehmke, Timothy L. Urban
2021 conf
ICCL
Corinna Krebs, Jan Fabian Ehmke
2020 J jnl
Public Transp.
Michael Redmond, Ann Melissa Campbell, Jan Fabian Ehmke
2020 C conf
ICIS
Christian Meske, Enrico Bunde, Jan Fabian Ehmke
2020 conf
Modellierung (Companion)
Jan Fabian Ehmke, Thomas Horstmannshoff
2019 J jnl
Eur. J. Oper. Res.
Catherine Cleophas, Caitlin Doyle Cottrill, Jan Fabian Ehmke, Kevin Tierney
2019 J jnl
Networks
Shu Zhang, Ann M. Campbell, Jan Fabian Ehmke
2019 J jnl
Electron. Mark.
Rainer Alt, Haluk Demirkan, Jan Fabian Ehmke, Anne Moen, Alfred Winter
2019 J jnl
Networks
Michael Redmond, Ann M. Campbell, Jan Fabian Ehmke
2019 J jnl
Eur. J. Oper. Res.
Tolga Bektas, Jan Fabian Ehmke, Harilaos N. Psaraftis, Jakob Puchinger
2019 J jnl
Electron. Mark.
Rainer Alt, Jan Fabian Ehmke, Reinhold Haux, Tino Henke, Dirk Christian Mattfeld, Andreas Oberweis, Barbara Paech, Alfred Winter
2018 ed.
OR
Natalia Kliewer, Jan Fabian Ehmke, Ralf Borndörfer
2017 conf
ICCL
Verena Schmid, Jan Fabian Ehmke
2017 J jnl
Bus. Inf. Syst. Eng.
Natalia Kliewer, Jan Fabian Ehmke, Dirk Christian Mattfeld
2017 conf
ICCL
Patrick Vogel, Jan Fabian Ehmke, Dirk Christian Mattfeld
2017 J jnl
Bus. Inf. Syst. Eng.
Jan Fabian Ehmke
2016 conf
HICSS
L. Douglas Smith, Jan Fabian Ehmke
2016 conf
BIS (Workshops)
Sebastian Eckert, Jan Fabian Ehmke
2016 J jnl
Dagstuhl Reports
Caitlin Doyle Cottrill, Jan Fabian Ehmke, Franziska Klügl, Sabine Timpf
2016 J jnl
Comput. Oper. Res.
Jan Fabian Ehmke, Ann Melissa Campbell, Barrett W. Thomas
2016 conf
MKWI
Linda Albrecht, Jan Fabian Ehmke
2016 conf
OR
Charlotte Köhler, Magdalena A. K. Lang, Catherine Cleophas, Jan Fabian Ehmke
2016 conf
RecTour@RecSys
Jan Fabian Ehmke, Dirk Christian Mattfeld, Linda Albrecht
2016 J jnl
Eur. J. Oper. Res.
Jan Fabian Ehmke, Ann Melissa Campbell, Barrett W. Thomas
2016 conf
MKWI
Jan Fabian Ehmke, Rainer Alt, Alfred Winter
2016 conf
MKWI
Jan Fabian Ehmke, Natalia Kliewer, Dirk Christian Mattfeld
2015 conf
ICCL
L. Douglas Smith, Liang Xu, Ziyi Wang, Deng Pan, Laura Hellmann, Jan Fabian Ehmke
2015 J jnl
Eur. J. Oper. Res.
Jan Fabian Ehmke, Ann Melissa Campbell, Timothy L. Urban
2015 J jnl
OR Spectr.
Verena Schmid, Jan Fabian Ehmke
2014 conf
MKWI
Andreas Landau, Jan Fabian Ehmke, Dirk Christian Mattfeld
2014 J jnl
Eur. J. Oper. Res.
Jan Fabian Ehmke, Ann Melissa Campbell
2014 conf
ECIS
Andreas Landau, Dirk C. Mattfeld, Jan Fabian Ehmke
2014 conf
ICCL
L. Douglas Smith, Jan Fabian Ehmke, Dirk C. Mattfeld, Raimund Waning, Laura Hellmann
2014 conf
MKWI
Jan Fabian Ehmke, Natalia Kliewer
2014 conf
MKWI
Jan Fabian Ehmke, Andreas Oberweis, Alfred Winter
2014 J jnl
Wirtschaftsinf.
Catherine Cleophas, Jan Fabian Ehmke
2014 J jnl
Bus. Inf. Syst. Eng.
Catherine Cleophas, Jan Fabian Ehmke
2012 J jnl
J. Comput. Sci.
Jan Fabian Ehmke, André Steinert, Dirk Christian Mattfeld
2012 J jnl
Int. J. Strateg. Inf. Technol. Appl.
L. Douglas Smith, Robert M. Nauss, Jan Fabian Ehmke, Dirk Christian Mattfeld
2012 book
Jan Fabian Ehmke
2012 J jnl
Inform. Spektrum
Alfred Winter, Rainer Alt, Jan Fabian Ehmke, Reinhold Haux, Wolfram Ludwig, Dirk C. Mattfeld, Andreas Oberweis, Barbara Paech
2012 conf
HICSS
L. Douglas Smith, Dirk Christian Mattfeld, Jan Fabian Ehmke, Jian Li
2011 C conf
SIMULTECH
Jana Görmer, Jan Fabian Ehmke, Maksims Fiosins, Daniel Schmidt, Henrik Schumacher, Hugues Tchouankem
2011 J jnl
Comput. Ind.
Jan Fabian Ehmke, Daniel Großhans, Dirk Christian Mattfeld, L. Douglas Smith
2010 conf
MKWI
Jan Fabian Ehmke, Dirk Christian Mattfeld
2009 J jnl
Int. J. Data Min. Model. Manag.
Jan Fabian Ehmke, Stephan Meisel, Stefan Engelmann, Dirk Christian Mattfeld
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