Ion I. Mandoiu

172 papers A* 2A 7B 8C 6Misc 5Journal 71Unranked 53
YearRankTypeTitle / Venue / Authors
2026 ed.
ICCABS
Mohammed Alser, Mukul S. Bansal, Yury Khudyakov, Serghei Mangul, Ion I. Mandoiu, Marmar Moussa, Murray Patterson, Sanguthevar Rajasekaran, Pavel Skums, Shibu Yooseph, Alexander Zelikovsky
2026 J jnl
Bioinform.
Rye Howard-Stone, Ion I. Mandoiu
2025 conf
ICCABS
Rye Howard-Stone, Ion I. Mandoiu
2025 ed.
ICCABS
Mukul S. Bansal, Wei Chen, Yury Khudyakov, Ion I. Mandoiu, Marmar Moussa, Murray Patterson, Sanguthevar Rajasekaran, Pavel Skums, Sharma V. Thankachan, Alexander Zelikovsky
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Marmar R. Moussa, Sanguthevar Rajasekaran, Pavel Skums, Sharma V. Thankachan, Alex Zelikovsky
2023 J jnl
J. Comput. Biol.
Sahar Al Seesi, Anas Al-Okaily, Tatiana Shcheglova, Elham Sherafat, Fahad Alqahtani, Adam T. Hagymasi, Anupinder Kaur, Pramod Kumar Srivastava, Ion I. Mandoiu
2023 J jnl
J. Comput. Biol.
Mukul S. Bansal, Ion I. Mandoiu, Marmar Moussa, Murray Patterson, Sanguthevar Rajasekaran, Pavel Skums, Alexander Zelikovsky
2022 ed.
ICCABS
Mukul S. Bansal, Ion I. Mandoiu, Marmar Moussa, Murray Patterson, Sanguthevar Rajasekaran, Pavel Skums, Alexander Zelikovsky
2022 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Saurav Dhar, Chengchen Zhang, Ion I. Mandoiu, Mukul S. Bansal
2021 ed.
ICCABS
Sumit Kumar Jha, Ion I. Mandoiu, Sanguthevar Rajasekaran, Pavel Skums, Alex Zelikovsky
2021 J jnl
J. Comput. Biol.
Filipp Rondel, Roya Hosseini, Bikram Sahoo, Sergey Knyazev, Igor Mandric, Frank Stewart, Ion I. Mandoiu, Bogdan Pasaniuc, Yuri Porozov, Alexander Zelikovsky
2021 J jnl
J. Comput. Biol.
Marmar Moussa, Ion I. Mandoiu
2021 J jnl
J. Comput. Biol.
Sumit Kumar Jha, Ion I. Mandoiu, Sanguthevar Rajasekaran, Pavel Skums, Alexander Zelikovsky
2021 J jnl
J. Comput. Biol.
Ion I. Mandoiu, T. M. Murali, Giri Narasimhan, Sanguthevar Rajasekaran, Pavel Skums, Alexander Zelikovsky
2021 Misc conf
PSB
Samuel Sledzieski, Chengchen Zhang, Ion I. Mandoiu, Mukul S. Bansal
2020 ed.
ISBRA
Zhipeng Cai, Ion I. Mandoiu, Giri Narasimhan, Pavel Skums, Xuan Guo
2020 ed.
ICCABS
Ion I. Mandoiu, T. M. Murali, Giri Narasimhan, Sanguthevar Rajasekaran, Pavel Skums, Alexander Zelikovsky
2020 conf
ICCABS
Marmar Moussa, Ion I. Mandoiu
2020 conf
ISBRA
Filipp Rondel, Roya Hosseini, Bikram Sahoo, Sergey Knyazev, Igor Mandric, Frank Stewart, Ion I. Mandoiu, Bogdan Pasaniuc, Alex Zelikovsky
2020 conf
ISBRA
Fahad Alqahtani, Ion I. Mandoiu
2020 conf
ISBRA
Marmar Moussa, Ion I. Mandoiu
2020 J jnl
BMC Bioinform.
Elham Sherafat, Jordan Force, Ion I. Mandoiu
2020 J jnl
J. Comput. Biol.
Fahad Alqahtani, Ion I. Mandoiu
2020 conf
ISBRA
Saurav Dhar, Chengchen Zhang, Ion I. Mandoiu, Mukul S. Bansal
2019 J jnl
PeerJ Prepr.
David Laehnemann, Johannes Köster, Ewa Szczurek, Davis J. McCarthy, Stephanie C. Hicks, Mark D. Robinson, Catalina A. Vallejos, Niko Beerenwinkel, Kieran R. Campbell, Ahmed Mahfouz, Luca Pinello, Pavel Skums, Alexandros Stamatakis, Camille Stephan-Otto Attolini, Samuel Aparicio, Jasmijn A. Baaijens, Marleen Balvert, Buys de Barbanson, Antonio Cappuccio, Giacomo Corleone, Bas E. Dutilh, Maria Florescu, Victor Guryev, Rens Holmer, Katharina Jahn, Thamar Jessurun Lobo, Emma M. Keizer, Indu Khatri, Szymon M. Kielbasa, Jan O. Korbel, Alexey M. Kozlov, Tzu-Hao Kuo, Boudewijn P. F. Lelieveldt, Ion I. Mandoiu, John C. Marioni, Tobias Marschall, Felix Mölder, Amir Niknejad, Lukasz Raczkowski, Marcel J. T. Reinders, Jeroen de Ridder, Antoine-Emmanuel Saliba, Antonios Somarakis, Oliver Stegle, Fabian J. Theis, Huan Yang, Alex Zelikovsky, Alice C. McHardy, Benjamin J. Raphael, Sohrab P. Shah, Alexander Schönhuth
2019 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Pavel Skums, Alexander Zelikovsky
2019 J jnl
J. Comput. Biol.
Marmar Moussa, Ion I. Mandoiu
2019 conf
ICCABS
Fahad Alqahtani, Ion I. Mandoiu
2019 conf
BCB
Yury Khudyakov, Ion I. Mandoiu, Pavel Skums, Alexander Zelikovsky
2018 conf
BCB
Yury Khudyakov, Ion I. Mandoiu, Pavel Skums, Alexander Zelikovsky
2018 conf
ISBRA
Marmar Moussa, Ion I. Mandoiu
2018 ch.
Handbook of Approximation Algorithms and Metaheuristics (1)
Andrew B. Kahng, Ion I. Mandoiu, Alexander Zelikovsky
2018 ch.
Handbook of Approximation Algorithms and Metaheuristics (2)
Ion I. Mandoiu, Alex Olshevsky, Alexander Zelikovsky
2018 conf
ICCABS
Marmar Moussa, Ion I. Mandoiu
2018 conf
ICCABS
Fahad Alqahtani, Ion I. Mandoiu
2017 conf
BCB
Yury Khudyakov, Ion I. Mandoiu, Pavel Skums, Alexander Zelikovsky
2017 J jnl
Bioinform.
Igor Mandric, Yvette Temate-Tiagueu, Tatiana Shcheglova, Sahar Al Seesi, Alex Zelikovsky, Ion I. Mandoiu
2017 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Robert W. Harrison, Ion I. Mandoiu, Alexander Zelikovsky
2017 J jnl
BMC Bioinform.
Ekaterina Gerasimov, Alex Zelikovsky, Ion I. Mandoiu, Yurij Ionov
2017 conf
ISBRA
Igor Mandric, Sergey Knyazev, Cory Padilla, Frank Stewart, Ion I. Mandoiu, Alex Zelikovsky
2016 conf
ICCABS
Tyler Daddio, Ion I. Mandoiu
2015 ed.
ISBRA
Robert W. Harrison, Yaohang Li, Ion I. Mandoiu
2015 J jnl
Bioinform.
Pavel Skums, Alexander Artyomenko, Olga Glebova, Sumathi Ramachandran, Ion I. Mandoiu, David S. Campo, Zoya Dimitrova, Alex Zelikovsky, Yuri Khudyakov
2015 conf
ICCABS
Ekaterina Nenastyeva, Alex Zelikovsky, Yurij Ionov, Ion I. Mandoiu
2015 J jnl
J. Chem. Inf. Model.
Mai Hamdalla, Sanguthevar Rajasekaran, David F. Grant, Ion I. Mandoiu
2014 conf
ICCABS
Adrian Caciula, Olga Glebova, Alexander Artyomenko, Serghei Mangul, James Lindsay, Ion I. Mandoiu, Alex Zelikovsky
2014 J jnl
BMC Bioinform.
Edward Hemphill, James Lindsay, Chih Lee, Ion I. Mandoiu, Craig E. Nelson
2014 J jnl
BMC Bioinform.
James Lindsay, Hamed Salooti, Ion I. Mandoiu, Alexander Zelikovsky
2014 conf
ICCABS
Igor Mandric, James Lindsay, Ion I. Mandoiu, Alex Zelikovsky
2013 J jnl
J. Chem. Inf. Model.
Mai Hamdalla, Ion I. Mandoiu, Dennis W. Hill, Sanguthevar Rajasekaran, David F. Grant
2013 conf
ICCABS
Nicholas Mancuso, Alexander Artyomenko, Alex Zelikovsky, Pavel Skums, Ion I. Mandoiu
2013 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Jianxin Wang, Alexander Zelikovsky
2013 J jnl
J. Chem. Inf. Model.
Lochana C. Menikarachchi, Dennis W. Hill, Mai Hamdalla, Ion I. Mandoiu, David F. Grant
2013 conf
ICCABS
Adrian Caciula, Alex Zelikovsky, Serghei Mangul, James Lindsay, Ion I. Mandoiu
2013 conf
ICCABS
Pavel Skums, Olga Glebova, Alex Zelikovsky, Ion I. Mandoiu, Yuri Khudyakov
2013 J jnl
BMC Bioinform.
Pavel Skums, Nicholas Mancuso, Alexander Artyomenko, Bassam Tork, Ion I. Mandoiu, Yuri Khudyakov, Alex Zelikovsky
2013 conf
ICCABS
Gabriel Ilie, Alex Zelikovsky, Ion I. Mandoiu
2013 conf
ICCABS
James Lindsay, Craig E. Nelson, Ion I. Mandoiu
2013 conf
ICCABS
Serghei Mangul, Sahar Al Seesi, Ion I. Mandoiu, Adrian Caciula, Alex Zelikovsky, Dumitru Brinza
2013 conf
ICCABS
Alexander Artyomenko, Nicholas Mancuso, Alex Zelikovsky, Pavel Skums, Ion I. Mandoiu
2012 ed.
ISBRA
Leonidas G. Bleris, Ion I. Mandoiu, Russell Schwartz, Jianxin Wang
2012 J jnl
BMC Bioinform.
Jianer Chen, Ion I. Mandoiu, Raj Sunderraman, Jianxin Wang, Alexander Zelikovsky
2012 ed.
ICCABS
Sorin Istrail, Ion I. Mandoiu, Mihai Pop, Sanguthevar Rajasekaran, John L. Spouge
2012 J jnl
Silico Biol.
Serghei Mangul, Adrian Caciula, Olga Glebova, Ion I. Mandoiu, Alex Zelikovsky
2012 conf
ICCABS
James Lindsay, Ion I. Mandoiu, Hamed Salooti, Alexander Zelikovsky
2012 J jnl
Silico Biol.
Nicholas Mancuso, Bassam Tork, Pavel Skums, Lilia Ganova-Raeva, Ion I. Mandoiu, Alex Zelikovsky
2012 conf
BCB
James Lindsay, Hamed Salooti, Alexander Zelikovsky, Ion I. Mandoiu
2012 J jnl
BMC Bioinform.
Serghei Mangul, Adrian Caciula, Dumitru Brinza, Ion I. Mandoiu, Alex Zelikovsky
2012 conf
ICCABS
Mai Hamdalla, David F. Grant, Ion I. Mandoiu, Dennis W. Hill, Sanguthevar Rajasekaran, Reda A. Ammar
2012 conf
ICCABS
Nicholas Mancuso, Bassam Tork, Pavel Skums, Lilia Ganova-Raeva, Ion I. Mandoiu, Alexander Zelikovsky
2012 conf
ICCABS
Rachel J. O'Neill, Ion I. Mandoiu, Mazhar I. Khan, Craig Obergfell, Hongjun Wang, Andrew Bligh, Bassam Tork, Nicholas Mancuso, Alexander Zelikovsky
2012 conf
ICCABS
Sahar Al Seesi, Ion I. Mandoiu
2012 conf
ICCABS
Serghei Mangul, Adrian Caciula, Ion I. Mandoiu, Alexander Zelikovsky
2011 conf
ISBRA
Marius Nicolae, Ion I. Mandoiu
2011 J jnl
Algorithms Mol. Biol.
Marius Nicolae, Serghei Mangul, Ion I. Mandoiu, Alex Zelikovsky
2011 ed.
ICCABS
Ion I. Mandoiu, Satoru Miyano, Teresa M. Przytycka, Sanguthevar Rajasekaran
2011 J jnl
BMC Bioinform.
Irina Astrovskaya, Bassam Tork, Serghei Mangul, Kelly Westbrooks, Ion I. Mandoiu, Peter Balfe, Alex Zelikovsky
2011 J jnl
BMC Bioinform.
Jorge Duitama, Justin Kennedy, Sanjiv Dinakar, Yözen Hernández, Yufeng Wu, Ion I. Mandoiu
2011 C conf
WABI
Serghei Mangul, Irina Astrovskaya, Marius Nicolae, Bassam Tork, Ion I. Mandoiu, Alexander Zelikovsky
2011 J jnl
INFORMS J. Comput.
Bogdan Pasaniuc, Robert S. Garfinkel, Ion I. Mandoiu, Alexander Zelikovsky
2011 conf
ICCABS
Marius Nicolae, Ion I. Mandoiu
2011 conf
ICCABS
James Lindsay, J. Zhang, T. Farnham, Y. Wu, Ion I. Mandoiu, Rachel J. O'Neill, Hamed Salooti, E. Bullwinkel, Alexander Zelikovsky
2011 conf
ICCABS
Irina Astrovskaya, Bassam Tork, Serghei Mangul, Kelly Westbrooks, Ion I. Mandoiu, Peter Balfe, Alexander Zelikovsky
2011 conf
BIBM Workshops
Serghei Mangul, Adrian Caciula, Ion I. Mandoiu, Alexander Zelikovsky
2011 conf
ICCABS
Jorge Duitama, Pramod Kumar Srivastava, Ion I. Mandoiu
2011 conf
BIBM Workshops
Nicholas Mancuso, Bassam Tork, Pavel Skums, Ion I. Mandoiu, Alexander Zelikovsky
2011 conf
ICCABS
Rachel J. O'Neill, James Lindsay, Dawn Carone, Sahar Al Seesi, Thomas Heider, Ion I. Mandoiu, Andrew Pask
2010 C conf
WABI
Marius Nicolae, Serghei Mangul, Ion I. Mandoiu, Alexander Zelikovsky
2010 conf
Structure Discovery in Biology: Motifs, Networks & Phylogenies
Marius Nicolae, Serghei Mangul, Ion I. Mandoiu, Alex Zelikovsky
2010 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Giri Narasimhan, Yi Pan, Yanqing Zhang
2009 ed.
ISBRA
Ion I. Mandoiu, Giri Narasimhan, Yanqing Zhang
2009 J jnl
CoRR
Justin Kennedy, Ion I. Mandoiu, Bogdan Pasaniuc
2009 conf
BICoB
Ion I. Mandoiu
2009 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Yi Pan, Raj Sunderraman, Alexander Zelikovsky
2009 conf
ISBRA
Bogdan Pasaniuc, Justin Kennedy, Ion I. Mandoiu
2009 J jnl
J. Comput. Biol.
Jin Jun, Paul Ryvkin, Edward Hemphill, Ion I. Mandoiu, Craig E. Nelson
2008 ed.
ISBRA
Ion I. Mandoiu, Raj Sunderraman, Alexander Zelikovsky
2008 conf
RECOMB-CG
Jin Jun, Paul Ryvkin, Edward Hemphill, Ion I. Mandoiu, Craig E. Nelson
2008 C conf
BIBE
Sudha Balla, Sanguthevar Rajasekaran, Ion I. Mandoiu
2008 J jnl
J. Comput. Biol.
Justin Kennedy, Ion I. Mandoiu, Bogdan Pasaniuc
2008 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Yi Pan, Alexander Zelikovsky
2008 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Alexander Gusev, Ion I. Mandoiu, Bogdan Pasaniuc
2008 B conf
APBC
Bhaskar DasGupta, Jin Jun, Ion I. Mandoiu
2008 ed.
SLIP
Ion I. Mandoiu, Andrew A. Kennings
2007 ed.
ISBRA
Ion I. Mandoiu, Alexander Zelikovsky
2007 J jnl
Int. J. Found. Comput. Sci.
Sudha Balla, Sanguthevar Rajasekaran, Ion I. Mandoiu
2007 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Andrew B. Kahng, Ion I. Mandoiu, Xu Xu, Alexander Zelikovsky
2007 C conf
WABI
Justin Kennedy, Ion I. Mandoiu, Bogdan Pasaniuc
2007 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ion I. Mandoiu, Yi Pan, Alexander Zelikovsky
2007 ch.
Handbook of Approximation Algorithms and Metaheuristics
Ion I. Mandoiu, Andrew B. Kahng, Christoph Albrecht, Alexander Zelikovsky
2007 ch.
Handbook of Approximation Algorithms and Metaheuristics
Ion I. Mandoiu, Andrew B. Kahng, Alexander Zelikovsky
2007 ch.
Handbook of Approximation Algorithms and Metaheuristics
Ion I. Mandoiu, Alex Olshevsky, Alexander Zelikovsky
2007 J jnl
J. Univers. Comput. Sci.
Gruia Calinescu, Ion I. Mandoiu, Alexander Zelikovsky, Marius Zimand
2007 ed.
SLIP
Andrew A. Kennings, Ion I. Mandoiu
2006 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Andrew B. Kahng, Ion I. Mandoiu, Sherief Reda, Xu Xu, Alexander Zelikovsky
2006 J jnl
J. Comput. Biol.
Ion I. Mandoiu, Dragos Trinca
2006 Misc conf
International Conference on Computational Science (2)
Ion I. Mandoiu, Claudia Prajescu
2006 conf
EMBC
Bogdan Pasaniuc, Ion I. Mandoiu
2006 Misc conf
International Conference on Computational Science (2)
Mohammad Taghi Hajiaghayi, Kamal Jain, Lap Chi Lau, Ion I. Mandoiu, Alexander Russell, Vijay V. Vazirani
2006 J jnl
Wirel. Networks
Ernst Althaus, Gruia Calinescu, Ion I. Mandoiu, Sushil K. Prasad, N. Tchervenski, Alexander Zelikovsky
2005 J jnl
Bioinform.
Bhaskar DasGupta, Kishori M. Konwar, Ion I. Mandoiu, Alexander A. Shvartsman
2005 J jnl
CoRR
Ion I. Mandoiu, Dragos Trinca
2005 B conf
CPM
Ion I. Mandoiu, Dragos Trinca
2005 J jnl
CoRR
Ion I. Mandoiu, Claudia Prajescu
2005 J jnl
CoRR
Bhaskar DasGupta, Kishori M. Konwar, Ion I. Mandoiu, Alexander A. Shvartsman
2005 Misc conf
International Conference on Computational Science (2)
Bhaskar DasGupta, Kishori M. Konwar, Ion I. Mandoiu, Alexander A. Shvartsman
2005 J jnl
Int. J. Bioinform. Res. Appl.
Bhaskar DasGupta, Kishori M. Konwar, Ion I. Mandoiu, Alexander A. Shvartsman
2005 J jnl
Algorithmica
Marek Karpinski, Ion I. Mandoiu, Alexander Olshevsky, Alexander Zelikovsky
2005 J jnl
CoRR
Ion I. Mandoiu, Claudia Prajescu, Dragos Trinca
2005 Misc conf
International Conference on Computational Science (2)
Ion I. Mandoiu, Claudia Prajescu, Dragos Trinca
2005 J jnl
Trans. Comp. Sys. Biology
Ion I. Mandoiu, Claudia Prajescu, Dragos Trinca
2005 B conf
APBC
Kishori M. Konwar, Ion I. Mandoiu, Alexander Russell, Alexander A. Shvartsman
2005 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Puneet Gupta, Andrew B. Kahng, Ion I. Mandoiu, Puneet Sharma
2005 J jnl
CoRR
Christoph Albrecht, Andrew B. Kahng, Ion I. Mandoiu, Alexander Zelikovsky
2005 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Hongyu Chen, Chung-Kuan Cheng, Andrew B. Kahng, Ion I. Mandoiu, Qinke Wang, Bo Yao
2004 J jnl
CoRR
Kishori M. Konwar, Ion I. Mandoiu, Alexander Russell, Alexander A. Shvartsman
2004 conf
ISPD
Andrew B. Kahng, Ion I. Mandoiu, Qinke Wang, Xu Xu, Alexander Zelikovsky
2004 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Andrew B. Kahng, Bao Liu, Ion I. Mandoiu
2004 J jnl
J. Comput. Biol.
Andrew B. Kahng, Ion I. Mandoiu, Pavel A. Pevzner, Sherief Reda, Alexander Zelikovsky
2004 J jnl
Mob. Networks Appl.
Gruia Calinescu, Ion I. Mandoiu, Peng-Jun Wan, Alexander Zelikovsky
2003 C conf
ICCD
Andrew B. Kahng, Ion I. Mandoiu, Sherief Reda, Xu Xu, Alexander Zelikovsky
2003 B conf
RECOMB
Andrew B. Kahng, Ion I. Mandoiu, Pavel A. Pevzner, Sherief Reda, Alexander Zelikovsky
2003 conf
SLIP
Hongyu Chen, Chung-Kuan Cheng, Andrew B. Kahng, Ion I. Mandoiu, Qinke Wang
2003 A conf
ICCAD
Andrew B. Kahng, Ion I. Mandoiu, Sherief Reda, Xu Xu, Alexander Zelikovsky
2003 conf
ASP-DAC
Andrew B. Kahng, Ion I. Mandoiu, Alexander Zelikovsky
2003 B conf
WADS
Marek Karpinski, Ion I. Mandoiu, Alexander Olshevsky, Alexander Zelikovsky
2003 A conf
ICCAD
Puneet Gupta, Andrew B. Kahng, Ion I. Mandoiu, Puneet Sharma
2003 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Charles J. Alpert, Andrew B. Kahng, Bao Liu, Ion I. Mandoiu, Alexander Zelikovsky
2003 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Christoph Albrecht, Andrew B. Kahng, Bao Liu, Ion I. Mandoiu, Alexander Zelikovsky
2003 B conf
WCNC
Ernst Althaus, Gruia Calinescu, Ion I. Mandoiu, Sushil K. Prasad, N. Tchervenski, Alexander Zelikovsky
2003 B conf
GLOBECOM
Gruia Calinescu, Cristina G. Fernandes, Ion I. Mandoiu, Alexander Olshevsky, K. Yang, Alexander Zelikovsky
2003 A conf
ICCAD
Hongyu Chen, Chung-Kuan Cheng, Andrew B. Kahng, Ion I. Mandoiu, Qinke Wang, Bo Yao
2002 J jnl
J. Algorithms
Kamal Jain, Ion I. Mandoiu, Vijay V. Vazirani, David P. Williamson
2002 conf
Information Systems: The e-Business Challenge
C. Bandela, Yu Chen, Andrew B. Kahng, Ion I. Mandoiu, Alexander Zelikovsky
2002 C conf
WABI
Andrew B. Kahng, Ion I. Mandoiu, Pavel A. Pevzner, Sherief Reda, Alexander Zelikovsky
2002 conf
ASP-DAC/VLSI Design
Christoph Albrecht, Andrew B. Kahng, Ion I. Mandoiu, Alexander Zelikovsky
2002 A conf
ICCAD
Andrew B. Kahng, Bao Liu, Ion I. Mandoiu
2002 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Feodor F. Dragan, Andrew B. Kahng, Ion I. Mandoiu, Sudhakar Muddu, Alexander Zelikovsky
2002 conf
IFIP TCS
Gruia Calinescu, Ion I. Mandoiu, Alexander Zelikovsky
2001 A conf
ICCAD
Charles J. Alpert, Andrew B. Kahng, Bao Liu, Ion I. Mandoiu, Alexander Zelikovsky
2001 B conf
WADS
Feodor F. Dragan, Andrew B. Kahng, Ion I. Mandoiu, Sudhakar Muddu, Alexander Zelikovsky
2001 J jnl
SIAM J. Discret. Math.
Alexander Zelikovsky, Ion I. Mandoiu
2001 A* conf
SODA
Alexander Zelikovsky, Ion I. Mandoiu
2001 conf
ASP-DAC
Feodor F. Dragan, Andrew B. Kahng, Ion I. Mandoiu, Sudhakar Muddu, Alexander Zelikovsky
2001 conf
DIAL-M
Gruia Calinescu, Ion I. Mandoiu, Peng-Jun Wan, Alexander Zelikovsky
2000 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Ion I. Mandoiu, Vijay V. Vazirani, Joseph L. Ganley
2000 J jnl
Inf. Process. Lett.
Ion I. Mandoiu, Alexander Zelikovsky
2000 A conf
ICCAD
Feodor F. Dragan, Andrew B. Kahng, Ion I. Mandoiu, Sudhakar Muddu, Alexander Zelikovsky
1999 A* conf
SODA
Kamal Jain, Ion I. Mandoiu, Vijay V. Vazirani, David P. Williamson
1999 A conf
ICCAD
Ion I. Mandoiu, Vijay V. Vazirani, Joseph L. Ganley
1998 J jnl
Inf. Process. Lett.
Ion I. Mandoiu
1998 J jnl
IEEE Trans. Inf. Theory
Kamal Jain, Ion I. Mandoiu, Vijay V. Vazirani
tests/unit/test_apk_cfg_features.py
← Index tests/unit/test_apk_cfg_features.py python
"""
Unit tests for APK CFG feature parity with the Binary Ninja pipeline.

Tests advanced CFG features computed from smali (topology hash, MD-index,
WL-MinHash, prime product, packed adjacency, block features export) and
the slimmed similarity table.

All tests use mocked smali input — no JADX/apktool/Java required.
"""
import pytest

