Raghav Singhal

32 papers A* 4Journal 25Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Trans. Mach. Learn. Res.
Raghav Singhal, Kaustubh Ponkshe, Rohit Vartak, Lav R. Varshney, Praneeth Vepakomma
2026 J jnl
CoRR
Noah Golowich, Fan Chen, Dhruv Rohatgi, Raghav Singhal, Carles Domingo-Enrich, Dylan J. Foster, Akshay Krishnamurthy
2025 A* conf
ICML
Raghav Singhal, Zachary Horvitz, Ryan Teehan, Mengye Ren, Zhou Yu, Kathleen McKeown, Rajesh Ranganath
2025 J jnl
CoRR
Raghav Singhal, Zachary Horvitz, Ryan Teehan, Mengye Ren, Zhou Yu, Kathleen McKeown, Rajesh Ranganath
2025 J jnl
CoRR
Raghav Singhal, Kaustubh Ponkshe, Rohit Vartak, Praneeth Vepakomma
2025 J jnl
ACM J. Emerg. Technol. Comput. Syst.
Shreyas Deshmukh, Raghav Singhal, Shruti Landge, Vivek Saraswat, Anmol Biswas, Abhishek Kadam, Ajay Kumar Singh, Sreenivas Subramoney, Laxmeesha Somappa, Maryam Shojaei Baghini, Udayan Ganguly
2025 J jnl
CoRR
Raghav Singhal, Kaustubh Ponkshe, Rohit Vartak, Lav R. Varshney, Praneeth Vepakomma
2025 conf
ACL (1)
Raghav Singhal, Kaustubh Ponkshe, Praneeth Vepakomma
2025 J jnl
CoRR
Raghav Singhal, Emin C. Dogrul, Zhaojun Bai
2025 J jnl
Trans. Mach. Learn. Res.
Raja Kumar, Raghav Singhal, Pranamya Prashant Kulkarni, Deval Mehta, Kshitij Sharad Jadhav
2025 J jnl
CoRR
Zachary Horvitz, Raghav Singhal, Hao Zou, Carles Domingo-Enrich, Zhou Yu, Rajesh Ranganath, Kathleen McKeown
2025 J jnl
CoRR
Anmol Biswas, Raghav Singhal, Sivakumar Elangovan, Shreyas Sabnis, Udayan Ganguly
2025 J jnl
CoRR
Kaustubh Ponkshe, Shaan Shah, Raghav Singhal, Praneeth Vepakomma
2024 A* conf
ICML
Chen-Yu Yen, Raghav Singhal, Umang Sharma, Rajesh Ranganath, Sumit Chopra, Lerrel Pinto
2024 J jnl
CoRR
Chen-Yu Yen, Raghav Singhal, Umang Sharma, Rajesh Ranganath, Sumit Chopra, Lerrel Pinto
2024 J jnl
CoRR
Raghav Singhal, Kaustubh Ponkshe, Praneeth Vepakomma
2024 J jnl
CoRR
Raja Kumar, Raghav Singhal, Pranamya Prashant Kulkarni, Deval Mehta, Kshitij S. Jadhav
2024 J jnl
CoRR
Kaustubh Ponkshe, Raghav Singhal, Eduard Gorbunov, Alexey Tumanov, Samuel Horváth, Praneeth Vepakomma
2024 conf
ICONS
Anmol Biswas, Sharvari Ashok Medhe, Raghav Singhal, Udayan Ganguly
2024 J jnl
CoRR
Anmol Biswas, Sharvari Ashok Medhe, Raghav Singhal, Udayan Ganguly
2024 A* conf
ICML
Raghav Singhal, Mark Goldstein, Rajesh Ranganath
2024 J jnl
CoRR
Raghav Singhal, Mark Goldstein, Rajesh Ranganath
2023 J jnl
CoRR
Raghav Singhal, Sailen Dutta, Jiten C. Kalita
2023 J jnl
Neural Networks
Raghav Singhal, Vivek Saraswat, Shreyas Deshmukh, Sreenivas Subramoney, Laxmeesha Somappa, Maryam Shojaei Baghini, Udayan Ganguly
2023 J jnl
Frontiers Robotics AI
Sampada Acharya, Peter Roberts Olcay, Tejas Rane, Raghav Singhal, Peize Hong, Viraj Ranade, Carmel Majidi, Victoria A. Webster-Wood, B. Reeja-Jayan
2023 J jnl
CoRR
Raghav Singhal, Mukund Sudarshan, Anish Mahishi, Sri Kaushik, Luke Ginocchio, Angela Tong, Hersh Chandarana, Daniel K. Sodickson, Rajesh Ranganath, Sumit Chopra
2023 conf
NICE
Jens Egholm Pedersen, Raghav Singhal, Jörg Conradt
2023 A* conf
ICLR
Raghav Singhal, Mark Goldstein, Rajesh Ranganath
2023 J jnl
CoRR
Raghav Singhal, Mark Goldstein, Rajesh Ranganath
2022 J jnl
CoRR
Raghav Singhal, Jiten C. Kalita
2021 J jnl
CoRR
Raghav Singhal, Jiten C. Kalita
2019 J jnl
CoRR
Raghav Singhal, Saad Lahlou, Rajesh Ranganath
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