Vahan Simonyan

13 papers Journal 13
YearRankTypeTitle / Venue / Authors
2023 J jnl
Frontiers Digit. Health
Laura Elisabeth Gressler, Terrie Cowley, Marti Velezis, Suvekshya Aryal, Deanne Clare, John W. Kusiak, Allen W. Cowley, Art Sedrakyan, Danica Marinac-Dabic, Michelle Reardon, Lisa Schmidt, Jennifer Ginsburg Feldman, Vincent Difabio, Suzie Bergman, Vahan Simonyan, Yelena Yesha, Ingrid Vasiliu-Feltes, Justin Durham, Andrew I. Steen, Phillip Woods, Flavia P. Kapos, Nilsa Loyo-Berrios
2017 J jnl
BMC Bioinform.
John Athey, Aikaterini Alexaki, Ekaterina Osipova, Alexandre Rostovtsev, Luis V. Santana-Quintero, Upendra Katneni, Vahan Simonyan, Chava Kimchi-Sarfaty
2017 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Scott Goldweber, Jamal Theodore, John Torcivia-Rodriguez, Vahan Simonyan, Raja Mazumder
2016 J jnl
Database J. Biol. Databases Curation
Vahan Simonyan, Konstantin Chumakov, Hayley Dingerdissen, William J. Faison, Scott Goldweber, Anton Golikov, Naila Gulzar, Konstantinos Karagiannis, Phuc Vinh Nguyen Lam, Thomas Maudru, Olesja Muravitskaja, Ekaterina Osipova, Yang Pan, Alexey Pschenichnov, Alexandre Rostovtsev, Luis V. Santana-Quintero, Krista Smith, Elaine E. Thompson, Valery Tkachenko, John Torcivia-Rodriguez, Alin Voskanian, Quan Wan, Jing Wang, Tsung-Jung Wu, Carolyn Wilson, Raja Mazumder
2015 J jnl
F1000Research
Priti Kumari, Raja Mazumder, Vahan Simonyan, Konstantinos Krampis
2014 J jnl
Database J. Biol. Databases Curation
Tsung-Jung Wu, Amirhossein Shamsaddini, Yang Pan, Krista Smith, Daniel J. Crichton, Vahan Simonyan, Raja Mazumder
2014 J jnl
BMC Bioinform.
Charles Cole, Konstantinos Krampis, Konstantinos Karagiannis, Jonas S. Almeida, William J. Faison, Mona Motwani, Quan Wan, Anton Golikov, Yang Pan, Vahan Simonyan, Raja Mazumder
2013 J jnl
Genom. Proteom. Bioinform.
Konstantinos Karagiannis, Vahan Simonyan, Raja Mazumder
2013 J jnl
Genom. Proteom. Bioinform.
Phuc Vinh Nguyen Lam, Radoslav Goldman, Konstantinos Karagiannis, Tejas Narsule, Vahan Simonyan, Valerii Soika, Raja Mazumder
2011 J jnl
J. Cheminformatics
Evan Bolton, Jie Chen, Sunghwan Kim, Lianyi Han, Siqian He, Wenyao Shi, Vahan Simonyan, Yan Sun, Paul A. Thiessen, Jiyao Wang, Bo Yu, Jian Zhang, Stephen H. Bryant
2005 J jnl
Nucleic Acids Res.
Aron Marchler-Bauer, John B. Anderson, Praveen F. Cherukuri, Carol DeWeese-Scott, Lewis Y. Geer, Marc Gwadz, Siqian He, David I. Hurwitz, John D. Jackson, Zhaoxi Ke, Christopher J. Lanczycki, Cynthia A. Liebert, Chunlei Liu, Fu Lu, Gabriele H. Marchler, Mikhail Mullokandov, Benjamin A. Shoemaker, Vahan Simonyan, James S. Song, Paul A. Thiessen, Roxanne A. Yamashita, Jodie J. Yin, Dachuan Zhang, Stephen H. Bryant
2003 J jnl
Nucleic Acids Res.
Aron Marchler-Bauer, John B. Anderson, Carol DeWeese-Scott, Natalie D. Fedorova, Lewis Y. Geer, Siqian He, David I. Hurwitz, John D. Jackson, Aviva R. Jacobs, Christopher J. Lanczycki, Cynthia A. Liebert, Chunlei Liu, Thomas Madej, Gabriele H. Marchler, Raja Mazumder, Anastasia N. Nikolskaya, Anna R. Panchenko, Bachoti S. Rao, Benjamin A. Shoemaker, Vahan Simonyan, James S. Song, Paul A. Thiessen, Sona Vasudevan, Yanli Wang, Roxanne A. Yamashita, Jodie J. Yin, Stephen H. Bryant
2003 J jnl
Nucleic Acids Res.
Jie Chen, John B. Anderson, Carol DeWeese-Scott, Natalie D. Fedorova, Lewis Y. Geer, Siqian He, David I. Hurwitz, John D. Jackson, Aviva R. Jacobs, Christopher J. Lanczycki, Cynthia A. Liebert, Chunlei Liu, Thomas Madej, Aron Marchler-Bauer, Gabriele H. Marchler, Raja Mazumder, Anastasia N. Nikolskaya, Bachoti S. Rao, Anna R. Panchenko, Benjamin A. Shoemaker, Vahan Simonyan, James S. Song, Paul A. Thiessen, Sona Vasudevan, Yanli Wang, Roxanne A. Yamashita, Jodie J. Yin, Stephen H. Bryant
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []