Katherine Chiluiza

30 papers A* 2A 3B 6C 4Journal 6Unranked 8
YearRankTypeTitle / Venue / Authors
2025 J jnl
Proc. ACM Hum. Comput. Interact.
Ronny Andrade, Adriano Pinargote, Gladys Carrillo, Katherine Chiluiza
2024 conf
LAK Workshops
Adriano Pinargote, Eddy Calderón, Kevin Cevallos, Gladys Carrillo, Katherine Chiluiza, Vanessa Echeverría
2024 C conf
FIE
Alex Romero-Vera, Victor Guarochico-Moreira, Víctor Velasco-Galarza, Mayken Espinoza-Andaluz, Sharon Guaman-Quintanilla, Katherine Chiluiza
2024 C conf
FIE
Javier E. Bermúdez, Katherine Chiluiza, Tammy Schellens, Martin Valcke
2024 C conf
EDUCON
Jocellyn Luna, Katherine Chiluiza, Jose Cordova-Garcia
2023 A* conf
CHI
Gonzalo Gabriel Méndez, Luis Galárraga, Katherine Chiluiza, Patricio Mendoza
2023 B conf
L@S
Xavier Ochoa, Vanessa Echeverría, Gladys Carrillo, Vanessa Heredia, Katherine Chiluiza
2022 A conf
LAK
Vanessa Echeverría, Marisol Wong-Villacres, Xavier Ochoa, Katherine Chiluiza
2022 conf
CHI Extended Abstracts
Gonzalo Gabriel Méndez, Katherine Chiluiza, Javier Tibau, Vanessa Ines Cedeno-Mieles, Oscar Moreno, Miguel Murillo, Marisol Wong-Villacres
2021 A* conf
CHI
Gonzalo Méndez, Luis Galárraga, Katherine Chiluiza
2021 J jnl
CoRR
Gonzalo Gabriel Méndez, Luis Galárraga, Katherine Chiluiza
2020 J jnl
Comput. Hum. Behav.
Francisco Gutiérrez, Karsten Seipp, Xavier Ochoa, Katherine Chiluiza, Tinne De Laet, Katrien Verbert
2019 J jnl
Comput. Appl. Eng. Educ.
Margarita Ortiz-Rojas, Katherine Chiluiza, Martin Valcke
2018 A conf
LAK
Vanessa Echeverría, Roberto Martínez Maldonado, Roger Granda, Katherine Chiluiza, Cristina Conati, Simon Buckingham Shum
2018 J jnl
J. Learn. Anal.
Vanessa Echeverría, Roberto Martínez Maldonado, Simon Buckingham Shum, Katherine Chiluiza, Roger Granda, Cristina Conati
2018 conf
CrossMMLA@LAK
Xavier Ochoa, Katherine Chiluiza, Roger Granda, Gabriel Falcones, Jaime Castells, Bruno Guamán
2017 C conf
ICCE
Vanessa Echeverría, Roberto Martínez-Maldonado, Katherine Chiluiza, Simon Buckingham Shum
2017 conf
MMLA-CrossLAK@LAK
Vanessa Echeverría, Gabriel Falcones, Jaime Castells, Roger Granda, Katherine Chiluiza
2016 conf
CrossLAK
Marisol Wong-Villacres, Roger Granda, Margarita Ortiz-Rojas, Katherine Chiluiza
2016 conf
CrossLAK
Vanessa Echeverría, Federico Domínguez, Katherine Chiluiza
2015 B conf
ICMI
Marcelo Worsley, Katherine Chiluiza, Joseph F. Grafsgaard, Xavier Ochoa
2015 B conf
ITS
Marisol Wong-Villacres, Margarita Ortiz-Rojas, Vanessa Echeverría, Katherine Chiluiza
2015 B conf
ICMI
Federico Domínguez, Katherine Chiluiza, Vanessa Echeverría, Xavier Ochoa
2014 J jnl
J. Learn. Anal.
Gonzalo Méndez, Xavier Ochoa, Katherine Chiluiza, Bram de Wever
2014 conf
MLA@ICMI
Gonzalo Luzardo, Bruno Guamán, Katherine Chiluiza, Jaime Castells, Xavier Ochoa
2014 B conf
ICMI
Xavier Ochoa, Marcelo Worsley, Katherine Chiluiza, Saturnino Luz
2014 conf
MLA@ICMI
Vanessa Echeverría, Allan Avendaño, Katherine Chiluiza, Aníbal Vásquez, Xavier Ochoa
2014 ed.
MLA@ICMI
Xavier Ochoa, Marcelo Worsley, Katherine Chiluiza, Saturnino Luz
2014 A conf
LAK
Gonzalo Méndez, Xavier Ochoa, Katherine Chiluiza
2013 B conf
ICMI
Xavier Ochoa, Katherine Chiluiza, Gonzalo Méndez, Gonzalo Luzardo, Bruno Guamán, James Castells
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