Cassio Pennachin

27 papers A* 1A 4B 1Journal 7Unranked 8
YearRankTypeTitle / Venue / Authors
2022 J jnl
CoRR
Anton Kolonin, Ben Goertzel, Cassio Pennachin, Deborah Duong, Marco Argentieri, Matt Iklé, Nejc Znidar
2022 J jnl
CoRR
Anton Kolonin, Deborah Duong, Ben Goertzel, Cassio Pennachin, Matt Iklé, Nejc Znidar, Marco Argentieri
2019 J jnl
CoRR
Anton Kolonin, Ben Goertzel, Cassio Pennachin, Deborah Duong, Marco Argentieri, Nejc Znidar
2019 J jnl
CoRR
Anton Kolonin, Ben Goertzel, Cassio Pennachin, Deborah Duong, Matt Iklé, Nejc Znidar, Marco Argentieri
2014 book
Ben Goertzel, Cassio Pennachin, Nil Geisweiller
2014 book
Ben Goertzel, Cassio Pennachin, Nil Geisweiller
2013 conf
AGI
Ben Goertzel, Nil Geisweiller, Cassio Pennachin, Kaoru Ng
2011 book
Ben Goertzel, Nil Geisweiller, Lúcio de Souza Coelho, Predrag Janicic, Cassio Pennachin
2010 J jnl
Int. J. Softw. Sci. Comput. Intell.
Lúcio de Souza Coelho, Ben Goertzel, Cassio Pennachin, Chris Heward
2010 J jnl
Neurocomputing
Ben Goertzel, Joel Pitt, Matthew Iklé, Cassio Pennachin, Liu Rui
2010 A conf
GECCO
Cassio Pennachin, Moshe Looks, João Antônio de Vasconcelos
2009 conf
IEEE ICCI
Lúcio de Souza Coelho, Ben Goertzel, Cassio Pennachin, Chris Heward
2008 conf
AGI
Ben Goertzel, Cassio Pennachin, Nil Geisweiller, Moshe Looks, Andre Senna, Welter Silva, Ari Heljakka, Carlos Lopes
2008 conf
AGI
Ben Goertzel, Cassio Pennachin
2007 book
Artificial General Intelligence
Ben Goertzel, Cassio Pennachin
2007 A* conf
AAAI
Ben Goertzel, Cassio Pennachin, Lúcio de Souza Coelho, Leonardo Shikida, Murilo Saraiva de Queiroz
2007 A conf
GECCO
Moshe Looks, Ben Goertzel, Lúcio de Souza Coelho, Mauricio Mudado, Cassio Pennachin
2007 ch.
Artificial General Intelligence
Cassio Pennachin, Ben Goertzel
2007 ch.
Artificial General Intelligence
Ben Goertzel, Cassio Pennachin
2007 A conf
GECCO
Moshe Looks, Ben Goertzel, Lúcio de Souza Coelho, Mauricio Mudado, Cassio Pennachin
2006 B conf
IEEE Congress on Evolutionary Computation
Ben Goertzel, Cassio Pennachin, Lúcio de Souza Coelho, Mauricio Mudado
2006 conf
KR-MED
Murilo Saraiva de Queiroz, Francisco Prosdocimi, Izabela Freire Goertzel, Francisco Pereira Lobo, Cassio Pennachin, Ben Goertzel
2006 conf
AGI
Ari Heljakka, Ben Goertzel, Welter Silva, Cassio Pennachin, Andre Senna, Izabela Goertzel
2006 conf
BioNLP@NAACL-HLT
Ben Goertzel, Hugo Pinto, Ari Heljakka, Michael Ross, Cassio Pennachin, Izabela Goertzel
2005 J jnl
Artif. Intell. Medicine
Rafal Smigrodzki, Ben Goertzel, Cassio Pennachin, Lúcio de Souza Coelho, Francisco Prosdocimi, W. Davis Parker Jr.
2005 A conf
GECCO
Moshe Looks, Ben Goertzel, Cassio Pennachin
2004 conf
AAAI Technical Report (1)
Moshe Looks, Ben Goertzel, Cassio Pennachin
tests/unit/test_decompile_strings.py
← Index tests/unit/test_decompile_strings.py python
"""Unit tests for bninja/analysis/strings.py — StringAnalysis."""
import pytest
import math
from unittest.mock import MagicMock


# StringAnalysis has no binaryninja imports, just collections and math
from redb.extractors.decompiler.bninja.analysis.strings import StringAnalysis


# ============================================================================
# Helper mocks
# ============================================================================

class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, type_name="Utf8String"):
        self.value = value
        self.raw = raw if raw is not None else (value.encode("utf-8") if isinstance(value, str) else value)
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = MagicMock()
        self.type.name = type_name


class MockBinaryView:
    """Mock binary view with a strings list."""
    def __init__(self, strings=None):
        self.strings = strings or []


# ============================================================================
# 6a. StringAnalysis
# ============================================================================


class TestStringAnalysisEntropy:
    def setup_method(self):
        self.sa = StringAnalysis(bv=MockBinaryView(), functions=[])

    def test_entropy_empty_string(self):
        assert self.sa.entropy("") == 0.0

    def test_entropy_single_char(self):
        assert self.sa.entropy("aaaa") == 0.0

    def test_entropy_uniform_distribution(self):
        # "abcd" -> 4 unique chars, each p=1/4, entropy = log2(4) = 2.0
        result = self.sa.entropy("abcd")
        assert result == pytest.approx(2.0)

    def test_entropy_binary_string(self):
        # "ab" -> 2 unique chars, each p=1/2, entropy = log2(2) = 1.0
        result = self.sa.entropy("ab")
        assert result == pytest.approx(1.0)


class TestStringAnalysisAnalyze:
    def test_analyze_deduplication(self):
        """Duplicate (string, encoding) pairs -> only first kept."""
        entries = [
            MockStringEntry("hello", start=100, type_name="Utf8String"),
            MockStringEntry("hello", start=200, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        assert result[0]["string_offset"] == 100

    def test_analyze_sorted_by_address(self):
        """First occurrence (lowest offset) is the one kept."""
        entries = [
            MockStringEntry("world", start=500, type_name="Utf8String"),
            MockStringEntry("world", start=100, type_name="Utf8String"),
        ]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        # The analyze() sorts by start, so 100 comes first
        assert result[0]["string_offset"] == 100

    def test_analyze_empty_bv(self):
        bv = MockBinaryView(strings=[])
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert result == []

    def test_analyze_output_schema(self):
        entries = [MockStringEntry("test_string", start=0, type_name="Utf8String")]
        bv = MockBinaryView(strings=entries)
        sa = StringAnalysis(bv=bv, functions=[])
        result = sa.analyze()
        assert len(result) == 1
        r = result[0]
        required_keys = [
            "string",
            "string_raw",
            "string_encoding",
            "string_offset",
            "string_length",
            "string_raw_length",
            "string_entropy",
        ]
        for key in required_keys:
            assert key in r, f"Missing key: {key}"