Wei Cui

90 papers A* 1B 5C 1Misc 2Journal 75Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Weiqi Zhao, Kejiang Wu, Zijun Zhang, Wenbo Li, Jinzhi Xiang, Qing Shen, Wei Cui
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Zhilong Shao, Shuang Wu, Zhaoyao Chu, Wei Cui
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Chenxi Liao, Qing Shen, Wei Liu, Min Wang, Wei Cui
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Chen Ning, Jing Tian, Xinyue Zhang, Le Zheng, Wei Cui, Siliang Wu
2025 J jnl
IEEE Signal Process. Lett.
Jian Dong, Jinzhi Xiang, Wei Cui, Yulong Liu
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Chen Ning, Jing Tian, Yanjun Zhang, Xiang-Gen Xia, Wei Cui, Siliang Wu
2025 J jnl
IEEE Signal Process. Lett.
Jian Dong, Wei Cui, Yulong Liu
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Jia Wei, Chen Ning, Zicheng Kong, Wei Li, Wei Cui
2025 J jnl
IEEE Trans. Signal Process.
Jinsheng Li, Xu Zhang, Shuang Wu, Wei Cui
2025 J jnl
CoRR
Jinsheng Li, Xu Zhang, Shuang Wu, Wei Cui
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Hantian Wu, Qing Shen, Junwei Zhou, Wei Liu, Wei Li, Wei Cui
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Biao Zhang, Wei Cui, Siliang Wu
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Zicheng Kong, Biao Zhang, Kejiang Wu, Wei Li, Wei Cui, Siliang Wu
2025 J jnl
IEEE Internet Things J.
Li Shen, Wei Cui, Yao Lu, Hao-Peng Zhang
2025 J jnl
IEEE Trans. Veh. Technol.
Zexiang Zhang, Qing Shen, Wei Liu, Kangning Li, Kejiang Wu, Wei Cui
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Kangning Li, Qing Shen, Wei Liu, Zexiang Zhang, Yunpeng Zhao, Wei Li, Wei Cui
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Kangning Li, Qing Shen, Wei Liu, Kejiang Wu, Wei Cui
2024 J jnl
IEEE Trans. Veh. Technol.
Zexiang Zhang, Qing Shen, Wei Liu, Wei Cui
2024 J jnl
IEEE Trans. Signal Process.
Jinsheng Li, Wei Cui, Xu Zhang
2024 J jnl
IEEE Trans. Signal Process.
Jinsheng Li, Wei Cui, Xu Zhang
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Min Wang, Qing Shen, Wei Liu, Wei Cui
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Kejiang Wu, Qing Shen, Wei Cui
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Fengyu Wang, Wei Cui, Jing Tian
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Fengyu Wang, Jing Tian, Wei Cui
2023 J jnl
IEEE Trans. Signal Process.
Zixiang Yang, Qing Shen, Wei Liu, Yonina C. Eldar, Wei Cui
2023 J jnl
IEEE Trans. Signal Process.
Zixiang Yang, Qing Shen, Wei Liu, Yonina C. Eldar, Wei Cui
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Biao Zhang, Kun Li, Wei Cui, Siliang Wu
2022 J jnl
IEEE Signal Process. Lett.
Xiao Lv, Wei Cui, Yulong Liu
2022 J jnl
IEEE Signal Process. Lett.
Zixiang Yang, Qing Shen, Wei Liu, Wei Cui
2022 J jnl
IEEE Trans. Control. Netw. Syst.
Xu Zhang, Marcos M. Vasconcelos, Wei Cui, Urbashi Mitra
2022 J jnl
IEEE Trans. Inf. Theory
Zhongxing Sun, Wei Cui, Yulong Liu
2022 J jnl
IEEE Trans. Signal Process.
Zhongxing Sun, Wei Cui, Yulong Liu
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Kejiang Wu, Wei Cui, Xiaojian Xu
2022 B conf
ISIT
Xiao Lv, Wei Cui, Yulong Liu
2021 J jnl
CoRR
Xiao Lv, Wei Cui, Yulong Liu
2021 J jnl
Signal Process.
Junwei Zhou, Hongbin Li, Wei Cui
2021 J jnl
IEEE Trans. Signal Process.
Yibao Liang, Wei Cui, Qing Shen, Wei Liu, Siliang Wu
2021 J jnl
IEEE Signal Process. Lett.
Yibao Liang, Wei Cui, Qing Shen, Wei Liu, Hantian Wu
2021 J jnl
IEEE Signal Process. Lett.
Hantian Wu, Qing Shen, Wei Cui, Wei Liu
2021 C conf
ISCAS
Zixiang Yang, Qing Shen, Wei Liu, Yonina C. Eldar, Wei Cui
2021 A* conf
NeurIPS
Xiao Lv, Wei Cui, Yulong Liu
2021 B conf
ISIT
Zhongxing Sun, Wei Cui, Yulong Liu
2021 J jnl
CoRR
Zhongxing Sun, Wei Cui, Yulong Liu
2021 J jnl
CoRR
Zhongxing Sun, Wei Cui, Yulong Liu
2021 J jnl
IEEE Trans. Signal Process.
Xu Zhang, Yulong Liu, Wei Cui
2021 J jnl
CoRR
Xiao Lv, Wei Cui, Yulong Liu
2020 J jnl
IEEE Access
Yibao Liang, Wei Liu, Qing Shen, Wei Cui, Siliang Wu
2020 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Wei Cui, Jing Tian, Xiang-Gen Xia, Siliang Wu
2020 Misc conf
ICASSP
Xu Zhang, Marcos M. Vasconcelos, Wei Cui, Urbashi Mitra
2020 J jnl
IEEE Access
Jinzhi Xiang, Wei Cui, Jing Tian
2020 J jnl
CoRR
Xu Zhang, Marcos M. Vasconcelos, Wei Cui, Urbashi Mitra
2020 J jnl
IEEE Signal Process. Lett.
Junwei Zhou, Hongbin Li, Wei Cui
2020 J jnl
CoRR
Xu Zhang, Wei Cui, Yulong Liu
2020 B conf
ISIT
Zhongxing Sun, Wei Cui, Yulong Liu
2020 J jnl
CoRR
Xu Zhang, Yulong Liu, Wei Cui
2020 conf
SAM
Hantian Wu, Qing Shen, Wei Liu, Wei Cui
2019 J jnl
IEEE Trans. Signal Process.
Wei Cui, Xu Zhang, Yulong Liu
2019 J jnl
CoRR
Xu Zhang, Wei Cui, Yulong Liu
2019 conf
GlobalSIP
Yibao Liang, Qing Shen, Wei Cui, Wei Liu
2019 J jnl
IEEE Signal Process. Lett.
Junwei Zhou, Hongbin Li, Wei Cui
2019 J jnl
IEEE J. Sel. Top. Signal Process.
Wei Cui, Qing Shen, Wei Liu, Siliang Wu
2019 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Wei Cui, Shuang Wu, Qing Shen, Jing Tian, Siliang Wu, Xiang-Gen Xia
2019 B conf
ISIT
Zhongxing Sun, Wei Cui, Yulong Liu
2019 J jnl
CoRR
Zhongxing Sun, Wei Cui, Yulong Liu
2019 J jnl
IEEE Trans. Signal Process.
Qing Shen, Wei Liu, Wei Cui, Siliang Wu, Piya Pal
2018 J jnl
CoRR
Wei Cui, Xu Zhang, Yulong Liu
2018 J jnl
Digit. Signal Process.
Shuang Wu, Wei Cui, Siliang Wu
2018 J jnl
IEEE Trans. Signal Process.
Xu Zhang, Wei Cui, Yulong Liu
2017 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Xiang-Gen Xia, Wei Cui, Gang Yang, Siliang Wu
2017 J jnl
CoRR
Xu Zhang, Wei Cui, Yulong Liu
2017 B conf
ISIT
Xu Zhang, Wei Cui, Yulong Liu
2017 J jnl
Digit. Signal Process.
Shuang Wu, Wei Cui, Qing Shen, Jiangang Hou, Siliang Wu
2017 J jnl
IEEE Signal Process. Lett.
Qing Shen, Wei Liu, Wei Cui, Siliang Wu, Yimin D. Zhang, Moeness G. Amin
2017 J jnl
CoRR
Xu Zhang, Wei Cui, Yulong Liu
2017 J jnl
Signal Process.
Qing Shen, Wei Cui, Wei Liu, Siliang Wu, Yimin D. Zhang, Moeness G. Amin
2016 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Jing Tian, Wei Cui, Xiang-Gen Xia, Siliang Wu
2016 J jnl
IEEE Signal Process. Lett.
Qing Shen, Wei Liu, Wei Cui, Siliang Wu
2016 Misc conf
ICASSP
Qing Shen, Wei Liu, Wei Cui, Siliang Wu
2016 J jnl
IEEE Trans. Computational Imaging
Jing Tian, Wei Cui, Xiang-Gen Xia, Siliang Wu
2016 J jnl
Digit. Signal Process.
Wei Cui, Shuang Wu, Jing Tian, Dacheng Liu, Siliang Wu
2016 J jnl
IEEE Access
Qing Shen, Wei Liu, Wei Cui, Siliang Wu
2015 J jnl
CoRR
Jing Tian, Wei Cui, Siliang Wu
2015 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Qing Shen, Wei Liu, Wei Cui, Siliang Wu, Yimin D. Zhang, Moeness G. Amin
2015 conf
EUSIPCO
Qing Shen, Wei Liu, Wei Cui, Siliang Wu, Yimin D. Zhang, Moeness G. Amin
2014 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jing Tian, Wei Cui, Shuang Wu
2014 conf
ChinaSIP
Shuang Wu, Wei Cui, Lin Li, Jiangang Hou, Jing Tian
2014 conf
ChinaSIP
Qing Shen, Wei Liu, Wei Cui, Siliang Wu, Yimin D. Zhang, Moeness G. Amin
2014 conf
DSP
Qing Shen, Wei Liu, Wei Cui, Siliang Wu
2013 J jnl
Sci. China Inf. Sci.
Jing Tian, Wei Cui, Qing Shen, Zixiang Wei, Siliang Wu
2012 J jnl
Sci. China Inf. Sci.
Wei Cui, Jing Tian, Siliang Wu
tests/unit/test_smali_normalization.py
← Index tests/unit/test_smali_normalization.py python
"""Unit tests for smali semantic normalization.

Tests the three normalization levels (category, opcode, opcode_api),
opcode categorization, ACFG feature index mapping, and integration
with MinHash computation.
"""
import pytest

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestCategorizeOpcode:
    """Tests for opcode -> semantic category mapping."""

    def test_arithmetic(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("add-int") == "ALU"
        assert categorize_opcode("mul-long/2addr") == "ALU"
        assert categorize_opcode("neg-int") == "ALU"

    def test_data_movement(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("move-result") == "MOV"
        assert categorize_opcode("const/4") == "CONST"
        assert categorize_opcode("const-string") == "CONST"

    def test_memory_access(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("iget-object") == "LOAD"
        assert categorize_opcode("sput-wide") == "STORE"
        assert categorize_opcode("aget-byte") == "LOAD"

    def test_invocation(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("invoke-virtual") == "CALL"
        assert categorize_opcode("invoke-static") == "CALL"
        assert categorize_opcode("invoke-direct") == "CALL"

    def test_control_flow(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("if-eqz") == "BRANCH"
        assert categorize_opcode("goto") == "JMP"
        assert categorize_opcode("goto/16") == "JMP"
        assert categorize_opcode("return-void") == "RET"

    def test_comparison(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("cmp-long") == "CMP"
        assert categorize_opcode("cmpl-float") == "CMP"
        assert categorize_opcode("cmpg-double") == "CMP"

    def test_conversion(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("int-to-long") == "CONV"
        assert categorize_opcode("float-to-int") == "CONV"

    def test_object_type(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("new-instance") == "ALLOC"
        assert categorize_opcode("check-cast") == "TYPE"
        assert categorize_opcode("instance-of") == "TYPE"

    def test_exception_sync(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("throw") == "EXC"
        assert categorize_opcode("monitor-enter") == "SYNC"

    def test_unknown(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("nop") == "OTHER"


class TestNormalizeInstruction:
    """Tests for single instruction normalization at various levels."""

    def test_category_level(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        assert normalize_instruction("add-int v0, v1, v2", "category") == "ALU"
        assert normalize_instruction("invoke-virtual {p0}, Lcom/Foo;->bar()V", "category") == "CALL"
        assert normalize_instruction("return-void", "category") == "RET"

    def test_opcode_level_strips_width(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # Width variants collapse to same base
        assert normalize_instruction("add-int v0, v1, v2", "opcode") == "add"
        assert normalize_instruction("add-long v0, v2, v4", "opcode") == "add"
        assert normalize_instruction("add-float v0, v1, v2", "opcode") == "add"
        # Addressing modes collapse too
        assert normalize_instruction("add-int/2addr v0, v1", "opcode") == "add"

    def test_opcode_api_invoke(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "invoke-virtual {p0, v0}, Lcom/example/Foo;->bar(I)V"
        )
        assert result == "CALL Lcom/example/Foo;->bar(I)V"

    def test_opcode_api_invoke_no_ref(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # If somehow no method ref is found, fallback to CALL
        assert normalize_instruction("invoke-virtual {v0}") == "CALL"

    def test_opcode_api_field_load(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iget-object v0, p0, Lcom/Foo;->mField:Ljava/lang/String;"
        )
        assert result == "LOAD Lcom/Foo;->mField:Ljava/lang/String;"

    def test_opcode_api_field_store(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iput-object v0, p0, Lcom/Foo;->mField:Ljava/lang/String;"
        )
        assert result == "STORE Lcom/Foo;->mField:Ljava/lang/String;"

    def test_opcode_api_androguard_field_format(self):
        """androguard uses space instead of colon in field references."""
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iget-object v0, p0, Lcom/Foo;->mField Ljava/lang/String;"
        )
        assert result.startswith("LOAD")
        assert "Lcom/Foo;->mField" in result

    def test_opcode_api_new_instance(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "new-instance v0, Lcom/example/MyClass;"
        )
        assert result == "ALLOC Lcom/example/MyClass;"

    def test_opcode_api_const_string(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            'const-string v0, "hello world"'
        )
        assert result == 'CONST_STR "hello world"'

    def test_opcode_api_const_string_jumbo(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            'const-string/jumbo v0, "large string"'
        )
        assert result == 'CONST_STR "large string"'

    def test_opcode_api_fallback_to_category(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # Non-special instructions fall back to category
        assert normalize_instruction("add-int v0, v1, v2") == "ALU"
        assert normalize_instruction("return-void") == "RET"
        assert normalize_instruction("nop") == "OTHER"

    def test_empty_input(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        assert normalize_instruction("") == ""
        assert normalize_instruction("   ") == ""


class TestNormalizeMethodBody:
    """Tests for full method body normalization."""

    def test_filters_directives_labels_comments(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        body = """\
.locals 2
# comment
:label_0
add-int v0, v1, v2
.line 42
invoke-virtual {p0}, Lcom/Foo;->bar()V
return-void
"""
        result = normalize_method_body(body, "category")
        assert result == ["ALU", "CALL", "RET"]

    def test_opcode_api_preserves_api_refs(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        body = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->setX(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
return-void
"""
        result = normalize_method_body(body, "opcode_api")
        assert result[0] == "CONST"
        assert result[1] == "CALL Lcom/Foo;->setX(I)V"
        assert result[2] == "LOAD Lcom/Foo;->name:Ljava/lang/String;"
        assert result[3] == "RET"

    def test_empty_body(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        assert normalize_method_body("") == []
        assert normalize_method_body("\n\n") == []


class TestNormalizationWithMinHash:
    """Integration tests: normalization + MinHash computation."""

    def test_minhash_returns_signature(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
add-int v2, v0, v1
return-void
"""
        sig = compute_minhash(body)
        assert sig is not None
        assert len(sig) == 64
        assert all(0 <= v < 256 for v in sig)

    def test_minhash_register_invariance(self):
        """Same operations with different registers should produce identical signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_a = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
add-int v2, v0, v1
return-void
"""
        body_b = """\
const/4 v3, 0x0
invoke-virtual {p1, v3}, Lcom/Foo;->bar(I)V
iget-object v4, p1, Lcom/Foo;->name:Ljava/lang/String;
add-int v5, v3, v4
return-void
"""
        sig_a = compute_minhash(body_a)
        sig_b = compute_minhash(body_b)
        assert sig_a == sig_b

    def test_minhash_width_invariance(self):
        """Width variants of same operations should produce identical signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_int = """\
add-int v0, v1, v2
sub-int v3, v0, v1
mul-int v4, v0, v3
return v4
"""
        body_long = """\
add-long v0, v2, v4
sub-long v6, v0, v2
mul-long v8, v0, v6
return-wide v8
"""
        sig_int = compute_minhash(body_int)
        sig_long = compute_minhash(body_long)
        # Both normalize to ALU, ALU, ALU, RET -> identical
        assert sig_int == sig_long

    def test_minhash_different_apis_differ(self):
        """Methods calling different APIs should produce different signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_a = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/crypto/AES;->encrypt([B)[B
invoke-virtual {v0}, Ljava/io/OutputStream;->write([B)V
return-void
"""
        body_b = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Ljava/lang/String;->length()I
invoke-virtual {v0}, Ljava/io/PrintStream;->println(I)V
return-void
"""
        sig_a = compute_minhash(body_a)
        sig_b = compute_minhash(body_b)
        assert sig_a != sig_b

    def test_minhash_too_few_instructions(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        assert compute_minhash("return-void\nnop") is None


class TestACFGBlockFeatures:
    """Tests for per-block ACFG feature extraction via smali_cfg."""

    def test_simple_linear_method(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
add-int v0, v1, v2
invoke-virtual {p0}, Lcom/Foo;->bar()V
return-void
"""
        metrics = compute_cfg_metrics(body)
        assert metrics.block_count >= 1
        assert len(metrics.block_features) == metrics.block_count
        # Each feature vector has 8 elements
        for feat in metrics.block_features:
            assert len(feat) == 8

    def test_branching_method_has_multiple_blocks(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
const/4 v0, 0x0
if-eqz v0, :cond_0
invoke-virtual {p0}, Lcom/Foo;->a()V
goto :goto_0
:cond_0
invoke-virtual {p0}, Lcom/Foo;->b()V
:goto_0
return-void
"""
        metrics = compute_cfg_metrics(body)
        assert metrics.block_count >= 3
        assert len(metrics.block_features) == metrics.block_count

    def test_feature_vector_arithmetic_count(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
add-int v0, v1, v2
sub-int v3, v0, v1
mul-int v4, v0, v3
return v4
"""
        metrics = compute_cfg_metrics(body)
        assert len(metrics.block_features) == 1
        feat = metrics.block_features[0]
        # feat[0] = instr_count (4), feat[1] = arithmetic (3)
        assert feat[0] == 4
        assert feat[1] >= 3  # 3 ALU ops

    def test_feature_vector_call_count(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
invoke-virtual {p0}, Lcom/A;->a()V
invoke-static {v0}, Lcom/B;->b()V
return-void
"""
        metrics = compute_cfg_metrics(body)
        feat = metrics.block_features[0]
        # feat[4] = call count
        assert feat[4] == 2