Olatunji Mumini Omisore

57 papers A* 1C 3Journal 31Unranked 22
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Haptics
Wenke Duan, Zihao Li, Olatunji Mumini Omisore, Wenjing Du, Toluwanimi Oluwadara Akinyemi, Xingyu Chen, Xing Gao, Hongbo Wang, Lei Wang
2025 A* conf
ICRA
Olatunji Mumini Omisore, Toluwanimi Oluwadara Akinyemi, Anh Nguyen, Lei Wang
2024 conf
ROBIO
Olatunji Mumini Omisore, Toluwanimi Oluwadara Akinyemi, Wenke Duan, Wenjing Du, Lei Wang
2024 J jnl
IEEE Trans. Hum. Mach. Syst.
Wenjing Du, Guanlin Yi, Olatunji Mumini Omisore, Wenke Duan, Toluwanimi Oluwadara Akinyemi, Xingyu Chen, Jiang Liu, Boon-Giin Lee, Lei Wang
2024 J jnl
CoRR
Tudor Jianu, Baoru Huang, Tuan Van Vo, Minh Nhat Vu, Jingxuan Kang, Hoan Nguyen, Olatunji Mumini Omisore, Pierre Berthet-Rayne, Sebastiano Fichera, Anh Nguyen
2024 J jnl
Adv. Intell. Syst.
Wenjing Du, Guanlin Yi, Olatunji Mumini Omisore, Wenke Duan, Xingyu Chen, Toluwanimi Oluwadara Akinyemi, Jiang Liu, Boon-Giin Lee, Lei Wang
2024 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jingzhen Li, Jingjing Ma, Olatunji Mumini Omisore, Yuhang Liu, Huajie Tang, Pengfei Ao, Yan Yan, Lei Wang, Zedong Nie
2024 J jnl
CoRR
Olatunji Mumini Omisore, Toluwanimi Oluwadara Akinyemi, Anh Nguyen, Lei Wang
2023 conf
BioCAS
Liang Ma, Fuhai Xiong, Zhiwen Huang, Olatunji Mumini Omisore, Lei Wang, Yan Yan
2023 J jnl
IEEE Trans. Instrum. Meas.
Gan Lu, Wenke Duan, Toluwanimi Oluwadara Akinyemi, Wenjing Du, Olatunji Mumini Omisore, Lei Wang
2023 conf
EMBC
Olatunji Mumini Omisore, Guanlin Yi, Yuhong Zheng, Toluwanimi Oluwadara Akinyemi, Wenke Duan, Wenjing Du, Xingyu Chen, Lei Wang
2023 conf
EMBC
Wenjing Du, Guanlin Yi, Olatunji Mumini Omisore, Wenke Duan, Toluwanimi Oluwadara Akinyemi, Xingyu Chen, Lei Wang, Boon-Giin Lee, Jiang Liu
2023 J jnl
IEEE Trans. Hum. Mach. Syst.
Olatunji Mumini Omisore, Toluwanimi Oluwadara Akinyemi, Wenjing Du, Wenke Duan, Rita Orji, Thanh Nho Do, Lei Wang
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Olatunji Mumini Omisore, Shipeng Han, Jing Xiong, Hui Li, Zheng Li, Lei Wang
2022 J jnl
Artif. Intell. Rev.
Tobore Igbe, Jingzhen Li, Abhishek Kandwal, Olatunji Mumini Omisore, Efetobore Yetunde, Yuhang Liu, Lei Wang, Zedong Nie
2022 J jnl
Big Data Cogn. Comput.
Bolanle Adefowoke Ojokoh, Benjamin Aribisala, Oluwafemi A. Sarumi, Arome Junior Gabriel, Olatunji Mumini Omisore, Abiola Ezekiel Taiwo, Tobore Igbe, Uchechukwu Madukaku Chukwuocha, Tunde Yusuf, Abimbola H. Afolayan, Olusola Babalola, Tolulope A. Odetola, Olaitan Afolabi
2022 J jnl
CoRR
Olatunji Mumini Omisore, Ifeanyi Odenigbo, Joseph Orji, Amelia Beltran, Rita Orji, Nilufar Baghaei, Sandra Meier
2021 conf
CASE
Olatunji Mumini Omisore, Wenjing Du, Wenke Duan, Thanh Nho Do, Rita Orji, Lei Wang
2021 J jnl
CoRR
Olatunji Mumini Omisore, Toluwanimi Oluwadara Akinyemi, Wenke Duan, Wenjing Du, Lei Wang
2021 J jnl
Future Gener. Comput. Syst.
Olatunji Mumini Omisore, Bolanle Adefowoke Ojokoh, Asegunloluwa Eunice Babalola, Tobore Igbe, Yetunde Folajimi, Zedong Nie, Lei Wang
2021 conf
EMBC
Olatunji Mumini Omisore, Lei Wang
2021 J jnl
Math. Comput. Simul.
Talaat Abdelhamid, Ammar H. Elsheikh, Olatunji Mumini Omisore, Nasser A. Saeed, T. Muthuramalingam, Ronglinag Chen, Md. Mahbub Alam
2020 J jnl
IEEE Access
Yan Yan, Olatunji Mumini Omisore, Yu-Cheng Xue, Huihui Li, Qiuhua Liu, Ze-dong Nie, Jianping Fan, Lei Wang
2020 C conf
ICARCV
Olatunji Mumini Omisore, Wenke Duan, Toluwanimi Oluwadara Akinyemi, Shipeng Han, Wenjing Du, Yousef Alhanderish, Lei Wang
2020 C conf
ICARCV
Toluwanimi Oluwadara Akinyemi, Olatunji Mumini Omisore, Wenke Duan, Gan Lu, Wenjing Du, Yousef Alhanderish, Yifa Li, Lei Wang
2020 J jnl
IEEE Access
Wenjing Du, Olatunji Mumini Omisore, Wenke Duan, Tao Zhou, Xiaodan Lv, Yifa Li, Shipeng Han, Yousef Al-Handarish, Qiuhua Liu, Lei Wang
2020 J jnl
CoRR
Olatunji Mumini Omisore, Wenjing Du, Tao Zhou, Shipeng Han, Kamen Ivanov, Yousef Al-Handarish, Lei Wang
2020 J jnl
Sensors
Yan Yan, Kamen Ivanov, Olatunji Mumini Omisore, Tobore Igbe, Qiuhua Liu, Zedong Nie, Lei Wang
2020 J jnl
IEEE Access
Kamen Ivanov, Zhanyong Mei, Martin Penev, Ludwig Lubich, Olatunji Mumini Omisore, Sau Van Nguyen Van, Yan Yan, Lei Wang
2020 J jnl
Knowl. Based Syst.
Tobore Igbe, Abhishek Kandwal, Jingzhen Li, Yan Yan, Olatunji Mumini Omisore, Efetobore Enitan, Sinan Li, Yuhang Liu, Lei Wang, Zedong Nie
2019 conf
ICIRA (3)
Tao Zhou, Olatunji Mumini Omisore, Wenjing Du, Wenke Duan, Yuan Zhang, Lei Wang
2019 conf
ROBIO
Chenliang Tang, Gaosheng Xie, Olatunji Mumini Omisore, Jing Xiong, Zeyang Xia
2019 conf
CISP-BMEI
Tao Zhou, Olatunji Mumini Omisore, Wenjing Du, Lei Wang, Yuan Zhang
2019 conf
ICIRA (4)
Kamen Ivanov, Zhanyong Mei, Ludwig Lubich, Nan Guo, Deng Xile, Zhichun Zhao, Olatunji Mumini Omisore, Derek Ho, Lei Wang
2019 conf
EMBC
Olatunji Mumini Omisore, Shipeng Han, Tao Zhou, Yousef Al-Handarish, Wenjing Du, Kamen Ivanov, Lei Wang
2019 conf
NEMS
Qinwu Gao, Jinjie Zhang, Jing Chen, Zebang Luo, Olatunji Mumini Omisore, Yousef Al-Handarish, Lei Wang, Hui Li
2018 conf
NEMS
Jing Chen, Qinwu Gao, Jinjie Zhang, Zhenwen Xie, Olatunji Mumini Omisore, Lei Wang, Hui Li
2018 conf
ICARSC
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Zhichun Zhao, Yousef Al-Handarish, Tobore Igbe, Lei Wang
2018 conf
EMBC
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Zhichun Zhao, Lei Wang
2018 J jnl
Neural Networks
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Ahmed Elazab, Hui Li, Talaat Abdelhamid, Nureni Ayofe Azeez, Lei Wang
2018 J jnl
IEEE Access
Wenjing Du, Olatunji Mumini Omisore, Hui Li, Kamen Ivanov, Shipeng Han, Lei Wang
2018 conf
EMBC
Zhichun Zhao, Kamen Ivanov, Ludwig Lubich, Olatunji Mumini Omisore, Zhanyong Mei, Nan Fu, Jinying Chen, Lei Wang
2018 C conf
BSN
Wenjing Du, Huihui Li, Olatunji Mumini Omisore, Wenmin Chen, Lei Wang
2018 J jnl
IEEE Trans. Biomed. Circuits Syst.
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Guo Shuai Wang, Fang Liang Ou, Hui Li, Lei Wang
2017 conf
EMBC
Lingxue Ren, Olatunji Mumini Omisore, Shipeng Han, Lei Wang
2017 J jnl
Sensors
Nannan Zhang, Jinyong Zhang, Hui Li, Olatunji Mumini Omisore, Oluwarotimi Williams Samuel, Kamen Ivanov, Lei Wang
2017 conf
ICIT
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Nannan Zhang, Lei Wang
2016 conf
BioCAS
Olatunji Mumini Omisore, Shipeng Han, Lingxue Ren, Lei Wang
2016 conf
OcRI
Asegunloluwa Eunice Babalola, Olatunji Mumini Omisore, B. A. Ojokoh
2015 J jnl
Bull. IEEE Tech. Comm. Digit. Libr.
Olatunji Mumini Omisore
2015 J jnl
Int. J. Fuzzy Syst. Appl.
Bolanle Adefowoke Ojokoh, Olatunji Mumini Omisore, Oluwarotimi Williams Samuel, Temidayo Otunniyi
2015 conf
MobileHealth@MobiHoc
Atajeromavwo Edafe, Olatunji Mumini Omisore, Samuel Oluwarotimi
2015 conf
JCDL
Bolanle Adefowoke Ojokoh, Olatunji Mumini Omisore, Oluwarotimi Williams Samuel
2014 J jnl
Int. J. Inf. Retr. Res.
Olatunji Mumini Omisore
2014 J jnl
Int. J. Web Based Learn. Teach. Technol.
Olatunji Mumini Omisore, O. W. Samuel
2013 J jnl
Expert Syst. Appl.
O. W. Samuel, Olatunji Mumini Omisore, B. A. Ojokoh
2013 J jnl
Int. J. Inf. Retr. Res.
B. A. Ojokoh, Olatunji Mumini Omisore, O. W. Samuel, U. I. Eno
tests/unit/test_decompile_similarity.py
← Index tests/unit/test_decompile_similarity.py python
"""Unit tests for similarity modules:
- bninja/similarity/minhashcustom.py
- bninja/similarity/minhasher.py
"""
import numpy as np
import pytest