from redb.extractors.decompiler.apk.smali_cfg import (
    SmaliCFGMetrics,
    compute_cfg_metrics,
)
from redb.extractors.decompiler.apk.method_extractor import (
    SMALI_OP_PRIMES,
    compute_prime_product_smali,
    count_call_instructions,
)

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


# ===================================================================
# Sample smali bodies for testing
# ===================================================================

# Simple linear method: 3 instructions, 1 block
SMALI_LINEAR = """\
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
    return-void
"""

# Diamond CFG: if-else with two paths merging
SMALI_DIAMOND = """\
    const/4 v0, 0x1
    if-eqz v0, :cond_0
    invoke-virtual {p0}, Lcom/Foo;->pathA()V
    goto :goto_0
    :cond_0
    invoke-virtual {p0}, Lcom/Foo;->pathB()V
    :goto_0
    return-void
"""

# Loop: a back edge from goto to a label before it
SMALI_LOOP = """\
    const/4 v0, 0x0
    :loop_start
    add-int/lit8 v0, v0, 0x1
    if-lt v0, v1, :loop_start
    return-void
"""

# Multi-block with several invoke calls
SMALI_MULTI_CALL = """\
    invoke-virtual {p0}, Lcom/Foo;->a()V
    invoke-static {v0}, Lcom/Bar;->b(I)V
    invoke-direct {p0, v1}, Lcom/Baz;-><init>(I)V
    const/4 v0, 0x0
    return-void
"""


