Xiangyu Wang

114 papers B 4C 25Journal 74Unranked 10
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Oper. Res.
Jianxiong Ye, Lei Wang, Changzhi Wu, Jie Sun, Kok Lay Teo, Xiangyu Wang
2022 J jnl
Sensors
Mona Arabshahi, Di Wang, Yufei Wang, Payam Rahnamayie Zekavat, Weichen Tang, Xiangyu Wang
2022 J jnl
J. Comput. Civ. Eng.
Shuyuan Xu, Jun Wang, Xiangyu Wang, Peng Wu, Wenchi Shou, Chao Liu
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yunxiang Zhao, Jianzhong Qi, Flip Korn, Xiangyu Wang
2022 J jnl
IEEE Access
Chongyi Liu, Xiangyu Wang, Honglei Xu
2021 J jnl
Ann. GIS
Junxiang Zhu, Yi Tan, Xiangyu Wang, Peng Wu
2021 J jnl
Sensors
Wei Ma, Xiangyu Wang, Jun Wang, Xiaolei Xiang, Junbo Sun
2021 J jnl
Comput. Aided Civ. Infrastructure Eng.
Yiming Bie, Jinhua Ji, Xiangyu Wang, Xiaobo Qu
2021 J jnl
Sensors
Mona Arabshahi, Di Wang, Junbo Sun, Payam Rahnamayie Zekavat, Weichen Tang, Yufei Wang, Xiangyu Wang
2019 J jnl
Signal Image Video Process.
Nili Tian, Bingo Wing-Kuen Ling, Changzhi Wu, Xiangyu Wang, Kok Lay Teo
2019 J jnl
Adv. Eng. Informatics
Changzhi Wu, Xiangyu Wang, Mengcheng Chen, Mi Jeong Kim
2019 J jnl
Optim. Lett.
Lei Wang, Jinlong Yuan, Changzhi Wu, Xiangyu Wang
2019 J jnl
IEEE Trans. Intell. Transp. Syst.
Yongze Song, Xiangyu Wang, Graeme Wright, Dominique Thatcher, Peng Wu, Pascal Felix
2018 J jnl
ISPRS Int. J. Geo Inf.
Junxiang Zhu, Graeme Wright, Jun Wang, Xiangyu Wang
2018 conf
EG-ICE
Weixiang Shi, Changzhi Wu, Xiangyu Wang
2018 J jnl
Complex.
Ki-Yeob Kang, Xiangyu Wang
2018 conf
Geoinformatics
Junxiang Zhu, Peng Wang, Xiangyu Wang
2018 J jnl
Int. J. Geogr. Inf. Sci.
Yongze Song, Ying Long, Peng Wu, Xiangyu Wang
2018 J jnl
Complex.
Jianbo Zhu, Qianqian Shi, Peng Wu, Zhaohan Sheng, Xiangyu Wang
2018 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Hao Zhang, Diyi Chen, Changzhi Wu, Xiangyu Wang
2018 J jnl
Complex.
Ru Liang, Zhaohan Sheng, Xiangyu Wang
2018 J jnl
Remote. Sens.
Yongze Song, Graeme Wright, Peng Wu, Dominique Thatcher, Tom McHugh, Qindong Li, Shuk Jin Li, Xiangyu Wang
2018 J jnl
J. Comput. Civ. Eng.
Sha Tao, Changzhi Wu, Zhaohan Sheng, Xiangyu Wang
2018 J jnl
ISPRS Int. J. Geo Inf.
Claudio Mirarchi, Alberto Pavan, Francesco De Marco, Xiangyu Wang, Yongze Song
2017 J jnl
ISPRS Int. J. Geo Inf.
Xin Liu, Xiangyu Wang, Graeme Wright, Jack C. P. Cheng, Xiao Li, Rui Liu
2017 J jnl
Int. J. Prod. Res.
Wenchi Shou, Jun Wang, Peng Wu, Xiangyu Wang, Heap-Yih Chong
2017 J jnl
Appl. Soft Comput.
Chuanxin Zhao, Changzhi Wu, Jian Chai, Xiangyu Wang, Xinmin Yang, Jae-Myung Lee, Mi Jeong Kim
2017 J jnl
J. Comput. Civ. Eng.
Lei Hou, Chuanxin Zhao, Changzhi Wu, Sungkon Moon, Xiangyu Wang
2017 J jnl
Concurr. Eng. Res. Appl.
Sungkon Moon, Sangwon Han, Payam Rahnamayie Zekavat, Leonhard E. Bernold, Xiangyu Wang
2017 J jnl
Adv. Eng. Informatics
Jian Chai, Changzhi Wu, Chuanxin Zhao, Hung-Lin Chi, Xiangyu Wang, Bingo Wing-Kuen Ling, Kok Lay Teo
2017 J jnl
ISPRS Int. J. Geo Inf.
Yongze Song, Xiangyu Wang, Yi Tan, Peng Wu, Monty Sutrisna, Jack C. P. Cheng, Keith Hampson
2016 J jnl
Neurocomputing
Dong Ren, Fangfang Qu, Ke Lv, Zhong Zhang, Honglei Xu, Xiangyu Wang
2016 J jnl
Appl. Soft Comput.
Jianjun Liu, Shaohua Zhang, Changzhi Wu, Jingwei Liang, Xiangyu Wang, Kok Lay Teo
2016 J jnl
J. Optim. Theory Appl.
Jueyou Li, Zhiyou Wu, Changzhi Wu, Qiang Long, Xiangyu Wang
2016 J jnl
Soft Comput.
Jianjun Liu, Kok Lay Teo, Xiangyu Wang, Changzhi Wu
2016 J jnl
Concurr. Eng. Res. Appl.
Jian Chai, Hung-Lin Chi, Xiangyu Wang, Changzhi Wu, Kwang-Hyo Jung, Jae-Myung Lee
2016 C conf
CDVE
Jun Wang, Hung-Lin Chi, Chongyi Liu, Xiangyu Wang
2016 J jnl
Appl. Soft Comput.
Xuedong Zhang, Changzhi Wu, Jing Li, Xiangyu Wang, Zhijing Yang, Jae-Myung Lee, Kwang-Hyo Jung
2016 C conf
CDVE
Lei Hou, Hung-Lin Chi, Erezi Utiome, Xiangyu Wang
2016 J jnl
Circuits Syst. Signal Process.
Qing Liu, Bingo Wing-Kuen Ling, Qingyun Dai, Zhijing Yang, Changzhi Wu, Xiangyu Wang
2015 J jnl
J. Intell. Robotic Syst.
Hung-Lin Chi, Jun Wang, Xiangyu Wang, Martijn Truijens, Ping Yung
2015 J jnl
Int. J. Distributed Sens. Networks
Seyedamir Tavakoli Taba, Payam Rahnamayie Zekavat, Golnaz Alipour Esgandani, Xiangyu Wang, Leonhard E. Bernold
2015 C conf
CDVE
Jian Chai, Hung-Lin Chi, Xiangyu Wang
2015 J jnl
Swarm Evol. Comput.
Qiang Long, Changzhi Wu, Tingwen Huang, Xiangyu Wang
2015 J jnl
Appl. Math. Comput.
Jianjun Liu, Changzhi Wu, Guoning Wu, Xiangyu Wang
2015 J jnl
Appl. Math. Comput.
Qiang Long, Changzhi Wu, Xiangyu Wang
2015 C conf
CDVE
Jun Wang, Wenchi Shou, Xiangyu Wang, Hung-Lin Chi
2015 J jnl
J. Intell. Robotic Syst.
Mi Jeong Kim, Hung-Lin Chi, Xiangyu Wang, Lieyun Ding
2015 J jnl
J. Intell. Robotic Syst.
Mi Jeong Kim, Ju Hyun Lee, Xiangyu Wang, Jeong Tai Kim
2015 J jnl
J. Intell. Robotic Syst.
Jun Wang, Weizhuo Sun, Wenchi Shou, Xiangyu Wang, Changzhi Wu, Heap-Yih Chong, Yan Liu, Cenfei Sun
2015 J jnl
J. Comput. Civ. Eng.
Lei Hou, Xiangyu Wang, Martijn Truijens
2014 J jnl
J. Inf. Technol. Constr.
Ping Yung, Jun Wang, Xiangyu Wang, Ming Jin
2014 C conf
CDVE
Jun Wang, Lei Hou, Heap-Yih Chong, Xin Liu, Xiangyu Wang, Jun Guo
2014 J jnl
J. Inf. Technol. Constr.
Johnny Wong, Xiangyu Wang, Heng Li, Greg Chan, Haijiang Li
2014 J jnl
J. Inf. Technol. Constr.
Lei Hou, Xiangyu Wang, Jun Wang, Martijn Truijens
2014 C conf
CDVE
Jun Wang, Heap-Yih Chong, Wenchi Shou, Xiangyu Wang, Jun Guo
2014 J jnl
Proc. IEEE
Lei Hou, Ying Wang, Xiangyu Wang, Nicoleta Maynard, Ian G. M. Cameron, Shaohua Zhang, Yi Maynard
2014 J jnl
Comput. Ind.
Ju Hyun Lee, Hyunsoo Lee, Mi Jeong Kim, Xiangyu Wang, Peter E. D. Love
2014 C conf
CDVE
Heap-Yih Chong, Jun Wang, Wenchi Shou, Xiangyu Wang, Jun Guo
2014 J jnl
J. Frankl. Inst.
Changzhi Wu, Kok Lay Teo, Xiangyu Wang
2014 J jnl
Comput. Ind.
Xiangyu Wang, Peter E. D. Love, Mi Jeong Kim, Wei Wang
2014 J jnl
Sensors
Xin Liu, Jeremy Shannon, Howard Voun, Martijn Truijens, Hung-Lin Chi, Xiangyu Wang
2013 J jnl
J. Oper. Res. Soc.
Jingyang Zhou, Peter E. D. Love, Xiangyu Wang, Kok Lay Teo, Zahir Irani
2013 C conf
CDVE
Xiangyu Wang, Martijn Truijens, Lei Hou, Ying Wang
2013 J jnl
Hum. Factors
Joey C. Y. So, Robert W. Proctor, Phillip S. Dunston, Xiangyu Wang
2013 C conf
CDVE
Danilo Di Mascio, Xiangyu Wang
2013 J jnl
J. Oper. Res. Soc.
Peter E. D. Love, Michael C. P. Sing, Xiangyu Wang, David J. Edwards, Henry Odeyinka
2013 J jnl
Int. J. 3 D Inf. Model.
Jun Wang, Shirong Li, Xiangyu Wang, Chao Mao, Jun Guo
2013 J jnl
J. Comput. Civ. Eng.
Lei Hou, Xiangyu Wang, Leonhard E. Bernold, Peter E. D. Love
2013 J jnl
J. Inf. Technol. Constr.
Mi Jeong Kim, Xiangyu Wang, Peter E. D. Love, Heng Li, Shih-Chung Kang
2012 conf
BHI
Sarah Vakili, Nima Tehranchian, Maryam Tajziehchi, Iman Mohammad Rezazadeh, Xiangyu Wang
2012 J jnl
eLearn Mag.
Xiangyu Wang
2012 C conf
CSCWD
Xiangyu Wang, Peter E. D. Love
2012 J jnl
J. Inf. Technol. Constr.
Xiangyu Wang, Robert Klinc
2012 J jnl
J. Inf. Technol. Constr.
Leman Figen Gül, Xiangyu Wang, Gülen Çagdas
2012 J jnl
J. Inf. Technol. Constr.
Xiangyu Wang, Peter E. D. Love, Robert Klinc, Mi Jeong Kim, Peter R. Davis
2011 J jnl
J. Inf. Technol. Constr.
Phillip S. Dunston, Xiangyu Wang
2011 J jnl
J. Inf. Technol. Constr.
Xiangyu Wang, Phillip S. Dunston
2011 J jnl
J. Inf. Technol. Constr.
Phillip S. Dunston, Xiangyu Wang
2011 J jnl
J. Inf. Technol. Constr.
Kathryn E. Merrick, Ning Gu, Xiangyu Wang
2011 book
Xiangyu Wang, Jerry Jen-Hung Tsai
2011 J jnl
IEEE Trans. Syst. Man Cybern. Part C
Xiangyu Wang, Phillip S. Dunston
2011 J jnl
Expert Syst. Appl.
Rui Wang, Xiangyu Wang, Mi Jeong Kim
2011 J jnl
J. Univers. Comput. Sci.
Xiangyu Wang, Peter E. D. Love, Mi Jeong Kim, Lu Wang
2011 C conf
CSCWD
Rui Wang, Xiangyu Wang
2010 C conf
CSCWD
Lu Wang, Xiangyu Wang
2010 B conf
SMC
Lu Wang, Xiangyu Wang
2009 C conf
CDVE
Wei Wang, Xiangyu Wang, Rui Wang
2009 C conf
CSCWD
Irene Rui Chen, Xiangyu Wang, Wei Wang
2009 B conf
SMC
Xiangyu Wang, Phillip S. Dunston
2009 C conf
CDVE
Rui Wang, Xiangyu Wang
2009 B conf
SMC
Jie Zhu, Xiangyu Wang, Michael Rosenman
2009 C conf
CSCWD
Wei Wang, Xiangyu Wang
2009 J jnl
Int. J. Virtual Real.
Caitilin de Bérigny Wall, Xiangyu Wang
2009 C conf
CSCWD
Rui Wang, Xiangyu Wang, Wei Wang
2009 B conf
SMC
Wang Wei, Xiangyu Wang, Jie Zhu
2009 conf
FaVE
Xiangyu Wang, Irene Rui Chen
2009 conf
ICEBE
Rui Wang, Xiangyu Wang
2008 C conf
CDVE
Xiangyu Wang, Rui (Irene) Chen, Rui Wang
2008 J jnl
J. Inf. Technol. Constr.
Xiangyu Wang, Ning Gu, David Marchant
2008 conf
ICEBE
Rui Wang, Xiangyu Wang
2008 C conf
CSCWD
Xiangyu Wang
2008 C conf
CIT
Rui Wang, Xiangyu Wang
2008 conf
DIMEA
Caitilin de Bérigny Wall, Xiangyu Wang
2008 C conf
CDVE
Rui Wang, Xiangyu Wang
2008 C conf
CSCWD
Xiangyu Wang
2007 conf
CSCWD (Selected Papers)
Xiangyu Wang
2007 J jnl
J. Inf. Technol. Constr.
Xiangyu Wang, Phillip S. Dunston
2007 C conf
IV
Xiangyu Wang, Rui (Irene) Chen, Yan Gong, Yi-Ting Hsieh
2007 C conf
CSCWD
Xiangyu Wang
2007 conf
CSCWD (Selected Papers)
Xiangyu Wang
2007 C conf
IV
Xiangyu Wang
2006 conf
CGIV
Xiangyu Wang, Phillip S. Dunston
2005 J jnl
ACM Trans. Appl. Percept.
Do Hyoung Shin, Phillip S. Dunston, Xiangyu Wang
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