Naveen Verma

147 papers A* 6A 3C 3Misc 8Journal 74Unranked 52
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE J. Solid State Circuits
Peter Deaville, Bonan Zhang, Naveen Verma
2025 J jnl
IEEE J. Solid State Circuits
Saion K. Roy, Han-Mo Ou, Mostafa Gamal Ahmed, Peter Deaville, Bonan Zhang, Naveen Verma, Pavan Kumar Hanumolu, Naresh R. Shanbhag
2025 J jnl
IEEE J. Solid State Circuits
Marian Verhelst, Luca Benini, Naveen Verma
2025 J jnl
CoRR
Marian Verhelst, Luca Benini, Naveen Verma
2025 A* conf
ICRA
Hsin Cheng, Elias Veilleux, Zhiwu Zheng, Sigurd Wagner, Naveen Verma, James C. Sturm, Minjie Chen
2024 J jnl
IEEE J. Solid State Circuits
Peter Deaville, Bonan Zhang, Naveen Verma
2024 J jnl
IEEE J. Solid State Circuits
Can Wu, Yue Ma, Suresh Venkatesh, Yoni Mehlman, Murat Ozatay, Sigurd Wagner, James C. Sturm, Naveen Verma
2024 conf
DRC
Yue Ma, Xiaoyang Ma, Sigurd Wagner, Naveen Verma, James C. Sturm
2024 conf
DRC
Nicholas M. Fata, Yue Ma, Sigurd Wagner, Naveen Verma, James C. Sturm
2024 J jnl
IEEE Trans. Robotics
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2024 conf
DRC
Zili Tang, Mohammad Shafiqul Islam, Sigurd Wagner, Naveen Verma, James C. Sturm
2024 A* conf
ICML
Bonan Zhang, Chia-Yu Chen, Naveen Verma
2024 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Christopher Grimm, Jinseok Lee, Naveen Verma
2023 conf
DRC
Yue Ma, Sigurd Wagner, Naveen Verma, James C. Sturm
2023 conf
ESSCIRC
Peter Deaville, Bonan Zhang, Naveen Verma
2023 conf
ESSCIRC
Saion K. Roy, Han-Mo Ou, Mostafa Gamal Ahmed, Peter Deaville, Bonan Zhang, Naveen Verma, Pavan Kumar Hanumolu, Naresh R. Shanbhag
2023 J jnl
Signal Process.
Ryan M. Corey, Sen Tao, Naveen Verma, Andrew C. Singer
2023 A* conf
ICRA
Zhiwu Zheng, Hsin Cheng, Prakhar Kumar, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2023 A conf
IROS
Hsin Cheng, Zhiwu Zheng, Prakhar Kumar, Wali Afridi, Ben Kim, Sigurd Wagner, Naveen Verma, James C. Sturm, Minjie Chen
2023 J jnl
CoRR
Hsin Cheng, Zhiwu Zheng, Prakhar Kumar, Wali Afridi, Ben Kim, Sigurd Wagner, Naveen Verma, James C. Sturm, Minjie Chen
2022 conf
VLSI Technology and Circuits
Peter Deaville, Bonan Zhang, Naveen Verma
2022 J jnl
IEEE Trans. Emerg. Top. Comput.
Jie Lu, Naveen Verma, Niraj K. Jha
2022 conf
RoboSoft
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2022 J jnl
CoRR
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2022 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Christopher Grimm, Naveen Verma
2022 J jnl
CoRR
Christopher Grimm, Naveen Verma
2022 A* conf
ICRA
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2022 J jnl
CoRR
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2022 J jnl
IEEE J. Solid State Circuits
Hongyang Jia, Murat Ozatay, Yinqi Tang, Hossein Valavi, Rakshit Pathak, Jinseok Lee, Naveen Verma
2022 A* conf
DAC
Bonan Zhang, Peter Deaville, Naveen Verma
2022 J jnl
CoRR
Zhiwu Zheng, Hsin Cheng, Prakhar Kumar, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2021 conf
ESSCIRC
Peter Deaville, Bonan Zhang, Lung-Yen Chen, Naveen Verma
2021 conf
ESSDERC
Peter Deaville, Bonan Zhang, Lung-Yen Chen, Naveen Verma
2021 conf
ISSCC
Hongyang Jia, Murat Ozatay, Yinqi Tang, Hossein Valavi, Rakshit Pathak, Jinseok Lee, Naveen Verma
2021 conf
VLSI Circuits
Jinseok Lee, Hossein Valavi, Yinqi Tang, Naveen Verma
2021 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Bonan Zhang, Lung-Yen Chen, Naveen Verma
2021 J jnl
CoRR
Zhiwu Zheng, Prakhar Kumar, Yenan Chen, Hsin Cheng, Sigurd Wagner, Minjie Chen, Naveen Verma, James C. Sturm
2021 Misc conf
HotMobile
Zhuqi Li, Can Wu, Sigurd Wagner, James C. Sturm, Naveen Verma, Kyle Jamieson
2021 conf
ISSCC
Munehiko Nagatani, Nick Van Helleputte, Naveen Verma
2020 J jnl
IEEE J. Solid State Circuits
Hongyang Jia, Hossein Valavi, Yinqi Tang, Jintao Zhang, Naveen Verma
2020 J jnl
Sensors
Levent E. Aygun, Vivek Kumar, Campbell Weaver, Matthew Gerber, Sigurd Wagner, Naveen Verma, Branko Glisic, James C. Sturm
2020 J jnl
CoRR
Randy Bryant, Mark D. Hill, Tom Kazior, Daniel Lee, Jie Liu, Klara Nahrstedt, Vijay Narayanan, Jan M. Rabaey, Hava T. Siegelmann, Naresh R. Shanbhag, Naveen Verma, H.-S. Philip Wong
2020 J jnl
CoRR
Zhuqi Li, Can Wu, Sigurd Wagner, James C. Sturm, Naveen Verma, Kyle Jamieson
2020 J jnl
IEEE Trans. Circuits Syst. I Fundam. Theory Appl.
Yinqi Tang, Hongyang Jia, Naveen Verma
2019 J jnl
IEEE J. Solid State Circuits
Lung-Yen Chen, Sen Tao, Naveen Verma
2019 J jnl
IEEE J. Solid State Circuits
Hossein Valavi, Peter J. Ramadge, Eric Nestler, Naveen Verma
2019 conf
Hot Chips Symposium
Hongyang Jia, Hossein Valavi, Yinqi Tang, Jintao Zhang, Naveen Verma
2019 conf
ISSCC
Reza Pazhouhandeh, Gerard O'Leary, Iliya Weisspapir, David M. Groppe, Xuan-Thuan Nguyen, Karim Abdelhalim, Hamed Mazhab-Jafari, Taufik A. Valiante, Peter L. Carlen, Naveen Verma, Roman Genov
2019 J jnl
IEEE J. Emerg. Sel. Topics Circuits Syst.
Jintao Zhang, Naveen Verma
2019 conf
DRC
Zhiwu Zheng, Levent E. Aygun, Yoni Mehlman, Sigurd Wagner, Naveen Verma, James C. Sturm
2019 J jnl
IEEE Internet Things J.
Murat Ozatay, Naveen Verma
2019 conf
DRC
Yoni Mehlman, Can Wu, Sigurd Wagner, Naveen Verma, James C. Sturm
2019 J jnl
IEEE Trans. Biomed. Circuits Syst.
Levent E. Aygun, Prakhar Kumar, Zhiwu Zheng, Ting-Sheng Chen, Sigurd Wagner, James C. Sturm, Naveen Verma
2019 conf
ISSCC
Levent E. Aygun, Prakhar Kumar, Zhiwu Zheng, Ting-Sheng Chen, Sigurd Wagner, James C. Sturm, Naveen Verma
2019 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Yinqi Tang, Jintao Zhang, Naveen Verma
2019 J jnl
Proc. IEEE
Naresh R. Shanbhag, Naveen Verma, Yongjune Kim, Ameya D. Patil, Lav R. Varshney
2019 Misc conf
ICASSP
Bonan Zhang, Lung-Yen Chen, Naveen Verma
2018 J jnl
CoRR
Hongyang Jia, Yinqi Tang, Hossein Valavi, Jintao Zhang, Naveen Verma
2018 conf
VLSI Circuits
Hossein Valavi, Peter J. Ramadge, Eric Nestler, Naveen Verma
2018 conf
ISSCC
Gerard O'Leary, Mohammad Reza Pazhouhandeh, Michael Chang, David M. Groppe, Taufik A. Valiante, Naveen Verma, Roman Genov
2018 J jnl
IEEE J. Solid State Circuits
Yasmin Afsar, Tiffany Moy, Nicholas Brady, Sigurd Wagner, James C. Sturm, Naveen Verma
2018 conf
CICC
Murat Ozatay, Levent E. Aygun, Hongyang Jia, Prakhar Kumar, Yoni Mehlman, Can Wu, Sigurd Wagner, James C. Sturm, Naveen Verma
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Yinqi Tang, Naveen Verma
2018 J jnl
IEEE J. Solid State Circuits
Hongyang Jia, Naveen Verma
2018 J jnl
IEEE Trans. Computers
Jie Lu, Hongyang Jia, Naveen Verma, Niraj K. Jha
2018 J jnl
IEEE J. Solid State Circuits
Gerard O'Leary, David M. Groppe, Taufik A. Valiante, Naveen Verma, Roman Genov
2018 conf
ISSCC
Naveen Verma, Fatih Hamzaoglu, Makoto Nagata, Leland Chang
2018 J jnl
Sensors
Matthew Gerber, Campbell Weaver, Levent E. Aygun, Naveen Verma, James C. Sturm, Branko Glisic
2017 conf
ISSCC
Yasmin Afsar, Tiffany Moy, Nicholas Brady, Sigurd Wagner, James C. Sturm, Naveen Verma
2017 C conf
ISCAS
Sen Tao, Naveen Verma, Ryan M. Corey, Andrew C. Singer
2017 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Zhuo Wang, Naveen Verma
2017 J jnl
IEEE J. Solid State Circuits
Tiffany Moy, Liechao Huang, Warren Rieutort-Louis, Can Wu, Paul Cuff, Sigurd Wagner, James C. Sturm, Naveen Verma
2017 Misc conf
ICASSP
Soorya Gopalakrishnan, Tiffany Moy, Upamanyu Madhow, Naveen Verma
2017 conf
IWASI
Naveen Verma
2017 J jnl
ACM J. Emerg. Technol. Comput. Syst.
Rasit Onur Topaloglu, Naveen Verma
2017 J jnl
IEEE J. Solid State Circuits
Jintao Zhang, Zhuo Wang, Naveen Verma
2017 C conf
ISCAS
Tiffany Moy, Warren Rieutort-Louis, Liechao Huang, Sigurd Wagner, James C. Sturm, Naveen Verma
2017 J jnl
IEEE J. Emerg. Sel. Topics Circuits Syst.
Josue Sanz-Robinson, Tiffany Moy, Liechao Huang, Warren Rieutort-Louis, Yingzhe Hu, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 conf
ISSCC
Tiffany Moy, Liechao Huang, Warren Rieutort-Louis, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 J jnl
IEEE J. Solid State Circuits
Warren Rieutort-Louis, Tiffany Moy, Zhuo Wang, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Tiffany Moy, Warren Rieutort-Louis, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 conf
VLSI Circuits
Jintao Zhang, Zhuo Wang, Naveen Verma
2016 J jnl
IEEE Trans. Computers
Jie Lu, Naveen Verma, Niraj K. Jha
2016 conf
NOCS
Naveen Verma, Levent E. Aygun, Yasmin Afsar, Yingzhe Hu, Liechao Huang, Tiffany Moy, Josue Sanz-Robinson, Warren Rieutort-Louis, Sigurd Wagner, James C. Sturm
2016 C conf
ISCAS
Tiffany Moy, Sigurd Wagner, Warren Rieutort-Louis, Yingzhe Hu, Liechao Huang, Josue Sanz-Robinson, James C. Sturm, Naveen Verma
2016 J jnl
IEEE J. Solid State Circuits
Josue Sanz-Robinson, Liechao Huang, Tiffany Moy, Warren Rieutort-Louis, Yingzhe Hu, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 J jnl
IEEE Signal Process. Mag.
Zhuo Wang, Jintao Zhang, Naveen Verma
2016 Misc conf
ICASSP
Josue Sanz-Robinson, Liechao Huang, Tiffany Moy, Warren Rieutort-Louis, Yingzhe Hu, Sigurd Wagner, James C. Sturm, Naveen Verma
2016 J jnl
Proc. IEEE
Branko Glisic, Yao Yao, Shue-Ting E. Tung, Sigurd Wagner, James C. Sturm, Naveen Verma
2015 conf
ISSCC
Warren Rieutort-Louis, Tiffany Moy, Zhuo Wang, Sigurd Wagner, James C. Sturm, Naveen Verma
2015 conf
ISSCC
Jintao Zhang, Zhuo Wang, Naveen Verma
2015 J jnl
IEEE J. Solid State Circuits
Liechao Huang, Warren Rieutort-Louis, Alexandra Gualdino, Laura Teagno, Yingzhe Hu, Joao Mouro, Josue Sanz-Robinson, James C. Sturm, Sigurd Wagner, Virginia Chu, João Pedro Conde, Naveen Verma
2015 conf
BioCAS
Naveen Verma, Zhuo Wang, Jintao Zhang
2015 conf
CICC
Jintao Zhang, Liechao Huang, Zhuo Wang, Naveen Verma
2015 conf
VLSIC
Y.-S. Shu, Naveen Verma, K. Yano, T. Someya, H.-J. Yoo, Karthik Vasanth, David T. Blaauw, L. Krishnamurthy, S. J. Kim
2015 J jnl
Proc. IEEE
Naveen Verma, Yingzhe Hu, Liechao Huang, Warren Rieutort-Louis, Josue Sanz-Robinson, Tiffany Moy, Branko Glisic, Sigurd Wagner, James C. Sturm
2015 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Zhuo Wang, Robert E. Schapire, Naveen Verma
2015 J jnl
J. Signal Process. Syst.
Zhuo Wang, Kyong-Ho Lee, Naveen Verma
2015 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Zhuo Wang, Kyong-Ho Lee, Naveen Verma
2015 J jnl
IEEE Trans. Biomed. Circuits Syst.
Zhuo Wang, Jintao Zhang, Naveen Verma
2015 conf
VLSIC
Liechao Huang, Josue Sanz-Robinson, Tiffany Moy, Yingzhe Hu, Warren Rieutort-Louis, Sigurd Wagner, James C. Sturm, Naveen Verma
2015 Misc conf
ICASSP
Zhuo Wang, Jintao Zhang, Naveen Verma
2015 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Mohammed Shoaib, Niraj K. Jha, Naveen Verma
2015 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Sen Tao, Emmanuel Abbe, Naveen Verma
2014 conf
ISSCC
Yingzhe Hu, Liechao Huang, Warren Rieutort-Louis, Josue Sanz-Robinson, Sigurd Wagner, James C. Sturm, Naveen Verma
2014 conf
CICC
Yingzhe Hu, Tiffany Moy, Liechao Huang, Warren Rieutort-Louis, Josue Sanz-Robinson, Sigurd Wagner, James C. Sturm, Naveen Verma
2014 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Mohammed Shoaib, Kyong-Ho Lee, Niraj K. Jha, Naveen Verma
2014 J jnl
IEEE J. Solid State Circuits
Yingzhe Hu, Liechao Huang, Warren Rieutort-Louis, Josue Sanz-Robinson, James C. Sturm, Sigurd Wagner, Naveen Verma
2014 conf
SiPS
Ryan M. Corey, Andrew C. Singer, Sen Tao, Naveen Verma
2014 conf
VLSIC
Liechao Huang, Warren Rieutort-Louis, Alexandra Gualdino, Laura Teagno, Yingzhe Hu, Jaoa Mouro, Josue Sanz-Robinson, James C. Sturm, Sigurd Wagner, Virginia Chu, João Pedro Conde, Naveen Verma
2014 conf
Allerton
Zhuo Wang, Naveen Verma
2014 Misc conf
ICASSP
Zhuo Wang, Robert E. Schapire, Naveen Verma
2014 J jnl
IEEE J. Solid State Circuits
Yingzhe Hu, Warren Rieutort-Louis, Josue Sanz-Robinson, Liechao Huang, Branko Glisic, James C. Sturm, Sigurd Wagner, Naveen Verma
2014 J jnl
J. Signal Process. Syst.
Warren J. Gross, Naveen Verma, Tong Zhang
2013 J jnl
IEEE J. Solid State Circuits
Kyong-Ho Lee, Naveen Verma
2013 conf
ISSCC
Liechao Huang, Warren Rieutort-Louis, Yingzhe Hu, Josue Sanz-Robinson, Sigurd Wagner, James C. Sturm, Naveen Verma
2013 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Mohammed Shoaib, Niraj K. Jha, Naveen Verma
2013 conf
SiPS
Kyong-Ho Lee, Zhuo Wang, Naveen Verma
2012 conf
ESSCIRC
Kyong-Ho Lee, Naveen Verma
2012 conf
CICC
Mohammed Shoaib, Niraj K. Jha, Naveen Verma
2012 A conf
DATE
Mohammed Shoaib, Niraj K. Jha, Naveen Verma
2012 Misc conf
ICASSP
Naveen Verma, Kyong-Ho Lee, Kuk Jin Jang, Ali H. Shoeb
2012 conf
CICC
Yingzhe Hu, Warren Rieutort-Louis, Liechao Huang, Josue Sanz-Robinson, Sigurd Wagner, James C. Sturm, Naveen Verma
2012 J jnl
IEEE J. Emerg. Sel. Topics Circuits Syst.
Benton H. Calhoun, Anantha P. Chandrakasan, Brian P. Otis, Naveen Verma, Hoi-Jun Yoo
2012 conf
VLSIC
Yingzhe Hu, Warren Rieutort-Louis, Josue Sanz-Robinson, Katherine W. Song, James C. Sturm, Sigurd Wagner, Naveen Verma
2012 conf
VLSIC
Liechao Huang, Warren Rieutort-Louis, Yingzhe Hu, Josue Sanz-Robinson, Sigurd Wagner, James C. Sturm, Naveen Verma
2012 J jnl
J. Signal Process. Syst.
Kyong-Ho Lee, Sun-Yuan Kung, Naveen Verma
2011 conf
EMBC
Kyong-Ho Lee, Kuk Jin Jang, Ali H. Shoeb, Naveen Verma
2011 A* conf
DAC
Mohammed Shoaib, Niraj K. Jha, Naveen Verma
2011 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Naveen Verma
2011 Misc conf
ICASSP
Kyong-Ho Lee, Sun-Yuan Kung, Naveen Verma
2011 conf
EMBC
Kuk Jin Jang, Guha Balakrishnan, Zeeshan Syed, Naveen Verma
2010 J jnl
IEEE J. Solid State Circuits
Naveen Verma, Ali H. Shoeb, Jose L. Bohorquez, Joel L. Dawson, John V. Guttag, Anantha P. Chandrakasan
2010 J jnl
Proc. IEEE
Anantha P. Chandrakasan, Denis C. Daly, Daniel F. Finchelstein, Joyce Kwong, Yogesh K. Ramadass, Mahmut E. Sinangil, Vivienne Sze, Naveen Verma
2009 J jnl
IEEE J. Solid State Circuits
Joyce Kwong, Yogesh K. Ramadass, Naveen Verma, Anantha P. Chandrakasan
2009 J jnl
IEEE J. Solid State Circuits
Naveen Verma, Anantha P. Chandrakasan
2009 J jnl
IEEE J. Solid State Circuits
Mahmut E. Sinangil, Naveen Verma, Anantha P. Chandrakasan
2009
Naveen Verma
2008 J jnl
IEEE J. Solid State Circuits
Naveen Verma, Anantha P. Chandrakasan
2008 conf
ISSCC
Joyce Kwong, Yogesh K. Ramadass, Naveen Verma, Markus Koesler, Korbinian Huber, Hans Moormann, Anantha P. Chandrakasan
2008 conf
ISSCC
Naveen Verma, Anantha P. Chandrakasan
2008 conf
ESSCIRC
Mahmut E. Sinangil, Naveen Verma, Anantha P. Chandrakasan
2007 conf
ISSCC
Naveen Verma, Anantha P. Chandrakasan
2007 J jnl
IEEE J. Solid State Circuits
Naveen Verma, Anantha P. Chandrakasan
2006 conf
ISSCC
Naveen Verma, Anantha P. Chandrakasan
2006 A conf
ISLPED
Benton H. Calhoun, Alice Wang, Naveen Verma, Anantha P. Chandrakasan
2005 J jnl
IEEE Trans. Computers
Benton H. Calhoun, Denis C. Daly, Naveen Verma, Daniel F. Finchelstein, David D. Wentzloff, Alice Wang, Seong-Hwan Cho, Anantha P. Chandrakasan
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