from redb.extractors.decompiler.bninja.similarity.minhashcustom import MinHashCustom
from redb.extractors.decompiler.bninja.analysis.low_level_normalization import LowLevelNormalization


# ============================================================================
# 2a. MinHashCustom
# ============================================================================

class TestMinHashCustomInit:
    def test_init_empty(self):
        mh = MinHashCustom()
        assert not mh.hasMinHash()
        assert mh.minhash == b""
        assert mh.minhash_int == []

    def test_init_from_signature(self):
        sig = [10, 20, 30, 40]
        mh = MinHashCustom(minhash_signature=sig)
        assert mh.hasMinHash()
        assert mh.minhash_int == sig

    def test_init_from_bytes_uint32(self):
        """Verify round-trip: ints -> bytes -> MinHashCustom -> ints."""
        sig = [100, 200, 300]
        packed = np.array(sig, dtype=np.uint32).tobytes()
        # np.frombuffer returns numpy scalars; setMinHash does % 2**32 which
        # overflows numpy uint32, so verify the raw bytes round-trip instead.
        raw_arr = np.frombuffer(packed, dtype=np.uint32)
        assert list(raw_arr) == sig

    def test_init_from_bytes_uint8(self):
        """Verify round-trip: ints -> bytes -> back."""
        sig = [10, 20, 30]
        packed = np.array(sig, dtype=np.uint8).tobytes()
        raw_arr = np.frombuffer(packed, dtype=np.uint8)
        assert list(raw_arr) == sig

    def test_init_both_raises(self):
        sig = [1, 2, 3]
        packed = np.array(sig, dtype=np.uint32).tobytes()
        with pytest.raises(ValueError, match="only one"):
            MinHashCustom(minhash_bytes=packed, minhash_signature=sig)


