Vilas Wuwongse

111 papers A 4B 5C 6Misc 6Journal 32Unranked 52
YearRankTypeTitle / Venue / Authors
2018 J jnl
IEICE Trans. Inf. Syst.
Marut Buranarach, Chutiporn Anutariya, Nopachat Kalayanapan, Taneth Ruangrajitpakorn, Vilas Wuwongse, Thepchai Supnithi
2018 conf
WWW (Companion Volume)
Rathachai Chawuthai, Hideaki Takeda, Vilas Wuwongse, Utsugi Jinbo
2016 J jnl
Semantic Web
Rathachai Chawuthai, Hideaki Takeda, Vilas Wuwongse, Utsugi Jinbo
2015 J jnl
Program
Chariya Nonthakarn, Vilas Wuwongse
2015 ed.
JIST
Thepchai Supnithi, Takahira Yamaguchi, Jeff Z. Pan, Vilas Wuwongse, Marut Buranarach
2014 conf
ICADL
Chariya Nonthakarn, Rathachai Chawuthai, Vilas Wuwongse
2013 J jnl
J. Ambient Intell. Humaniz. Comput.
Thushari P. Silva, Vilas Wuwongse, Hitesh Nidhi Sharma
2013 conf
IIAI-AAI
Vilas Wuwongse
2013 conf
ISIP
Marut Buranarach, Taneth Ruangrajitpakorn, Chutiporn Anutariya, Vilas Wuwongse
2012 conf
ICADL
Rathachai Chawuthai, Vilas Wuwongse, Hideaki Takeda
2012 conf
IIAI-AAI
Kornschnok Dittawit, Vilas Wuwongse
2012 conf
ICWL Workshops
Nopachat Kalayanapan, Vilas Wuwongse, Kornschnok Dittawit
2012 conf
Dublin Core Conference
Witsapat Chaichuay, Lampang Manmart, Vilas Wuwongse, Nisachol Chamnongsri
2012 J jnl
Int. J. Inf. Commun. Technol. Hum. Dev.
Phannachet Na Lamphun, Vilas Wuwongse
2012 conf
ICADL
Chariya Nonthakarn, Vilas Wuwongse
2012 J jnl
Int. J. Knowl. Learn.
Burasakorn Yoosooka, Vilas Wuwongse
2012 conf
Dublin Core Conference
Lampang Manmart, Nisachol Chamnongsri, Vilas Wuwongse, Shigeo Sugimoto
2011 J jnl
Int. J. Syst. Serv. Oriented Eng.
Burasakorn Yoosooka, Vilas Wuwongse
2011 conf
ICADL
Kornschnok Dittawit, Vilas Wuwongse
2011 conf
ICUIMC
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2011 ch.
Semantic Services, Interoperability and Web Applications
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2011 conf
ICISTM
Chung-Chou Tsai, Sununta Siengthai, Vilas Wuwongse, Donyaprueth Krairit
2011 J jnl
Int. J. Syst. Serv. Oriented Eng.
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2011 conf
INCoS
Thushari P. Silva, Vilas Wuwongse, Hitesh Nidhi Sharma
2011 conf
INCoS
Burasakorn Yoosooka, Vilas Wuwongse
2010 conf
ICADL
Nisachol Chamnongsri, Lampang Manmart, Vilas Wuwongse
2010 J jnl
Int. J. Organ. Collect. Intell.
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2010 J jnl
Int. J. Semantic Web Inf. Syst.
Rachanee Ungrangsi, Chutiporn Anutariya, Vilas Wuwongse
2010 conf
WISE Workshops
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2009 C conf
iiWAS
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2009 J jnl
Int. J. Semantic Web Inf. Syst.
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2009 conf
JCDL
Nisachol Chamnongsri, Lampang Manmart, Vilas Wuwongse
2009 B conf
ICCCI
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2008 conf
SKG
Krissada Maleewong, Chutiporn Anutariya, Vilas Wuwongse
2008 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Ajaree Naco, Vilas Wuwongse, Chutiporn Anutariya
2008 conf
ASWC
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2008 conf
ISWC (Posters & Demos)
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2008 J jnl
Decis. Support Syst.
Thadthong Bhrammanee, Vilas Wuwongse
2008 conf
SWKM
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2008 A conf
ICWSM
Aman Shakya, Hideaki Takeda, Vilas Wuwongse
2008 J jnl
J. Digit. Inf. Manag.
Sachit Rajbhandari, Frédéric Andrès, Motomu Naito, Vilas Wuwongse
2008 J jnl
IEICE Trans. Inf. Syst.
Rachanee Ungrangsi, Chutiporn Anutariya, Vilas Wuwongse
2007 conf
SKG
Rachanee Ungrangsi, Chutiporn Anutariya, Vilas Wuwongse
2007 J jnl
IEICE Trans. Inf. Syst.
Photchanan Ratanajaipan, Ekawit Nantajeewarawat, Vilas Wuwongse
2007 conf
SAAKM
Aman Shakya, Vilas Wuwongse, Hideaki Takeda, Ikki Ohmukai
2007 J jnl
ACM Trans. Inf. Syst. Secur.
Mizuho Iwaihara, Ryotaro Hayashi, Somchai Chatvichienchai, Chutiporn Anutariya, Vilas Wuwongse
2007 C conf
DEXA
Rachanee Ungrangsi, Chutiporn Anutariya, Vilas Wuwongse
2007 B conf
DASFAA
Chutiporn Anutariya, Rachanee Ungrangsi, Vilas Wuwongse
2007 A conf
ICWSM
Aman Shakya, Hideaki Takeda, Vilas Wuwongse, Ikki Ohmukai
2007 ch.
Decision Support for Global Enterprises
Thadthong Bhrammanee, Vilas Wuwongse
2006 J jnl
Electron. Gov. an Int. J.
Wajee Teswanich, Chutiporn Anutariya, Vilas Wuwongse
2006 conf
ICADL
Nisachol Chamnongsri, Lampang Manmart, Vilas Wuwongse, Elin K. Jacob
2006 B ed.
DASFAA
Mong-Li Lee, Kian-Lee Tan, Vilas Wuwongse
2006 conf
ASWC
Photchanan Ratanajaipan, Ekawit Nantajeewarawat, Vilas Wuwongse
2006 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Pongtawat Chippimolchai, Kiyoshi Akama, Vilas Wuwongse
2006 conf
TMRA
Sachit Rajbhandari, Frédéric Andrès, Motomu Naito, Vilas Wuwongse
2006 conf
ICDIM
Sachit Rajbhandari, Vilas Wuwongse, Frédéric Andrès, Motomu Naito
2005 conf
MTSR
Cao Hong Thang, Vilas Wuwongse
2005 ed.
ICADL
Edward A. Fox, Erich J. Neuhold, Pimrumpai Premsmit, Vilas Wuwongse
2005 C conf
SACMAT
Mizuho Iwaihara, Somchai Chatvichienchai, Chutiporn Anutariya, Vilas Wuwongse
2005 conf
ICDE Workshops
Pongtawat Chippimolchai, Vilas Wuwongse, Chutiporn Anutariya
2005 J jnl
Comput. Intell.
Chutiporn Anutariya, Vilas Wuwongse, Kiyoshi Akama
2004 ed.
INTELLCOMM
Finn Arve Aagesen, Chutiporn Anutariya, Vilas Wuwongse
2004 conf
ICADL
Vilas Wuwongse, Masatoshi Yoshikawa, Toshiyuki Amagasa
2004 J jnl
Int. J. Intell. Syst.
Ekawit Nantajeewarawat, Vilas Wuwongse, Chutiporn Anutariya, Kiyoshi Akama, Surapa Thiemjarus
2004 C conf
DEXA
Somchai Chatvichienchai, Chutiporn Anutariya, Mizuho Iwaihara, Vilas Wuwongse, Yahiko Kambayashi
2004 conf
Dublin Core Conference
Vilas Wuwongse
2004 conf
RuleML
Nimit Pattanasri, Vilas Wuwongse, Kiyoshi Akama
2003 J jnl
J. Intell. Inf. Syst.
Vilas Wuwongse, Kiyoshi Akama, Chutiporn Anutariya, Ekawit Nantajeewarawat
2003 conf
RuleML
Chutiporn Anutariya, Somchai Chatvichienchai, Mizuho Iwaihara, Vilas Wuwongse, Yahiko Kambayashi
2003 C conf
iiWAS
Le Thi Thu Thuy, Vilas Wuwongse
2003 conf
WAIM
Doan Dai Duong, Vilas Wuwongse
2002 conf
ICADL
Ano Chotmanee, Vilas Wuwongse, Chutiporn Anutariya
2002 conf
RuleML
Chutiporn Anutariya, Vilas Wuwongse, Vichit Wattanapailin
2002 conf
Engineering Information Systems in the Internet Context
S. Suwanapong, Chutiporn Anutariya, Vilas Wuwongse
2002 J jnl
IEEE Trans. Knowl. Data Eng.
Vilas Wuwongse, Ekawit Nantajeewarawat
2002 J jnl
Comput. Intell.
Nick Cercone, Booncharoen Sirinaovakul, Vilas Wuwongse
2002 conf
WITASI
Kiyoshi Akama, Chutiporn Anutariya, Vilas Wuwongse, Ekawit Nantajeewarawat
2002 B conf
WISE
Pongtawat Chippimolchai, Vilas Wuwongse, Chutiporn Anutariya
2001 conf
Web Intelligence
Vilas Wuwongse, Kiyoshi Akama, Chutiporn Anutariya, Ekawit Nantajeewarawat
2001 J jnl
Comput. Intell.
Ekawit Nantajeewarawat, Vilas Wuwongse
2001 conf
Dublin Core Conference
Chutiporn Anutariya, Vilas Wuwongse, Kiyoshi Akama, Ekawit Nantajeewarawat
2001 J jnl
J. Digit. Inf.
Chutiporn Anutariya, Vilas Wuwongse, Kiyoshi Akama, Ekawit Nantajeewarawat
2001 conf
SWWS
Chutiporn Anutariya, Vilas Wuwongse, Kiyoshi Akama, Vichit Wattanapailin
2001 conf
The Emerging Semantic Web
Chutiporn Anutariya, Vilas Wuwongse, Kiyoshi Akama, Vichit Wattanapailin
2001 C conf
SEKE
Supanat Kitcharoensakkul, Vilas Wuwongse
2001 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Supanat Kitcharoensakkul, Vilas Wuwongse
2001 J jnl
Ann. Softw. Eng.
Supanat Kitcharoensakkul, Vilas Wuwongse
2001 J jnl
IEEE Intell. Syst.
Vilas Wuwongse, Chutiporn Anutariya, Kiyoshi Akama, Ekawit Nantajeewarawat
2000 ed.
SMARTNET
Thongchai Yongchareon, Finn Arve Aagesen, Vilas Wuwongse
2000 conf
EC-Web
Chutiporn Anutariya, Vilas Wuwongse, Ekawit Nantajeewarawat, Kiyoshi Akama
1999 conf
ASIAN
Ekawit Nantajeewarawat, Vilas Wuwongse
1999 conf
MTSummit
Vilas Wuwongse
1999 conf
SMARTNET
Jie Lian, Vilas Wuwongse
1999 conf
SMARTNET
Finn Arve Aagesen, Bjarne E. Helvik, Vilas Wuwongse, Hein Meling, Rolv Bræk, Ulrik Johansen
1997 J jnl
Comput. Artif. Intell.
Vilas Wuwongse, S. Veluppilai
1997 Misc conf
ICCS
Tru H. Cao, Peter N. Creasy, Vilas Wuwongse
1997 conf
DOOD
Ekawit Nantajeewarawat, Vilas Wuwongse
1996 Misc conf
ICCS
Bikash Chandra Ghosh, Vilas Wuwongse
1996 B conf
PRICAI
Vilas Wuwongse, Ekawit Nantajeewarawat
1996 Misc conf
ICCS
Vilas Wuwongse, Cao Hoang Tru
1995 conf
PACIS
Vilas Wuwongse, Somsak Klumklai
1995 Misc conf
ICCS
Bikash Chandra Ghosh, Vilas Wuwongse
1995 J jnl
IEICE Trans. Inf. Syst.
Bikash Chandra Ghosh, Vilas Wuwongse
1994 Misc conf
ICCS
Bikash Chandra Ghosh, Vilas Wuwongse
1993 Misc conf
ICCS
Vilas Wuwongse, Mario Manzano
1993 conf
PACIS
Jian Ma, Vilas Wuwongse
1992 A conf
CAiSE
Bikash Chandra Ghosh, Vilas Wuwongse
1992 conf
Workshop on Conceptual Graphs
Vilas Wuwongse, Bikash Chandra Ghosh
1991 A conf
CAiSE
Vilas Wuwongse, Jian Ma
1983 J jnl
Autom.
Vilas Wuwongse, Shigenobu Kobayashi, Atsunobu Ichikawa
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