Kashif Sharif

106 papers B 6C 4Journal 81Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Networks
Narzullo Khodjamov, Song Yang, Kashif Sharif, Yanan Gao, Fan Li, Yang Wang, Sardor Mamarasulov, Liehuang Zhu
2026 J jnl
Comput. Sci. Rev.
Md. Monjurul Karim, Sangeen Khan, Qiang Qu, Muhammad Muzammal, Kashif Sharif, Sujit Biswas
2026 J jnl
Future Gener. Comput. Syst.
Md. Monjurul Karim, Qiang Qu, Kashif Sharif, Muhammad Muzammal, Sujit Biswas
2026 J jnl
IEEE Internet Things J.
Chengzhi Gao, Xiaodong Shen, Guoxie Jin, Chang Xu, Liehuang Zhu, Kashif Sharif
2025 conf
Inscrypt (3)
Awais Bilal, Liehuang Zhu, Kashif Sharif, Fan Li, Sadaf Bukhari
2025 J jnl
IEEE Trans. Software Eng.
Chang Xu, Huaiyu Xu, Liehuang Zhu, Xiaodong Shen, Kashif Sharif
2024 J jnl
IEEE Trans. Serv. Comput.
Chang Xu, Guoxie Jin, Rongxing Lu, Liehuang Zhu, Xiaodong Shen, Yunguo Guan, Kashif Sharif
2024 C conf
ISPA
Xin Liu, Xiaodong Shen, Chang Xu, Liehuang Zhu, Kashif Sharif
2024 conf
WASA (2)
Liehuang Zhu, Sadaf Bukhari, Kashif Sharif, Fan Li, Shumaila Fardous, Sujit Biswas
2024 J jnl
IET Commun.
Sujit Biswas, Kashif Sharif, Zohaib Latif, Mohammed J. F. Alenazi, Ashok Kumar Pradhan, Anupam Kumar Bairagi
2024 J jnl
IEEE Internet Things J.
Md. Monjurul Karim, Kashif Sharif, Sujit Biswas, Zohaib Latif, Qiang Qu, Fan Li
2024 J jnl
IEEE Trans. Serv. Comput.
Sadaf Bukhari, Kashif Sharif, Liehuang Zhu, Chang Xu, Fan Li, Sujit Biswas
2024 J jnl
Clust. Comput.
Chang Xu, Hongzhou Rao, Liehuang Zhu, Chuan Zhang, Kashif Sharif
2024 J jnl
IEEE Internet Things J.
Chang Xu, Rongrong Li, Liehuang Zhu, Xiaodong Shen, Kashif Sharif
2024 J jnl
Comput. Stand. Interfaces
Chang Xu, Zijian Chan, Liehuang Zhu, Rongxing Lu, Yunguo Guan, Kashif Sharif
2024 conf
CyberC
Ruiguang Yang, Xiaodong Shen, Chang Xu, Liehuang Zhu, Kashif Sharif
2024 C conf
ISPA
Jiajia Mei, Xiaodong Shen, Chang Xu, Liehuang Zhu, Guoxie Jin, Kashif Sharif
2024 conf
BCCA
Sadaf Bukhari, Kashif Sharif, Liehuang Zhu
2024 conf
WASA (3)
Liehuang Zhu, Awais Bilal, Kashif Sharif, Fan Li
2024 J jnl
CoRR
Abdulrahman Hamman Adama Chukkol, Senlin Luo, Kashif Sharif, Yunusa Haruna, Muhammad Muhammad Abdullahi
2023 J jnl
IEEE Consumer Electron. Mag.
Zohaib Latif, Choonhwa Lee, Kashif Sharif, Fan Li, Saraju P. Mohanty
2023 J jnl
IEEE Trans. Big Data
Chang Xu, Ruijuan Wang, Liehuang Zhu, Chuan Zhang, Rongxing Lu, Kashif Sharif
2023 conf
AFRICON
Ezekia Gilliard, Kashif Sharif, Khuhawar Arif Raza, Md. Monjurul Karim
2023 J jnl
IEEE Trans. Dependable Secur. Comput.
Hongyang Yan, Shuhao Li, Yajie Wang, Yaoyuan Zhang, Kashif Sharif, Haibo Hu, Yuanzhang Li
2023 J jnl
IEEE Trans. Sustain. Comput.
Hanqi Zhang, Chang Xu, Liehuang Zhu, Chuan Zhang, Rongxing Lu, Yunguo Guan, Kashif Sharif
2023 J jnl
Peer Peer Netw. Appl.
Chang Xu, Run Yin, Liehuang Zhu, Can Zhang, Kashif Sharif
2023 J jnl
IEEE Trans. Veh. Technol.
Liehuang Zhu, Md. Monjurul Karim, Kashif Sharif, Chang Xu, Fan Li
2022 J jnl
Sensors
Zohaib Latif, Qasim Umer, Choonhwa Lee, Kashif Sharif, Fan Li, Sujit Biswas
2022 J jnl
CCF Trans. Pervasive Comput. Interact.
Youqi Li, Fan Li, Liehuang Zhu, Kashif Sharif, Huijie Chen
2022 J jnl
IEEE Trans. Veh. Technol.
Can Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Rongxing Lu, Yupeng Chen
2022 J jnl
IEEE Trans. Big Data
Sujit Biswas, Kashif Sharif, Fan Li, Iqbal Alam, Saraju P. Mohanty
2022 J jnl
IEEE Netw.
Liehuang Zhu, Chuan Zhang, Chang Xu, Wei Wang, Xiaojiang Du, Mohsen Guizani, Kashif Sharif
2022 J jnl
IEEE Trans. Sustain. Comput.
Chang Xu, Yayun Si, Liehuang Zhu, Chuan Zhang, Kashif Sharif, Huishu Wu
2022 J jnl
CoRR
Chang Xu, Ruijuan Wang, Liehuang Zhu, Chuan Zhang, Rongxing Lu, Kashif Sharif
2022 J jnl
Comput. Networks
Muhammad Wasim Abbas Ashraf, Chuanhe Huang, Khuhawar Arif Raza, Kashif Sharif, Md. Monjurul Karim, Shidong Huang
2022 J jnl
IEEE Internet Things J.
Chang Xu, Run Yin, Liehuang Zhu, Chuan Zhang, Can Zhang, Yupeng Chen, Kashif Sharif
2022 J jnl
IEEE Internet Things J.
Chang Xu, Ningning Wang, Liehuang Zhu, Chuan Zhang, Kashif Sharif, Huishu Wu
2022 J jnl
IEEE Trans. Parallel Distributed Syst.
Chang Xu, Yu Jia, Liehuang Zhu, Chuan Zhang, Guoxie Jin, Kashif Sharif
2022 J jnl
IEEE Trans. Serv. Comput.
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Kai Ding, Ximeng Liu, Xiaojiang Du, Mohsen Guizani
2021 C conf
ISNCC
Khuhawar Arif Raza, Alia Asheralieva, Md. Monjurul Karim, Kashif Sharif, Mehdi Gheisari, Salabat Khan
2021 J jnl
ACM Comput. Surv.
Iqbal Alam, Kashif Sharif, Fan Li, Zohaib Latif, Md. Monjurul Karim, Sujit Biswas, Boubakr Nour, Yu Wang
2021 B conf
TrustCom
Chang Xu, Lvhan Zhang, Liehuang Zhu, Chuan Zhang, Kashif Sharif
2021 J jnl
IEEE Trans. Netw. Serv. Manag.
Zohaib Latif, Kashif Sharif, Fan Li, Md. Monjurul Karim, Sujit Biswas, Madiha Shahzad, Saraju P. Mohanty
2021 J jnl
Peer-to-Peer Netw. Appl.
Chang Xu, Jiachen Wang, Liehuang Zhu, Kashif Sharif, Chuan Zhang, Can Zhang
2021 J jnl
IEEE Consumer Electron. Mag.
Sujit Biswas, Kashif Sharif, Fan Li, Anupam Kumar Bairagi, Zohaib Latif, Saraju P. Mohanty
2021 J jnl
IEEE Trans. Serv. Comput.
Youqi Li, Fan Li, Song Yang, Yue Wu, Huijie Chen, Kashif Sharif, Yu Wang
2021 J jnl
IEEE Trans. Veh. Technol.
Can Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif
2021 J jnl
Comput. Stand. Interfaces
Can Zhang, Chang Xu, Kashif Sharif, Liehuang Zhu
2021 J jnl
IEEE Trans. Dependable Secur. Comput.
Chuan Zhang, Liehuang Zhu, Chang Xu, Ximeng Liu, Kashif Sharif
2021 J jnl
ACM Comput. Surv.
Liehuang Zhu, Md. Monjurul Karim, Kashif Sharif, Chang Xu, Fan Li, Xiaojiang Du, Mohsen Guizani
2021 conf
ICA3PP (3)
Chang Xu, Hongzhou Rao, Liehuang Zhu, Chuan Zhang, Kashif Sharif
2020 B conf
GLOBECOM
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif
2020 J jnl
J. Netw. Comput. Appl.
Zohaib Latif, Kashif Sharif, Fan Li, Md. Monjurul Karim, Sujit Biswas, Yu Wang
2020 J jnl
Inf. Sci.
Xiaodong Shen, Liehuang Zhu, Chang Xu, Kashif Sharif, Rongxing Lu
2020 J jnl
Comput. Commun.
Boubakr Nour, Kashif Sharif, Fan Li, Hassine Moungla, Yang Liu
2020 J jnl
Future Gener. Comput. Syst.
Chang Xu, Lvhan Zhang, Liehuang Zhu, Chuan Zhang, Xiaojiang Du, Mohsen Guizani, Kashif Sharif
2020 J jnl
IEEE Trans. Veh. Technol.
Can Zhang, Liehuang Zhu, Chang Xu, Chuan Zhang, Kashif Sharif, Huishu Wu, Hannes Westermann
2020 J jnl
Computer
Sujit Biswas, Kashif Sharif, Fan Li, Saraju P. Mohanty
2020 J jnl
IEEE Internet Comput.
Boubakr Nour, Hatem Ibn-Khedher, Hassine Moungla, Hossam Afifi, Fan Li, Kashif Sharif, Hakima Khelifi, Mohsen Guizani
2020 J jnl
IEEE Trans. Engineering Management
Sujit Biswas, Kashif Sharif, Fan Li, Zohaib Latif, Salil S. Kanhere, Saraju P. Mohanty
2020 J jnl
Inf. Sci.
Can Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Chuan Zhang, Ximeng Liu
2020 J jnl
Sci. China Inf. Sci.
Chang Xu, Xuan Xie, Liehuang Zhu, Kashif Sharif, Chuan Zhang, Xiaojiang Du, Mohsen Guizani
2020 J jnl
IEEE Internet Things J.
Sujit Biswas, Kashif Sharif, Fan Li, Sabita Maharjan, Saraju P. Mohanty, Yu Wang
2020 J jnl
IEEE Secur. Priv.
Boubakr Nour, Kashif Sharif, Fan Li, Yu Wang
2020 J jnl
Future Gener. Comput. Syst.
Liehuang Zhu, Nassoro M. R. Lwamo, Kashif Sharif, Chang Xu, Xiaojiang Du, Mohsen Guizani, Fan Li
2019 J jnl
CoRR
Zohaib Latif, Kashif Sharif, Fan Li, Md. Monjurul Karim, Yu Wang
2019 J jnl
IEEE Internet Things J.
Sujit Biswas, Kashif Sharif, Fan Li, Boubakr Nour, Yu Wang
2019 J jnl
Comput. Commun.
Boubakr Nour, Kashif Sharif, Fan Li, Sujit Biswas, Hassine Moungla, Mohsen Guizani, Yu Wang
2019 J jnl
IEEE Internet Things J.
Chang Xu, Ningning Wang, Liehuang Zhu, Kashif Sharif, Chuan Zhang
2019 J jnl
CoRR
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Ximeng Liu, Xiaojiang Du, Mohsen Guizani
2019 J jnl
IEEE Access
Liehuang Zhu, Hongyuan Wang, Chang Xu, Kashif Sharif, Rongxing Lu
2019 J jnl
IEEE Netw.
Boubakr Nour, Kashif Sharif, Fan Li, Song Yang, Hassine Moungla, Yu Wang
2019 J jnl
CoRR
Iqbal Alam, Kashif Sharif, Fan Li, Zohaib Latif, Md. Monjurul Karim, Boubakr Nour, Sujit Biswas, Yu Wang
2019 J jnl
Future Gener. Comput. Syst.
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Xiaojiang Du, Mohsen Guizani
2019 J jnl
IEEE Trans. Veh. Technol.
Yang Liu, Lili Hao, Zhixin Liu, Kashif Sharif, Yu Wang, Sajal K. Das
2019 J jnl
IEEE Internet Things J.
Chang Xu, Jiachen Wang, Liehuang Zhu, Chuan Zhang, Kashif Sharif
2019 J jnl
Inf. Sci.
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Ximeng Liu
2019 J jnl
IEEE Internet Things J.
Chang Xu, Yayun Si, Liehuang Zhu, Chuan Zhang, Kashif Sharif, Can Zhang
2019 J jnl
CoRR
Liehuang Zhu, Md. Monjurul Karim, Kashif Sharif, Fan Li, Xiaojiang Du, Mohsen Guizani
2019 J jnl
Inf. Sci.
Nassoro M. R. Lwamo, Liehuang Zhu, Chang Xu, Kashif Sharif, Ximeng Liu, Chuan Zhang
2019 J jnl
J. Comput. Sci. Technol.
Dong-Di Zhao, Fan Li, Kashif Sharif, Guang-Min Xia, Yu Wang
2019 J jnl
IEEE Wirel. Commun.
Liehuang Zhu, Chuan Zhang, Chang Xu, Xiaojiang Du, Nadra Guizani, Kashif Sharif
2018 J jnl
IEEE Netw.
Feng Gao, Liehuang Zhu, Meng Shen, Kashif Sharif, Zhiguo Wan, Kui Ren
2018 J jnl
Inf. Sci.
Chen Liang, Xianmin Wang, Xiaosong Zhang, Yu Zhang, Kashif Sharif, Yu-an Tan
2018 J jnl
IEEE Wirel. Commun.
Yu-an Tan, Xiaosong Zhang, Kashif Sharif, Chen Liang, Quanxin Zhang, Yuanzhang Li
2018 J jnl
CoRR
Chuan Zhang, Liehuang Zhu, Chang Xu, Kashif Sharif, Xiaojiang Du, Mohsen Guizani
2018 J jnl
World Wide Web
Fan Li, Zhuo Li, Kashif Sharif, Yang Liu, Yu Wang
2018 B conf
GLOBECOM
Boubakr Nour, Kashif Sharif, Fan Li, Hassine Moungla, Ahmed E. Kamal, Hossam Afifi
2018 conf
CSCN
Boubakr Nour, Kashif Sharif, Fan Li, Hakima Khelifi, Hassine Moungla
2018 J jnl
CoRR
Chang Xu, Xuan Xie, Liehuang Zhu, Kashif Sharif, Chuan Zhang, Xiaojiang Du, Mohsen Guizani
2018 J jnl
CoRR
Liehuang Zhu, Chuan Zhang, Chang Xu, Xiaojiang Du, Rixin Xu, Kashif Sharif, Mohsen Guizani
2018 J jnl
IEEE Internet Things J.
Liehuang Zhu, Chuan Zhang, Chang Xu, Xiaojiang Du, Rixin Xu, Kashif Sharif, Mohsen Guizani
2018 conf
WASA
Nazish Tahir, Md. Monjurul Karim, Kashif Sharif, Fan Li, Nadeem Ahmed
2018 J jnl
IEEE Netw.
Liehuang Zhu, Chuan Zhang, Chang Xu, Kashif Sharif
2017 conf
WASA
Sujit Biswas, Kashif Sharif, Fan Li, Yang Liu
2017 B conf
GLOBECOM
Boubakr Nour, Kashif Sharif, Fan Li, Hassine Moungla
2017 J jnl
IEEE Access
Fan Li, Xiuxiu Wang, Huijie Chen, Kashif Sharif, Yu Wang
2017 conf
WASA
Boubakr Nour, Kashif Sharif, Fan Li, Hassine Moungla, Yang Liu
2017 conf
MSN
Zohaib Latif, Kashif Sharif, Maria K. Alvi, Fan Li
2017 B conf
ICPADS
Wensheng Li, Fan Li, Kashif Sharif, Yu Wang
2016 C conf
IPCCC
Fan Li, Cheng Xu, Yang Liu, Yun Zhang, Zhuo Li, Kashif Sharif, Yu Wang
2011 J jnl
Int. J. Ad Hoc Ubiquitous Comput.
Lijuan Cao, Kashif Sharif, Teresa A. Dahlberg, Yu Wang
2010 conf
CCNC
Kashif Sharif, Teresa A. Dahlberg, Lijuan Cao
2009 conf
CCNC
Lijuan Cao, Kashif Sharif, Yu Wang, Teresa A. Dahlberg
2008 B conf
ICCCN
Kashif Sharif, Lijuan Cao, Yu Wang, Teresa A. Dahlberg
2008 conf
CCNC
Lijuan Cao, Kashif Sharif, Yu Wang, Teresa A. Dahlberg
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