class TestMinHashCustomSetGet:
    def test_set_and_get_minhash(self):
        mh = MinHashCustom()
        sig = [5, 10, 15]
        mh.setMinHash(sig)
        raw = mh.getMinHash()
        assert raw == np.array(sig, dtype=np.uint32).tobytes()
        assert mh.getMinHashInt() == sig

    def test_minhash_int_truncation(self):
        mh = MinHashCustom(minhash_bits=8)
        # Values > 256 should be truncated mod 2^8
        mh.setMinHash([300, 500, 256])
        for val in mh.minhash_int:
            assert 0 <= val < 256


class TestMinHashCustomHashData:
    def test_hash_data_string(self):
        result = MinHashCustom.hashData("hello", 42)
        assert isinstance(result, int)
        assert 0 <= result <= 0xFFFFFFFF

    def test_hash_data_bytes(self):
        result = MinHashCustom.hashData(b"bytes", 42)
        assert isinstance(result, int)
        assert 0 <= result <= 0xFFFFFFFF

    def test_hash_data_list(self):
        result = MinHashCustom.hashData([1, 2, 3], 42)
        assert isinstance(result, int)
        assert 0 <= result <= 0xFFFFFFFF

    def test_hash_data_unsupported_type(self):
        with pytest.raises(NotImplementedError, match="Type not supported"):
            MinHashCustom.hashData(123, 42)

    def test_hash_data_deterministic(self):
        assert MinHashCustom.hashData("test", 7) == MinHashCustom.hashData("test", 7)