# ===================================================================
# TestSmaliCFGMetricsAdvanced — new fields in SmaliCFGMetrics
# ===================================================================

class TestSmaliCFGMetricsAdvanced:
    """Test that advanced CFG fields are populated by compute_cfg_metrics."""

    def test_topology_hash_is_bytes(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert isinstance(m.cfg_topology_hash, bytes)
        assert len(m.cfg_topology_hash) == 16

    def test_topology_hash_nonzero_for_multiblock(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.cfg_topology_hash != b'\x00' * 16

    def test_topology_hash_zero_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.cfg_topology_hash == b'\x00' * 16

    def test_identical_cfg_same_topology_hash(self):
        """Two smali methods with the same CFG structure produce the same hash."""
        smali_a = """\
    const/4 v0, 0x1
    if-eqz v0, :cond_0
    const/4 v1, 0x2
    goto :goto_0
    :cond_0
    const/4 v1, 0x3
    :goto_0
    return-void
"""
        smali_b = """\
    const/4 v5, 0x9
    if-nez v5, :cond_0
    add-int v6, v5, v5
    goto :goto_0
    :cond_0
    sub-int v6, v5, v5
    :goto_0
    return-void
"""
        m_a = compute_cfg_metrics(smali_a)
        m_b = compute_cfg_metrics(smali_b)
        assert m_a.cfg_topology_hash == m_b.cfg_topology_hash

    def test_different_cfg_different_topology_hash(self):
        m_linear = compute_cfg_metrics(SMALI_LINEAR)
        m_diamond = compute_cfg_metrics(SMALI_DIAMOND)
        assert m_linear.cfg_topology_hash != m_diamond.cfg_topology_hash

    def test_md_index_topdown_nonzero(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.md_index_topdown != 0

    def test_md_index_bottomup_nonzero(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert m.md_index_bottomup != 0

    def test_md_index_zero_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.md_index_topdown == 0
        assert m.md_index_bottomup == 0

    def test_wl_minhash_length(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.wl_minhash) == 128

    def test_wl_minhash_sentinel_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.wl_minhash == [255] * 128

    def test_wl_minhash_values_are_uint8(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        for val in m.wl_minhash:
            assert 0 <= val <= 255

    def test_cfg_adjacency_nonempty_for_multiblock(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.cfg_adjacency) > 0

    def test_cfg_adjacency_empty_for_empty(self):
        m = compute_cfg_metrics("")
        assert m.cfg_adjacency == []

    def test_cfg_adjacency_packed_format(self):
        """Each entry should be (src << 16) | tgt."""
        m = compute_cfg_metrics(SMALI_DIAMOND)
        for edge in m.cfg_adjacency:
            assert isinstance(edge, int)
            src = edge >> 16
            tgt = edge & 0xFFFF
            assert src < m.block_count
            assert tgt < m.block_count

    def test_block_features_exported(self):
        m = compute_cfg_metrics(SMALI_DIAMOND)
        assert len(m.block_features) == m.block_count
        for bf in m.block_features:
            assert len(bf) == 8  # 7 categories + successor_count

    def test_cfg_feature_tlsh_none_for_small(self):
        """Small methods produce None (< 50 bytes of feature data)."""
        m = compute_cfg_metrics(SMALI_LINEAR)
        # Single-block linear method — too small for TLSH
        assert m.cfg_feature_tlsh is None

    def test_loop_count_with_back_edge(self):
        m = compute_cfg_metrics(SMALI_LOOP)
        assert m.loop_count >= 1


# ===================================================================
# TestPrimeProductSmali
# ===================================================================

class TestPrimeProductSmali:

    def test_empty_returns_zero(self):
        assert compute_prime_product_smali("") == 0

    def test_none_returns_zero(self):
        assert compute_prime_product_smali(None) == 0

    def test_known_computation(self):
        """Single invoke instruction → CALL category → prime 17."""
        smali = "    invoke-virtual {p0}, Lcom/Foo;->bar()V"
        assert compute_prime_product_smali(smali) == 17

    def test_two_instructions(self):
        """const (CONST→2) * invoke (CALL→17) = 34."""
        smali = """\
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
"""
        assert compute_prime_product_smali(smali) == 2 * 17

    def test_skips_directives_and_labels(self):
        """Directives, labels, and comments should be skipped."""
        smali = """\
.registers 2
.line 10
    :label
    # comment
    const/4 v0, 0x0
"""
        # Only const/4 → CONST → prime 2
        assert compute_prime_product_smali(smali) == 2

    def test_position_independent(self):
        """Reordering instructions produces the same product (multiplication is commutative)."""
        smali_a = """\
    add-int v0, v1, v2
    invoke-virtual {p0}, Lcom/Foo;->bar()V
"""
        smali_b = """\
    invoke-virtual {p0}, Lcom/Foo;->bar()V
    add-int v0, v1, v2
"""
        assert compute_prime_product_smali(smali_a) == compute_prime_product_smali(smali_b)

    def test_all_categories_have_primes(self):
        """Every category in SMALI_OP_PRIMES is a positive integer."""
        for cat, prime in SMALI_OP_PRIMES.items():
            assert isinstance(prime, int)
            assert prime >= 1

    def test_mod_2_64(self):
        """Result should be mod 2^64 (doesn't overflow)."""
        # A very long method — product stays within uint64
        smali = "\n".join(["    mul-int v0, v1, v2"] * 1000)
        result = compute_prime_product_smali(smali)
        assert 0 <= result < 2**64


# ===================================================================
# TestCallCount
# ===================================================================

class TestCallCount:

    def test_empty(self):
        assert count_call_instructions("") == 0

    def test_none(self):
        assert count_call_instructions(None) == 0

    def test_single_invoke(self):
        smali = "    invoke-virtual {p0}, Lcom/Foo;->bar()V"
        assert count_call_instructions(smali) == 1

    def test_multiple_invoke_types(self):
        assert count_call_instructions(SMALI_MULTI_CALL) == 3

    def test_non_invoke_not_counted(self):
        smali = """\
    const/4 v0, 0x0
    add-int v1, v0, v0
    return-void
"""
        assert count_call_instructions(smali) == 0


# ===================================================================
# TestSimilarityTableSlimmed
# ===================================================================

class TestSimilarityTableSlimmed:
    """Verify the similarity table no longer contains moved fields."""

    def test_export_similarity_no_block_count(self):
        """block_count should not be in similarity export columns."""
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        from unittest.mock import MagicMock

        extractor = DecompileAPK.__new__(DecompileAPK)
        extractor.log = MagicMock()
        extractor.sha256 = "a" * 64
        extractor.sha1 = "b" * 40
        extractor.md5 = "c" * 32
        extractor.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "similarity_metrics": [{
                "smali_method_hash": "d" * 64,
                "cyclomatic_complexity": 3,
                "ssdeep_smali": None,
                "tlsh_smali": None,
                "minhash": [1, 2, 3],
            }],
        }

        export = extractor.prepare_export_data("ClickHouseExporter")
        sim_cols = export["method_similarity_metrics"]["column_names"]
        assert "block_count" not in sim_cols
        assert "edge_count" not in sim_cols
        assert "loop_count" not in sim_cols
        assert "max_depth" not in sim_cols
        assert "max_fan_out" not in sim_cols
        # These should still be there
        assert "smali_method_hash" in sim_cols
        assert "ssdeep_smali" in sim_cols
        assert "minhash" in sim_cols
        # cyclomatic_complexity moved to cfg table
        assert "cyclomatic_complexity" not in sim_cols


# ===================================================================
# TestCFGTableExport
# ===================================================================

class TestCFGTableExport:
    """Verify the new CFG table is exported correctly."""

    def test_export_cfg_table_present(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        from unittest.mock import MagicMock

        extractor = DecompileAPK.__new__(DecompileAPK)
        extractor.log = MagicMock()
        extractor.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "cfg": [{
                "smali_method_hash": "d" * 64,
                "cfg_topology_hash": b'\x01' * 16,
                "block_count": 4,
                "edge_count": 5,
                "instructions_count": 20,
                "call_count": 3,
                "cyclomatic_complexity": 3,
                "loop_count": 1,
                "max_depth": 2,
                "max_fan_out": 2,
                "md_index_topdown": 12345,
                "md_index_bottomup": 67890,
                "prime_product_smali": 999,
                "cfg_feature_tlsh": None,
                "wl_minhash": [0] * 128,
                "bb_features": [[10, 1, 0, 2, 1, 0, 0, 2]] * 4,
                "cfg_adjacency": [0x00010000, 0x00010002],
            }],
        }

        export = extractor.prepare_export_data("ClickHouseExporter")
        assert "cfg_methods" in export
        cfg_export = export["cfg_methods"]
        assert cfg_export["table"] == "code_apk_cfg_methods"
        assert len(cfg_export["data"]) == 1
        assert "cfg_topology_hash" in cfg_export["column_names"]
        assert "prime_product_smali" in cfg_export["column_names"]
        assert "wl_minhash" in cfg_export["column_names"]
        assert "bb_features" in cfg_export["column_names"]
        assert "cfg_adjacency" in cfg_export["column_names"]
        # Verify column count matches data width
        assert len(cfg_export["column_names"]) == len(cfg_export["data"][0])
        assert len(cfg_export["column_type_names"]) == len(cfg_export["data"][0])