class TestMinHashCustomScore:
    def test_score_identical(self):
        sig = [1, 2, 3, 4, 5]
        mh1 = MinHashCustom(minhash_signature=sig)
        mh2 = MinHashCustom(minhash_signature=sig)
        score = MinHashCustom.calculateMinHashScore(
            mh1.getMinHash(), mh2.getMinHash()
        )
        assert score == 100.0

    def test_score_different(self):
        mh1 = MinHashCustom(minhash_signature=[1, 2, 3, 4, 5])
        mh2 = MinHashCustom(minhash_signature=[6, 7, 8, 9, 10])
        score = MinHashCustom.calculateMinHashScore(
            mh1.getMinHash(), mh2.getMinHash()
        )
        assert score < 100.0

    def test_score_against(self):
        sig1 = [1, 2, 3, 4, 5]
        sig2 = [1, 2, 99, 4, 5]
        mh1 = MinHashCustom(minhash_signature=sig1)
        mh2 = MinHashCustom(minhash_signature=sig2)
        instance_score = mh1.scoreAgainst(mh2)
        static_score = MinHashCustom.calculateMinHashScore(
            mh1.getMinHash(), mh2.getMinHash()
        )
        assert instance_score == static_score


class TestMinHashCustomBitModes:
    def test_8bit_mode(self):
        mh = MinHashCustom(minhash_bits=8)
        mh.setMinHash([10, 20, 30])
        raw = mh.getMinHash()
        arr = np.frombuffer(raw, dtype=np.uint8)
        assert list(arr) == [10, 20, 30]

    def test_32bit_mode(self):
        mh = MinHashCustom(minhash_bits=32)
        mh.setMinHash([10, 20, 30])
        raw = mh.getMinHash()
        arr = np.frombuffer(raw, dtype=np.uint32)
        assert list(arr) == [10, 20, 30]


# ============================================================================
# 2b. MinHasher
# ============================================================================


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


class MockLLILBasicBlock:
    """Mock LLIL basic block that yields IL instructions."""
    def __init__(self, instructions):
        self._instructions = instructions

    def __iter__(self):
        return iter(self._instructions)


class MockLLILFunction:
    """Mock LLIL function with basic blocks."""
    def __init__(self, basic_blocks):
        self.basic_blocks = basic_blocks


# Import MinHasher after we know the module can handle the import
from redb.extractors.decompiler.bninja.similarity.minhasher import (
    MinHasher,
    MINHASH_SIGNATURE_LENGTH,
    MINHASH_SIGNATURE_BITS,
)


class TestMinHasherMakeNgrams:
    def setup_method(self):
        # Create a minimal minhasher with a mock LLIL function
        empty_func = MockLLILFunction([])
        self.hasher = MinHasher(seed=42, il_function=empty_func)

    def test_make_ngrams_basic(self):
        result = self.hasher.make_ngrams(["a", "b", "c", "d"], n=3)
        assert result == [("a", "b", "c"), ("b", "c", "d")]

    def test_make_ngrams_short_input(self):
        result = self.hasher.make_ngrams(["a", "b"], n=3)
        assert result == []

    def test_make_ngrams_exact_n(self):
        result = self.hasher.make_ngrams(["a", "b", "c"], n=3)
        assert result == [("a", "b", "c")]


class TestMinHasherCalculate:
    def _make_llil_function(self, num_instructions=10):
        """Create a mock LLIL function with enough instructions."""
        instructions = [
            MockILNode(operation=i % 20) for i in range(num_instructions)
        ]
        bb = MockLLILBasicBlock(instructions)
        return MockLLILFunction([bb])

    def test_calculate_minhash_empty_function(self):
        # Function with < 3 LLIL instructions -> empty list
        func = self._make_llil_function(num_instructions=2)
        hasher = MinHasher(seed=42, il_function=func)
        result = hasher.calculateMinHash()
        assert result == []

    def test_calculate_minhash_deterministic(self):
        func = self._make_llil_function(num_instructions=20)
        h1 = MinHasher(seed=42, il_function=func)
        h2 = MinHasher(seed=42, il_function=func)
        assert h1.calculateMinHash() == h2.calculateMinHash()

    def test_calculate_minhash_length(self):
        func = self._make_llil_function(num_instructions=20)
        hasher = MinHasher(seed=42, il_function=func)
        result = hasher.calculateMinHash()
        assert len(result) == MINHASH_SIGNATURE_LENGTH

    def test_calculate_minhash_value_range(self):
        func = self._make_llil_function(num_instructions=20)
        hasher = MinHasher(seed=42, il_function=func)
        result = hasher.calculateMinHash()
        for val in result:
            assert 0 <= val < 2 ** MINHASH_SIGNATURE_BITS

    def test_shingle_hash_deterministic(self):
        func = self._make_llil_function(num_instructions=5)
        hasher = MinHasher(seed=42, il_function=func)
        shingle = ([1, 2], [3, 4], [5, 6])
        assert hasher.shingle_hash(shingle, 99) == hasher.shingle_hash(shingle, 99)

    def test_seed_reproducibility(self):
        func = self._make_llil_function(num_instructions=20)
        h1 = MinHasher(seed=1, il_function=func)
        h2 = MinHasher(seed=2, il_function=func)
        r1 = h1.calculateMinHash()
        r2 = h2.calculateMinHash()
        # Different seeds should (very likely) produce different results
        assert r1 != r2