Warren E. Dixon

467 papers A* 7A 4B 6C 106Journal 225Unranked 115
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Autom. Control.
Emily J. Griffis, Omkar Sudhir Patil, Wanjiku A. Makumi, Warren E. Dixon
2026 J jnl
CoRR
Alexander Benvenuti, Brandon Fallin, Calvin Hawkins, Brendan J. Bialy, Miriam E. Dennis, Warren E. Dixon, Matthew T. Hale
2026 J jnl
IEEE Robotics Autom. Lett.
Patrick M. Amy, Brandon C. Fallin, Jhyv N. Philor, Warren E. Dixon
2026 J jnl
CoRR
Yihui Mao, Tian Tan, Xuehui Shen, Warren E. Dixon, Rushikesh Kamalapurkar
2026 J jnl
CoRR
Yixuan Wang, Omkar Sudhir Patil, Warren E. Dixon
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Duc M. Le, Omkar Sudhir Patil, Cristian F. Nino, Warren E. Dixon
2025 J jnl
IEEE Trans. Autom. Control.
Xuehui Shen, Emily J. Griffis, Wenyu Wu, Warren E. Dixon
2025 J jnl
IEEE Trans. Autom. Control.
Max L. Greene, Masoud S. Sakha, Rushikesh Kamalapurkar, Warren E. Dixon
2025 J jnl
CoRR
Omkar Sudhir Patil, Brandon C. Fallin, Cristian F. Nino, Rebecca G. Hart, Warren E. Dixon
2025 J jnl
CoRR
Max L. Gardenswartz, Brandon C. Fallin, Cristian F. Nino, Warren E. Dixon
2025 J jnl
CoRR
Cristian F. Nino, Omkar Sudhir Patil, Christopher D. Petersen, Sean Phillips, Warren E. Dixon
2025 J jnl
IEEE Control. Syst. Lett.
Rebecca G. Hart, Omkar Sudhir Patil, Zachary I. Bell, Warren E. Dixon
2025 conf
CDC
Wenyu Wu, Omkar Sudhir Patil, Hannah M. Sweatland, Warren E. Dixon
2025 J jnl
CoRR
Cristian F. Nino, Omkar Sudhir Patil, Sage C. Edwards, Warren E. Dixon
2025 J jnl
IEEE Control. Syst. Lett.
Cristian F. Nino, Omkar Sudhir Patil, Sage C. Edwards, Warren E. Dixon
2025 J jnl
CoRR
Yixuan Wang, Dan P. Guralnik, Saiedeh Akbari, Warren E. Dixon
2025 J jnl
CoRR
Yixuan Wang, Dan P. Guralnik, Warren E. Dixon
2025 J jnl
CoRR
Tyler Hanks, Cristian F. Nino, Joana Bou Barcelo, Austin Copeland, Warren E. Dixon, James P. Fairbanks
2025 J jnl
IEEE Control. Syst. Lett.
Jhyv N. Philor, Cristian F. Nino, Patrick M. Amy, Warren E. Dixon
2025 conf
CDC
Shubham Sanjeev Kolhe, Omkar Sudhir Patil, Warren E. Dixon, Jie Fu
2025 J jnl
CoRR
Saiedeh Akbari, Omkar Sudhir Patil, Warren E. Dixon
2025 J jnl
IEEE Access
Omkar Sudhir Patil, Duc M. Le, Emily J. Griffis, Warren E. Dixon
2025 J jnl
CoRR
Brandon C. Fallin, Cristian F. Nino, Omkar Sudhir Patil, Zachary I. Bell, Warren E. Dixon
2025 J jnl
CoRR
Xuehui Shen, Wenqian Xue, Yixuan Wang, Warren E. Dixon
2025 J jnl
CoRR
Rebecca G. Hart, Wanjiku A. Makumi, Rushikesh Kamalapurkar, Warren E. Dixon
2025 J jnl
CoRR
Saiedeh Akbari, Xuehui Shen, Wenqian Xue, Jordan C. Insinger, Warren E. Dixon
2025 J jnl
Autom.
Wanjiku A. Makumi, Omkar Sudhir Patil, Warren E. Dixon
2025 J jnl
CoRR
Cristian F. Nino, Omkar Sudhir Patil, Marla R. Eisman, Warren E. Dixon
2025 J jnl
IEEE Control. Syst. Lett.
Cristian F. Nino, Omkar Sudhir Patil, Jordan C. Insinger, Marla R. Eisman, Warren E. Dixon
2025 J jnl
IEEE Trans. Autom. Control.
Hannah M. Sweatland, Axton Isaly, Emily J. Griffis, Warren E. Dixon
2025 conf
CDC
Carlos A. Montenegro G., Hannah M. Sweatland, Keith A. Currier, Warren E. Dixon, Ricardo G. Sanfelice
2025 conf
CDC
Wenqian Xue, Warren E. Dixon
2025 J jnl
SIAM J. Control. Optim.
Yu Zheng, Olugbenga Moses Anubi, Warren E. Dixon
2025 J jnl
CoRR
Yu Zheng, Olugbenga Moses Anubi, Warren E. Dixon
2025 J jnl
IEEE Trans. Autom. Control.
Omkar Sudhir Patil, Rushikesh Kamalapurkar, Warren E. Dixon
2025 J jnl
CoRR
Rebecca G. Hart, Omkar Sudhir Patil, Zachary I. Bell, Warren E. Dixon
2025 J jnl
J. Appl. Comput. Topol.
Dan P. Guralnik, Yu Wang, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Duc M. Le, Andrew R. Teel, Warren E. Dixon
2024 J jnl
CoRR
Hannah M. Sweatland, Omkar Sudhir Patil, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Axton Isaly, Omkar Sudhir Patil, Hannah M. Sweatland, Ricardo G. Sanfelice, Warren E. Dixon
2024 C conf
ACC
Jhyv N. Philor, Wanjiku A. Makumi, Zachary I. Bell, Warren E. Dixon
2024 C conf
ACC
Sage C. Edwards, Axton Isaly, John Matthew Brewer, Warren E. Dixon
2024 conf
CDC
Cristian F. Nino, Omkar Sudhir Patil, Sage C. Edwards, Zachary I. Bell, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Federico M. Zegers, Dan P. Guralnik, Warren E. Dixon
2024 J jnl
CoRR
Saiedeh Akbari, Cristian F. Nino, Omkar Sudhir Patil, Warren E. Dixon
2024 J jnl
CoRR
Omkar Sudhir Patil, Duc M. Le, Emily J. Griffis, Warren E. Dixon
2024 J jnl
IEEE Control. Syst. Lett.
Emily J. Griffis, Omkar Sudhir Patil, Rebecca G. Hart, Warren E. Dixon
2024 J jnl
IEEE Control. Syst. Lett.
Rebecca G. Hart, Emily J. Griffis, Omkar Sudhir Patil, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Axton Isaly, Masoumeh Ghanbarpour, Ricardo G. Sanfelice, Warren E. Dixon
2024 conf
MILCOM
Caleb M. Bowyer, John M. Shea, Tan F. Wong, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Dan P. Guralnik, Peter F. Stiller, Federico M. Zegers, Warren E. Dixon
2024 J jnl
IEEE Trans. Autom. Control.
Ghananeel Rotithor, Tyler Taplin, Ashwin P. Dani, Warren E. Dixon
2024 J jnl
IEEE Trans. Control. Syst. Technol.
Kimberly J. Stubbs, Brendon C. Allen, Warren E. Dixon
2023 J jnl
IEEE Trans. Robotics
Federico M. Zegers, Patryk Deptula, Hsi-Yuan Chen, Axton Isaly, Warren E. Dixon
2023 J jnl
IEEE Control. Syst. Lett.
Wanjiku A. Makumi, Zachary I. Bell, Warren E. Dixon
2023 J jnl
IEEE Trans. Autom. Control.
Max L. Greene, Patryk Deptula, Scott Nivison, Warren E. Dixon
2023 J jnl
CoRR
Omkar Sudhir Patil, Emily J. Griffis, Wanjiku A. Makumi, Warren E. Dixon
2023 C conf
ACC
Cristian F. Nino, Federico M. Zegers, Sean Phillips, Warren E. Dixon
2023 J jnl
IEEE Access
Zhe Xu, Federico M. Zegers, Nasim Baharisangari, Bo Wu, Alexander J. Phillips, Warren E. Dixon, Ufuk Topcu
2023 conf
CDC
Cristian F. Nino, Omkar Sudhir Patil, Jhyv N. Philor, Zachary I. Bell, Warren E. Dixon
2023 conf
CDC
Rebecca G. Hart, Omkar Sudhir Patil, Emily J. Griffis, Warren E. Dixon
2023 J jnl
IEEE Trans. Autom. Control.
Max L. Greene, Zachary I. Bell, Scott Nivison, Warren E. Dixon
2023 J jnl
IEEE Trans. Autom. Control.
Federico M. Zegers, Runhan Sun, Girish Chowdhary, Warren E. Dixon
2023 J jnl
CoRR
Saiedeh Akbari, Emily J. Griffis, Omkar Sudhir Patil, Warren E. Dixon
2023 J jnl
IEEE Control. Syst. Lett.
Emily J. Griffis, Omkar Sudhir Patil, Zachary I. Bell, Warren E. Dixon
2023 J jnl
IEEE Control. Syst. Lett.
Masoumeh Ghanbarpour, Axton Isaly, Ricardo G. Sanfelice, Warren E. Dixon
2023 conf
CDC
Hannah M. Sweatland, Emily J. Griffis, Victor H. Duenas, Warren E. Dixon
2023 J jnl
Autom.
Runhan Sun, Suda Bharadwaj, Zhe Xu, Ufuk Topcu, Warren E. Dixon
2023 J jnl
IEEE Trans. Control. Syst. Technol.
Brendon C. Allen, Kimberly J. Stubbs, Warren E. Dixon
2023 J jnl
IEEE Control. Syst. Lett.
Cristian F. Nino, Omkar Sudhir Patil, Warren E. Dixon
2023 J jnl
IEEE Trans. Autom. Control.
Arman Sargolzaei, Federico M. Zegers, Alireza Abbaspour, Carl D. Crane, Warren E. Dixon
2023 J jnl
IEEE Control. Syst. Lett.
Zachary I. Bell, Runhan Sun, Kyle Volle, Prashant Ganesh, Scott A. Nivison, Warren E. Dixon
2023 conf
CDC
Axton Isaly, Sage C. Edwards, Zachary I. Bell, Warren E. Dixon
2022 J jnl
IEEE Trans. Control. Syst. Technol.
Christian A. Cousin, Patryk Deptula, Courtney A. Rouse, Warren E. Dixon
2022 conf
CDC
Duc M. Le, Omkar Sudhir Patil, Cristian F. Nino, Warren E. Dixon
2022 J jnl
IEEE Trans. Autom. Control.
Omkar Sudhir Patil, Runhan Sun, Shubhendu Bhasin, Warren E. Dixon
2022 conf
CCTA
Emily J. Griffis, Wanjiku A. Makumi, Hannah M. Sweatland, Kimberly J. Stubbs, Tanja Taivassalo, Donovan J. Lott, Warren E. Dixon
2022 C conf
ACC
Kimberly J. Stubbs, Axton Isaly, Warren E. Dixon
2022 conf
CDC
Emily J. Griffis, Axton Isaly, Duc M. Le, Warren E. Dixon
2022 conf
CDC
Omkar Sudhir Patil, Duc M. Le, Emily J. Griffis, Warren E. Dixon
2022 C conf
ACC
Dan P. Guralnik, Peter F. Stiller, Federico M. Zegers, Warren E. Dixon
2022 J jnl
CoRR
Federico M. Zegers, Runhan Sun, Girish Chowdhary, Warren E. Dixon
2022 conf
CDC
Federico M. Zegers, Dan P. Guralnik, Sage C. Edwards, Chia-Ling Lee, Warren E. Dixon
2022 J jnl
IEEE Trans. Autom. Control.
Federico M. Zegers, Patryk Deptula, John M. Shea, Warren E. Dixon
2022 J jnl
IEEE Control. Syst. Lett.
Omkar Sudhir Patil, Axton Isaly, Bin Xian, Warren E. Dixon
2022 conf
CDC
Omkar Sudhir Patil, Kimberly J. Stubbs, Patrick M. Amy, Warren E. Dixon
2022 conf
CDC
Hannah M. Sweatland, Axton Isaly, Warren E. Dixon
2022 C conf
ACC
Duc M. Le, Omkar Sudhir Patil, Patrick M. Amy, Warren E. Dixon
2022 J jnl
IEEE Trans. Ind. Informatics
Arman Sargolzaei, Brendon C. Allen, Carl D. Crane, Warren E. Dixon
2022 J jnl
IEEE Control. Syst. Lett.
Runhan Sun, Max L. Greene, Duc M. Le, Zachary I. Bell, Girish Chowdhary, Warren E. Dixon
2022 J jnl
IEEE Control. Syst. Lett.
Omkar Sudhir Patil, Duc M. Le, Max L. Greene, Warren E. Dixon
2022 C conf
ACC
Wanjiku A. Makumi, Max L. Greene, Kimberly J. Stubbs, Warren E. Dixon
2022 C conf
ACC
Axton Isaly, Masoumeh Ghanbarpour, Ricardo G. Sanfelice, Warren E. Dixon
2022 J jnl
CoRR
Masoumeh Ghanbarpour, Axton Isaly, Ricardo G. Sanfelice, Warren E. Dixon
2022 B conf
GLOBECOM
Caleb M. Bowyer, John M. Shea, Tan F. Wong, Warren E. Dixon
2022 J jnl
Autom.
Brendon C. Allen, Kimberly J. Stubbs, Warren E. Dixon
2022 J jnl
IEEE Control. Syst. Lett.
Duc M. Le, Max L. Greene, Wanjiku A. Makumi, Warren E. Dixon
2022 J jnl
IEEE Trans. Control. Syst. Technol.
Brendon C. Allen, Christian A. Cousin, Courtney A. Rouse, Warren E. Dixon
2022 J jnl
Autom.
Brendon C. Allen, Kimberly J. Stubbs, Warren E. Dixon
2021 J jnl
IEEE Robotics Autom. Lett.
Sage C. Edwards, Duc M. Le, Dan P. Guralnik, Warren E. Dixon
2021 C conf
ACC
Axton Isaly, Omkar Sudhir Patil, Ricardo G. Sanfelice, Warren E. Dixon
2021 J jnl
Autom.
Patryk Deptula, Zachary I. Bell, Federico M. Zegers, Ryan A. Licitra, Warren E. Dixon
2021 conf
CDC
Emily J. Griffis, Duc M. Le, Kimberly J. Stubbs, Warren E. Dixon
2021 C conf
ACC
Federico M. Zegers, Sean Phillips, Warren E. Dixon
2021 J jnl
CoRR
Zhe Xu, Federico M. Zegers, Bo Wu, Alexander J. Phillips, Warren E. Dixon, Ufuk Topcu
2021 C conf
ACC
Max L. Greene, Zachary I. Bell, Scott A. Nivison, Jonathan P. How, Warren E. Dixon
2021 J jnl
Frontiers Robotics AI
Axton Isaly, Brendon C. Allen, Ricardo G. Sanfelice, Warren E. Dixon
2021 J jnl
IEEE Trans. Control. Netw. Syst.
Federico M. Zegers, Matthew T. Hale, John M. Shea, Warren E. Dixon
2021 conf
CDC
Federico M. Zegers, Dan P. Guralnik, Warren E. Dixon
2021 J jnl
Robotics
Christian A. Cousin, Victor H. Duenas, Warren E. Dixon
2021 J jnl
Autom.
Courtney A. Rouse, Christian A. Cousin, Brendon C. Allen, Warren E. Dixon
2021 J jnl
IEEE Trans. Autom. Control.
Zachary I. Bell, Patryk Deptula, Emily A. Doucette, J. Willard Curtis, Warren E. Dixon
2021 J jnl
IEEE Trans. Control. Syst. Technol.
Christian A. Cousin, Courtney A. Rouse, Warren E. Dixon
2021 conf
CDC
Aris Kanellopoulos, Filippos Fotiadis, Chuangchuang Sun, Zhe Xu, Kyriakos G. Vamvoudakis, Ufuk Topcu, Warren E. Dixon
2021 J jnl
CoRR
Aris Kanellopoulos, Filippos Fotiadis, Chuangchuang Sun, Zhe Xu, Kyriakos G. Vamvoudakis, Ufuk Topcu, Warren E. Dixon
2020 C conf
ACC
Runhan Sun, Zachary I. Bell, Federico M. Zegers, Warren E. Dixon
2020 J jnl
CoRR
Omkar Sudhir Patil, Runhan Sun, Shubhendu Bhasin, Warren E. Dixon
2020 J jnl
IEEE Trans. Robotics
Patryk Deptula, Hsi-Yuan Chen, Ryan A. Licitra, Joel A. Rosenfeld, Warren E. Dixon
2020 J jnl
IEEE Trans. Control. Syst. Technol.
Christian A. Cousin, Victor H. Duenas, Courtney A. Rouse, Matthew J. Bellman, Paul Freeborn, Emily J. Fox, Warren E. Dixon
2020 J jnl
IEEE Trans. Control. Syst. Technol.
Serhat Obuz, Victor H. Duenas, Ryan J. Downey, Justin R. Klotz, Warren E. Dixon
2020 J jnl
Autom.
Patryk Deptula, Zachary I. Bell, Emily A. Doucette, J. Willard Curtis, Warren E. Dixon
2020 J jnl
IEEE Trans. Ind. Informatics
Arman Sargolzaei, Kasra Yazdani, Alireza Abbaspour, Carl D. Crane III, Warren E. Dixon
2020 J jnl
IEEE Trans. Cybern.
Victor H. Duenas, Christian A. Cousin, Courtney A. Rouse, Emily J. Fox, Warren E. Dixon
2020 J jnl
IEEE Trans. Biomed. Eng.
Courtney A. Rouse, Ryan J. Downey, Chris M. Gregory, Christian A. Cousin, Victor H. Duenas, Warren E. Dixon
2020 conf
CDC
Max L. Greene, Moad Abudia, Rushikesh Kamalapurkar, Warren E. Dixon
2020 conf
CDC
Runhan Sun, Christian G. Harris, Zachary I. Bell, Warren E. Dixon
2020 C conf
ACC
Federico M. Zegers, Matthew T. Hale, John M. Shea, Warren E. Dixon
2020 conf
CDC
Brendon C. Allen, Kimberly J. Stubbs, Warren E. Dixon
2020 conf
CDC
Duc M. Le, Xusheng Luo, Leila Jasmine Bridgeman, Michael M. Zavlanos, Warren E. Dixon
2020 J jnl
IEEE Control. Syst. Lett.
Max L. Greene, Patryk Deptula, Scott Nivison, Warren E. Dixon
2020 conf
CDC
Christian G. Harris, Zachary I. Bell, Runhan Sun, Emily A. Doucette, J. Willard Curtis, Warren E. Dixon
2020 C conf
ACC
Christian G. Harris, Zachary I. Bell, Emily A. Doucette, J. Willard Curtis, Warren E. Dixon
2020 J jnl
Autom.
Victor H. Duenas, Christian A. Cousin, Vahideh Ghanbari, Emily J. Fox, Warren E. Dixon
2019 C conf
ACC
Federico M. Zegers, Hsi-Yuan Chen, Patryk Deptula, Warren E. Dixon
2019 J jnl
IEEE Trans. Robotics
Hsi-Yuan Chen, Zachary I. Bell, Patryk Deptula, Warren E. Dixon
2019 J jnl
J. Comput. Phys.
Joel A. Rosenfeld, Spencer A. Rosenfeld, Warren E. Dixon
2019 conf
CDC
Brendon C. Allen, Christian A. Cousin, Courtney A. Rouse, Warren E. Dixon
2019 C conf
ACC
F. I. Esquivel Estay, Courtney A. Rouse, M. H. Cohen, Christian A. Cousin, Warren E. Dixon
2019 J jnl
IEEE Trans. Control. Syst. Technol.
Hiroyuki Kawai, Matthew J. Bellman, Ryan J. Downey, Warren E. Dixon
2019 conf
Allerton
Zhe Xu, Federico M. Zegers, Bo Wu, Warren E. Dixon, Ufuk Topcu
2019 J jnl
CoRR
Zhe Xu, Federico M. Zegers, Bo Wu, Warren E. Dixon, Ufuk Topcu
2019 C conf
ACC
Christian A. Cousin, Patryk Deptula, Courtney A. Rouse, Warren E. Dixon
2019 J jnl
IEEE Trans. Autom. Control.
Zhen Kan, Emily A. Doucette, Warren E. Dixon
2019 conf
CDC
Federico M. Zegers, Patryk Deptula, John M. Shea, Warren E. Dixon
2019 J jnl
IEEE Trans. Autom. Control.
Rushikesh Kamalapurkar, Joel A. Rosenfeld, Anup Parikh, Andrew R. Teel, Warren E. Dixon
2019 J jnl
IEEE Trans. Control. Syst. Technol.
Victor H. Duenas, Christian A. Cousin, Anup Parikh, Paul Freeborn, Emily J. Fox, Warren E. Dixon
2019 B conf
WCNC
Jixin Feng, Warren E. Dixon, Tan F. Wong, John M. Shea
2019 J jnl
IEEE Trans. Control. Syst. Technol.
Vahideh Ghanbari, Victor H. Duenas, Panos J. Antsaklis, Warren E. Dixon
2019 conf
CDC
Max L. Greene, Patryk Deptula, Scott Nivison, Warren E. Dixon
2019 J jnl
IEEE Trans. Robotics
Ryan A. Licitra, Zachary I. Bell, Warren E. Dixon
2019 C conf
ACC
Courtney A. Rouse, Christian A. Cousin, Brendon C. Allen, Warren E. Dixon
2019 conf
CDC
Zachary I. Bell, Christian G. Harris, Runhan Sun, Warren E. Dixon
2019 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Joel A. Rosenfeld, Rushikesh Kamalapurkar, Warren E. Dixon
2018 J jnl
IEEE Control. Syst. Lett.
Courtney A. Rouse, Victor H. Duenas, Christian A. Cousin, Anup Parikh, Warren E. Dixon
2018 J jnl
IEEE Trans. Control. Syst. Technol.
Anup Parikh, Teng-Hu Cheng, Ryan Licitra, Warren E. Dixon
2018 J jnl
CoRR
Hsi-Yuan Chen, Zachary I. Bell, Patryk Deptula, Warren E. Dixon
2018 J jnl
IEEE Control. Syst. Lett.
Hsi-Yuan Chen, Zachary I. Bell, Patryk Deptula, Warren E. Dixon
2018 C conf
ACC
Christian A. Cousin, Victor H. Duenas, Courtney A. Rouse, Warren E. Dixon
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Patryk Deptula, Joel A. Rosenfeld, Rushikesh Kamalapurkar, Warren E. Dixon
2018 C conf
ACC
Courtney A. Rouse, Christian A. Cousin, Victor H. Duenas, Warren E. Dixon
2018 conf
CDC
Christian A. Cousin, Victor H. Duenas, Courtney A. Rouse, Warren E. Dixon
2018 C conf
ACC
Patryk Deptula, Zachary I. Bell, Emily A. Doucette, J. Willard Curtis, Warren E. Dixon
2018 J jnl
IEEE Trans. Control. Netw. Syst.
Justin R. Klotz, Anup Parikh, Teng-Hu Cheng, Warren E. Dixon
2018 J jnl
IEEE Trans. Control. Netw. Syst.
Zhi Feng, Guoqiang Hu, Wei Ren, Warren E. Dixon, Jie Mei
2018 conf
ICCA
Warren E. Dixon
2018 J jnl
IEEE Trans. Control. Netw. Syst.
Rushikesh Kamalapurkar, Justin R. Klotz, Patrick Walters, Warren E. Dixon
2018 C conf
ACC
Patryk Deptula, Ryan A. Licitra, Joel A. Rosenfeld, Warren E. Dixon
2018 J jnl
IEEE Trans. Robotics
Patrick Walters, Rushikesh Kamalapurkar, Forrest Voight, Eric M. Schwartz, Warren E. Dixon
2018 C conf
ACC
Victor H. Duenas, Christian A. Cousin, Vahideh Ghanbari, Warren E. Dixon
2018 J jnl
IEEE Control. Syst. Lett.
Ryan Licitra, Zachary I. Bell, Emily A. Doucette, Warren E. Dixon
2018 conf
CDC
Patryk Deptula, Zachary I. Bell, Federico M. Zegers, Ryan A. Licitra, Warren E. Dixon
2018 J jnl
IEEE Trans. Cybern.
Justin R. Klotz, Serhat Obuz, Zhen Kan, Warren E. Dixon
2018 J jnl
IEEE Trans. Robotics
Anup Parikh, Rushikesh Kamalapurkar, Warren E. Dixon
2018 C conf
ACC
Zachary I. Bell, Patryk Deptula, Hsi-Yuan Chen, Emily A. Doucette, Warren E. Dixon
2017 C conf
ACC
Indrasis Chakraborty, Siddhartha S. Mehta, Emily A. Doucette, Warren E. Dixon
2017 J jnl
Frontiers Robotics AI
Nitin Sharma, Nicholas Andrew Kirsch, Naji Alibeji, Warren E. Dixon
2017 J jnl
IEEE Trans. Robotics
Anup Parikh, Teng-Hu Cheng, Hsi-Yuan Chen, Warren E. Dixon
2017 conf
CDC
Hsi-Yuan Chen, Zachary I. Bell, Ryan Licitra, Warren E. Dixon
2017 J jnl
SIAM J. Numer. Anal.
Joel A. Rosenfeld, Warren E. Dixon
2017 J jnl
IEEE Trans Autom. Sci. Eng.
Matthew J. Bellman, Ryan J. Downey, Anup Parikh, Warren E. Dixon
2017 J jnl
IEEE Trans. Autom. Control.
Rushikesh Kamalapurkar, Benjamin Reish, Girish Chowdhary, Warren E. Dixon
2017 C conf
ACC
Indrasis Chakraborty, Siddhartha S. Mehta, Emily A. Doucette, Warren E. Dixon
2017 J jnl
IEEE Trans. Autom. Control.
Teng-Hu Cheng, Zhen Kan, Justin R. Klotz, John M. Shea, Warren E. Dixon
2017 conf
ICC
Jixin Feng, Warren E. Dixon, John M. Shea
2017 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Rushikesh Kamalapurkar, Lindsey Andrews, Patrick Walters, Warren E. Dixon
2017 J jnl
CoRR
Rushikesh Kamalapurkar, Justin R. Klotz, Patrick Walters, Warren E. Dixon
2017 conf
CDC
Christian A. Cousin, Victor H. Duenas, Courtney A. Rouse, Warren E. Dixon
2017 conf
CDC
Rushikesh Kamalapurkar, Warren E. Dixon, Andrew R. Teel
2017 J jnl
CoRR
Rushikesh Kamalapurkar, Warren E. Dixon, Andrew R. Teel
2017 J jnl
CoRR
Patrick Walters, Rushikesh Kamalapurkar, Forrest Voight, Eric M. Schwartz, Warren E. Dixon
2017 conf
ICORR
Christian A. Cousin, Courtney A. Rouse, Victor H. Duenas, Warren E. Dixon
2017 B conf
GLOBECOM
Jixin Feng, Warren E. Dixon, John M. Shea
2017 conf
CDC
Zachary I. Bell, Hsi-Yuan Chen, Anup Parikh, Warren E. Dixon
2017 J jnl
IEEE Trans. Cybern.
Ryan J. Downey, Teng-Hu Cheng, Matthew J. Bellman, Warren E. Dixon
2017 conf
CDC
Courtney A. Rouse, Christian A. Cousin, Victor H. Duenas, Warren E. Dixon
2017 J jnl
Autom.
Serhat Obuz, Justin R. Klotz, Rushikesh Kamalapurkar, Warren E. Dixon
2016 J jnl
CoRR
Rushikesh Kamalapurkar, Joel A. Rosenfeld, Anup Parikh, Andrew R. Teel, Warren E. Dixon
2016 J jnl
Autom.
Brendan J. Bialy, Indrasis Chakraborty, Sadettin Cagri Cekic, Warren E. Dixon
2016 conf
CDC
Zachary I. Bell, Anup Parikh, Jason Nezvadovitz, Warren E. Dixon
2016 conf
CDC
Courtney A. Rouse, Anup Parikh, Victor H. Duenas, Christian A. Cousin, Warren E. Dixon
2016 C conf
ACC
Indrasis Chakraborty, Siddhartha S. Mehta, J. Willard Curtis, Warren E. Dixon
2016 C conf
ACC
Serhat Obuz, Ryan J. Downey, Anup Parikh, Warren E. Dixon
2016 C conf
ACC
Indrasis Chakraborty, Serhat Obuz, Ryan Licitra, Warren E. Dixon
2016 C conf
ACC
Zhen Kan, John M. Shea, Emily A. Doucette, Jess Willard Curtis, Warren E. Dixon
2016 J jnl
Autom.
Rushikesh Kamalapurkar, Joel A. Rosenfeld, Warren E. Dixon
2016 conf
CDC
Victor H. Duenas, Christian A. Cousin, Anup Parikh, Warren E. Dixon
2016 J jnl
IEEE Trans. Cybern.
Teng-Hu Cheng, Qiang Wang, Rushikesh Kamalapurkar, Huyen T. Dinh, Matthew J. Bellman, Warren E. Dixon
2016 C conf
CCA
Indrasis Chakraborty, Serhat Obuz, Warren E. Dixon
2016 J jnl
IEEE Trans. Control. Syst. Technol.
Manelle Merad, Ryan J. Downey, Serhat Obuz, Warren E. Dixon
2016 J jnl
Autom.
Zhen Kan, John M. Shea, Warren E. Dixon
2016 J jnl
Autom.
Rushikesh Kamalapurkar, Patrick Walters, Warren E. Dixon
2016 J jnl
IEEE Trans. Control. Syst. Technol.
Dongkyoung Chwa, Ashwin P. Dani, Warren E. Dixon
2016 J jnl
IEEE Trans. Autom. Control.
Rushikesh Kamalapurkar, Nicholas R. Fischer, Serhat Obuz, Warren E. Dixon
2015 C conf
ACC
Anup Parikh, Teng-Hu Cheng, Warren E. Dixon
2015 conf
MILCOM
Jixin Feng, Eduardo L. Pasiliao, Warren E. Dixon, John M. Shea
2015 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Marcus Johnson, Rushikesh Kamalapurkar, Shubhendu Bhasin, Warren E. Dixon
2015 conf
CDC
Patrick Walters, Rushikesh Kamalapurkar, Warren E. Dixon
2015 J jnl
Autom.
Rushikesh Kamalapurkar, Huyen T. Dinh, Shubhendu Bhasin, Warren E. Dixon
2015 J jnl
IEEE Trans. Control. Netw. Syst.
Justin R. Klotz, Zhen Kan, John M. Shea, Eduardo L. Pasiliao, Warren E. Dixon
2015 C conf
ACC
Kyriakos G. Vamvoudakis, Panos J. Antsaklis, Warren E. Dixon, João Pedro Hespanha, Frank L. Lewis, Hamidreza Modares, Bahare Kiumarsi
2015 J jnl
CoRR
Rushikesh Kamalapurkar, Ben Reish, Girish Chowdhary, Warren E. Dixon
2015 J jnl
Autom.
Zhen Kan, Justin R. Klotz, Eduardo L. Pasiliao Jr., Warren E. Dixon
2015 C conf
ACC
Teng-Hu Cheng, Zhen Kan, Justin R. Klotz, John M. Shea, Warren E. Dixon
2015 C conf
ACC
Teng-Hu Cheng, Zhen Kan, Justin R. Klotz, John M. Shea, Warren E. Dixon
2015 C conf
ACC
Justin R. Klotz, Lindsey Andrews, R. Kamalapurkar, Warren E. Dixon
2015 J jnl
CoRR
Rushikesh Kamalapurkar, Joel A. Rosenfeld, Warren E. Dixon
2015 C conf
ACC
Warren E. Dixon
2015 C conf
CCA
Yoshihiro Kushima, Kotaro Kawataka, Hiroyuki Kawai, Yasunori Kawai, Warren E. Dixon
2015 J jnl
IEEE Trans. Control. Netw. Syst.
Zhen Kan, Leenhapat Navaravong, John M. Shea, Eduardo L. Pasiliao, Warren E. Dixon
2015 conf
CDC
Anup Parikh, Rushikesh Kamalapurkar, Hsi-Yuan Chen, Warren E. Dixon
2015 J jnl
CoRR
Anup Parikh, Rushikesh Kamalapurkar, Warren E. Dixon
2015 J jnl
CoRR
Rushikesh Kamalapurkar, Lindsey Andrews, Patrick Walters, Warren E. Dixon
2015 C conf
ACC
Joel A. Rosenfeld, Rushikesh Kamalapurkar, Warren E. Dixon
2015 C conf
ACC
Rushikesh Kamalapurkar, Joel A. Rosenfeld, Warren E. Dixon
2015 C conf
ACC
Ryan J. Downey, Teng-Hu Cheng, Matthew J. Bellman, Warren E. Dixon
2015 C conf
ACC
Justin R. Klotz, Serhat Obuz, Zhen Kan, Warren E. Dixon
2015 J jnl
CoRR
Rushikesh Kamalapurkar, Nicholas R. Fischer, Serhat Obuz, Warren E. Dixon
2015 C conf
CCA
Serhat Obuz, Ryan J. Downey, Justin R. Klotz, Warren E. Dixon
2014 conf
CDC
Anup Parikh, Teng-Hu Cheng, Ryan Licitra, Warren E. Dixon
2014 conf
CDC
Lindsey Andrews, Justin Klotz, R. Kamalapurkar, Warren E. Dixon
2014 C conf
ACC
Zhen Kan, Siddhartha S. Mehta, Eduardo L. Pasiliao, J. Willard Curtis, Warren E. Dixon
2014 conf
CDC
Matthew J. Bellman, Teng-Hu Cheng, Ryan Downey, Warren E. Dixon
2014 C conf
ACC
Yasunori Kawai, Ryan J. Downey, Hiroyuki Kawai, Warren E. Dixon
2014 C conf
ACC
Justin Klotz, R. Kamalapurkar, Warren E. Dixon
2014 J jnl
CoRR
Zhen Kan, Justin Klotz, Eduardo L. Pasiliao Jr., Warren E. Dixon
2014 J jnl
CoRR
Zhen Kan, Justin Klotz, Eduardo L. Pasiliao Jr., John M. Shea, Warren E. Dixon
2014 conf
CDC
Teng-Hu Cheng, Zhen Kan, John M. Shea, Warren E. Dixon
2014 C conf
ACC
Teng-Hu Cheng, Zhen Kan, Joel A. Rosenfeld, Warren E. Dixon
2014 J jnl
Neural Networks
Huyen T. Dinh, R. Kamalapurkar, Shubhendu Bhasin, Warren E. Dixon
2014 B conf
WCNC
Sankrith Subramanian, John M. Shea, Eduardo L. Pasiliao, Marco M. Carvalho, Warren E. Dixon
2014 conf
CDC
Rushikesh Kamalapurkar, Lindsey Andrews, Patrick Walters, Warren E. Dixon
2014 C conf
ACC
Rushikesh Kamalapurkar, Justin Klotz, Warren E. Dixon
2014 J jnl
CoRR
Zhen Kan, John M. Shea, Warren E. Dixon
2014 ch.
Examining Robustness and Vulnerability of Networked Systems
Zhen Kan, John M. Shea, Warren E. Dixon
2014 J jnl
IEEE Trans. Robotics
Nicholas R. Fischer, Devin Hughes, Patrick Walters, Eric M. Schwartz, Warren E. Dixon
2014 conf
CDC
Patrick Walters, Rushikesh Kamalapurkar, Lindsey Andrews, Warren E. Dixon
2014 J jnl
IEEE Trans. Autom. Control.
Nicholas R. Fischer, Zhen Kan, Rushikesh Kamalapurkar, Warren E. Dixon
2014 C conf
ACC
Matthew J. Bellman, Teng-Hu Cheng, Ryan J. Downey, Warren E. Dixon
2014 C conf
ACC
Hiroyuki Kawai, Matthew J. Bellman, Ryan J. Downey, Warren E. Dixon
2013 J jnl
Autom.
Shubhendu Bhasin, R. Kamalapurkar, Marcus Johnson, Kyriakos G. Vamvoudakis, Frank L. Lewis, Warren E. Dixon
2013 J jnl
IEEE Trans. Cybern.
Qiang Wang, Nitin Sharma, Marcus Johnson, Chris M. Gregory, Warren E. Dixon
2013 J jnl
CoRR
Rushikesh Kamalapurkar, Huyen T. Dinh, Patrick Walters, Warren E. Dixon
2013 C conf
ACC
Rushikesh Kamalapurkar, Huyen T. Dinh, Patrick Walters, Warren E. Dixon
2013 J jnl
CoRR
Rushikesh Kamalapurkar, Huyen T. Dinh, Shubhendu Bhasin, Warren E. Dixon
2013 conf
CDC
Justin Klotz, Zhen Kan, John M. Shea, Eduardo L. Pasiliao, Warren E. Dixon
2013 J jnl
CoRR
Rushikesh Kamalapurkar, Patrick Walters, Warren E. Dixon
2013 conf
CDC
Rushikesh Kamalapurkar, Patrick Walters, Warren E. Dixon
2013 J jnl
CoRR
Rushikesh Kamalapurkar, Justin Klotz, Warren E. Dixon
2013 C conf
ACC
Zhen Kan, Justin Klotz, Eduardo L. Pasiliao, Warren E. Dixon
2013 J jnl
CoRR
Teng-Hu Cheng, Zhen Kan, Joel A. Rosenfeld, Warren E. Dixon
2013 conf
MILCOM
Leenhapat Navaravong, John M. Shea, Eduardo L. Pasiliao, Warren E. Dixon
2013 J jnl
IEEE Trans. Autom. Control.
Nicholas R. Fischer, Rushikesh Kamalapurkar, Warren E. Dixon
2013 C conf
ACC
Brendan J. Bialy, Justin Klotz, Kevin M. Brink, Warren E. Dixon
2013 J jnl
CoRR
Patrick Walters, Rushikesh Kamalapurkar, Lindsey Andrews, Warren E. Dixon
2013 J jnl
CoRR
Patrick Walters, Rushikesh Kamalapurkar, Warren E. Dixon
2013 C conf
ACC
Huyen T. Dinh, Nicholas R. Fischer, R. Kamalapurkar, Warren E. Dixon
2013 J jnl
IEEE Trans. Autom. Control.
Shubhendu Bhasin, R. Kamalapurkar, Huyen T. Dinh, Warren E. Dixon
2013 conf
CDC
Teng-Hu Cheng, Ryan Downey, Warren E. Dixon
2013 J jnl
Autom.
Nicholas R. Fischer, Ashwin P. Dani, Nitin Sharma, Warren E. Dixon
2013 J jnl
CoRR
Matthew J. Bellman, Teng-Hu Cheng, Ryan Downey, Warren E. Dixon
2013 J jnl
CoRR
Rushikesh Kamalapurkar, Justin Klotz, Ryan Downey, Warren E. Dixon
2013 J jnl
CoRR
Hiroyuki Kawai, Matthew J. Bellman, Ryan Downey, Warren E. Dixon
2013 conf
CDC
Ryan Downey, Teng-Hu Cheng, Warren E. Dixon
2012 C conf
ACC
Dohee Kim, Huyen T. Dinh, William MacKunis, Norman G. Fitz-Coy, Warren E. Dixon
2012 J jnl
IEEE Trans. Control. Syst. Technol.
Jongho Shin, H. Jin Kim, Youdan Kim, Warren E. Dixon
2012 B conf
SMC
Dongkyoung Chwa, Ashwin P. Dani, Hakjae Kim, Warren E. Dixon
2012 J jnl
IEEE Trans. Control. Syst. Technol.
Nitin Sharma, Chris M. Gregory, Marcus Johnson, Warren E. Dixon
2012 conf
CDC
Sankrith Subramanian, J. Willard Curtis, Eduardo L. Pasiliao, John M. Shea, Warren E. Dixon
2012 C conf
ACC
Huyen T. Dinh, Shubhendu Bhasin, Dohee Kim, Warren E. Dixon
2012 C conf
ACC
Zhen Kan, Justin Klotz, Teng-Hu Cheng, Warren E. Dixon
2012 J jnl
IEEE Netw.
Leenhapat Navaravong, Zhen Kan, John M. Shea, Warren E. Dixon
2012 C conf
ACC
Zhen Kan, John M. Shea, Warren E. Dixon
2012 C conf
ACC
Nicholas R. Fischer, R. Kamalapurkar, Norman G. Fitz-Coy, Warren E. Dixon
2012 J jnl
IEEE Trans. Autom. Control.
Zhen Kan, Ashwin P. Dani, John M. Shea, Warren E. Dixon
2012 conf
CDC
Kyriakos G. Vamvoudakis, Frank L. Lewis, Marcus Johnson, Warren E. Dixon
2012 conf
ICC
Leenhapat Navaravong, John M. Shea, Eduardo L. Pasiliao, Warren E. Dixon
2012 conf
CRV
Siddhartha S. Mehta, Prabir Barooah, Warren E. Dixon, Eduardo L. Pasiliao, J. Willard Curtis
2012 conf
MILCOM
Zhen Kan, Eduardo L. Pasiliao, J. Willard Curtis, Warren E. Dixon
2012 J jnl
IEEE Trans. Autom. Control.
Nitin Sharma, Shubhendu Bhasin, Qiang Wang, Warren E. Dixon
2012 conf
CDC
Nicholas R. Fischer, R. Kamalapurkar, Nitin Sharma, Warren E. Dixon
2012 J jnl
Autom.
Guoqiang Hu, Warren E. Dixon, Han Ding
2012 C conf
ACC
Nicholas R. Fischer, Zhen Kan, Warren E. Dixon
2012 J jnl
IEEE Trans. Autom. Control.
Ashwin P. Dani, Nicholas R. Fischer, Warren E. Dixon
2012 conf
MILCOM
Sankrith Subramanian, Eduardo L. Pasiliao, John M. Shea, Marco M. Carvalho, Warren E. Dixon
2011 C conf
ACC
Dohee Kim, Frederick A. Leve, Norman G. Fitz-Coy, Warren E. Dixon
2011 J jnl
Autom.
Keith Dupree, Parag M. Patre, Zachary D. Wilcox, Warren E. Dixon
2011 conf
CDC/ECC
Takashi Hiramatsu, Marcus Johnson, Norman G. Fitz-Coy, Warren E. Dixon
2011 conf
CDC/ECC
Huyen T. Dinh, R. Kamalapurkar, Shubhendu Bhasin, Warren E. Dixon
2011 conf
CDC/ECC
Zhen Kan, Ashwin P. Dani, John M. Shea, Warren E. Dixon
2011 conf
CDC/ECC
Zhen Kan, Ashwin P. Dani, John M. Shea, Warren E. Dixon
2011 J jnl
IEEE Trans. Robotics
Nicholas R. Gans, Guoqiang Hu, Kaushik Nagarajan, Warren E. Dixon
2011 J jnl
IEEE Trans. Autom. Control.
Parag M. Patre, William MacKunis, Keith Dupree, Warren E. Dixon
2011 J jnl
IEEE Trans. Control. Syst. Technol.
Shubhendu Bhasin, Keith Dupree, Parag M. Patre, Warren E. Dixon
2011 C conf
ACC
Nicholas R. Fischer, Shubhendu Bhasin, Warren E. Dixon
2011 conf
CDC/ECC
Marcus Johnson, Shubhendu Bhasin, Warren E. Dixon
2011 J jnl
CoRR
Leenhapat Navaravong, John M. Shea, Eduardo L. Pasiliao Jr., Gregory L. Barnette, Warren E. Dixon
2011 conf
MILCOM
Leenhapat Navaravong, John M. Shea, Warren E. Dixon
2011 J jnl
Autom.
Nitin Sharma, Shubhendu Bhasin, Qiang Wang, Warren E. Dixon
2011 C conf
ACC
Dohee Kim, H. Chung, Shubhendu Bhasin, Warren E. Dixon
2011 conf
CDC/ECC
Nicholas R. Fischer, Ashwin P. Dani, Nitin Sharma, Warren E. Dixon
2011 conf
CDC/ECC
Ashwin P. Dani, Zhen Kan, Nicholas R. Fischer, Warren E. Dixon
2010 conf
CDC
Shubhendu Bhasin, Marcus Johnson, Warren E. Dixon
2010 J jnl
IEEE Trans. Control. Syst. Technol.
Guoqiang Hu, Nicholas R. Gans, Norman G. Fitz-Coy, Warren E. Dixon
2010 conf
ISIC
Qiang Wang, Nitin Sharma, Marcus Johnson, Warren E. Dixon
2010 J jnl
IEEE Trans. Control. Syst. Technol.
William MacKunis, Parag M. Patre, M. Kent Kaiser, Warren E. Dixon
2010 conf
CDC
Jongho Shin, H. Jin Kim, Youdan Kim, Warren E. Dixon
2010 conf
CDC
Qiang Wang, Nitin Sharma, Marcus Johnson, Warren E. Dixon
2010 conf
CDC
Marcus Johnson, Takashi Hiramatsu, Norman G. Fitz-Coy, Warren E. Dixon
2010 J jnl
IEEE Trans. Autom. Control.
Parag M. Patre, Shubhendu Bhasin, Zachary D. Wilcox, Warren E. Dixon
2010 J jnl
Autom.
Parag M. Patre, William MacKunis, Marcus Johnson, Warren E. Dixon
2010 C conf
ACC
Shubhendu Bhasin, Parag M. Patre, Zhen Kan, Warren E. Dixon
2010 conf
CDC
Huyen T. Dinh, Shubhendu Bhasin, Warren E. Dixon
2010 J jnl
IEEE Trans. Control. Syst. Technol.
William MacKunis, Zachary D. Wilcox, M. Kent Kaiser, Warren E. Dixon
2010 conf
ISIC
Ashwin P. Dani, Khalid El Rifai, Warren E. Dixon
2010 C conf
ACC
Ashwin P. Dani, Nicholas R. Fischer, Zhen Kan, Warren E. Dixon
2010 C conf
ACC
Nitin Sharma, Shubhendu Bhasin, Qiang Wang, Warren E. Dixon
2010 conf
CDC
Nitin Sharma, Shubhendu Bhasin, Qiang Wang, Warren E. Dixon
2010 C conf
ACC
Shubhendu Bhasin, Nitin Sharma, Parag M. Patre, Warren E. Dixon
2010 conf
ISIC
Guoqiang Hu, Faryad Darabi Sahneh, Warren E. Dixon
2010 C conf
ACC
Ashwin P. Dani, Zhen Kan, Nicholas R. Fischer, Warren E. Dixon
2010 conf
ISIC
Zhen Kan, Sankrith Subramanian, John M. Shea, Warren E. Dixon
2009 J jnl
IEEE Trans. Control. Syst. Technol.
Chien-Hao Liang, Shubhendu Bhasin, Keith Dupree, Warren E. Dixon
2009 conf
CDC
Siddhartha S. Mehta, Prabir Barooah, Sara Susca, Warren E. Dixon
2009 ch.
Encyclopedia of Complexity and Systems Science
Guoqiang Hu, Nicholas R. Gans, Warren E. Dixon
2009 C conf
ACC
Shubhendu Bhasin, Keith Dupree, Zachary D. Wilcox, Warren E. Dixon
2009 ch.
Encyclopedia of Complexity and Systems Science
Warren E. Dixon
2009 conf
CDC
Parag M. Patre, Shubhendu Bhasin, Zachary D. Wilcox, Warren E. Dixon
2009 C conf
ACC
Parag M. Patre, William MacKunis, Marcus Johnson, Warren E. Dixon
2009 conf
CDC
William MacKunis, Zachary D. Wilcox, M. Kent Kaiser, Warren E. Dixon
2009 J jnl
IEEE Trans. Autom. Control.
Guoqiang Hu, William MacKunis, Nicholas R. Gans, Warren E. Dixon, Jian Chen, Aman Behal, Darren M. Dawson
2009 ch.
Encyclopedia of Complexity and Systems Science
Nicholas R. Gans, Guoqiang Hu, Warren E. Dixon
2009 conf
CDC
Keith Dupree, Parag M. Patre, Marcus Johnson, Warren E. Dixon
2009 conf
CDC
Keith Dupree, Marcus Johnson, Parag M. Patre, Warren E. Dixon
2009 conf
CDC
Marcus Johnson, Guoqiang Hu, Keith Dupree, Warren E. Dixon
2009 C conf
ACC
Nicholas R. Gans, Guoqiang Hu, Warren E. Dixon
2009 J jnl
Int. J. Robotics Autom.
Keith Dupree, Chien-Hao Liang, Guoqiang Hu, Warren E. Dixon
2009 C conf
ACC
Keith Dupree, Parag M. Patre, Zachary D. Wilcox, Warren E. Dixon
2009 C conf
ACC
Ashwin P. Dani, Nicholas R. Gans, Warren E. Dixon
2009 C conf
ACC
Sankrith Subramanian, John M. Shea, Warren E. Dixon
2009 conf
CDC
Dohee Kim, William MacKunis, Norman G. Fitz-Coy, Warren E. Dixon
2009 conf
CDC
Sankrith Subramanian, John M. Shea, Warren E. Dixon
2009 C conf
ACC
Zachary D. Wilcox, William MacKunis, S. Bhat, R. Lind, Warren E. Dixon
2008 C conf
ACC
Parag M. Patre, William MacKunis, Keith Dupree, Warren E. Dixon
2008 C conf
ACC
Parag M. Patre, William MacKunis, Keith Dupree, Warren E. Dixon
2008 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Keith Dupree, Chien-Hao Liang, Guoqiang Hu, Warren E. Dixon
2008 C conf
ACC
William MacKunis, Keith Dupree, Shubhendu Bhasin, Warren E. Dixon
2008 J jnl
IEEE Trans. Control. Syst. Technol.
Parag M. Patre, William MacKunis, Charu Makkar, Warren E. Dixon
2008 J jnl
IEEE Trans. Autom. Control.
Parag M. Patre, William MacKunis, M. Kent Kaiser, Warren E. Dixon
2008 C conf
ACC
William MacKunis, M. Kent Kaiser, Parag M. Patre, Warren E. Dixon
2008 C conf
CCA
Ashwin P. Dani, Steven J. Velat, Carl D. Crane III, Nicholas R. Gans, Warren E. Dixon
2008 C conf
ACC
Guoqiang Hu, William MacKunis, Nicholas R. Gans, Warren E. Dixon
2008 conf
ISIC
Nicholas R. Gans, Guoqiang Hu, Warren E. Dixon
2008 J jnl
IEEE Trans. Autom. Control.
Guoqiang Hu, Darren Aiken, Sumit Gupta, Warren E. Dixon
2008 conf
ISIC
Nitin Sharma, Chris M. Gregory, Marcus Johnson, Warren E. Dixon
2008 C conf
ACC
Keith Stegath, Nitin Sharma, Chris M. Gregory, Warren E. Dixon
2008 conf
CDC
Keith Dupree, Parag M. Patre, Zachary D. Wilcox, Warren E. Dixon
2008 conf
ISIC
Nicholas R. Gans, Guoqiang Hu, Warren E. Dixon
2008 J jnl
Int. J. Robotics Autom.
David Braganza, Warren E. Dixon, Darren M. Dawson, Bin Xian
2008 C conf
ACC
Nicholas R. Gans, Ashwin P. Dani, Warren E. Dixon
2007 conf
CDC
Chien-Hao Liang, Shubhendu Bhasin, Keith Dupree, Warren E. Dixon
2007 J jnl
IEEE Trans. Autom. Control.
Warren E. Dixon
2007 B conf
SMC
Keith Stegath, Nitin Sharma, Chris M. Gregory, Warren E. Dixon
2007 C conf
ACC
Parag M. Patre, William MacKunis, Kent Kaiser, Warren E. Dixon
2007 C conf
CCA
Guoqiang Hu, Siddhartha S. Mehta, Nicholas R. Gans, Warren E. Dixon
2007 C conf
CCA
Guoqiang Hu, Nicholas R. Gans, Siddhartha S. Mehta, Warren E. Dixon
2007 J jnl
IEEE Trans. Autom. Control.
Guoqiang Hu, Charu Makkar, Warren E. Dixon
2007 C conf
ACC
Keith Dupree, Nicholas R. Gans, William MacKunis, Warren E. Dixon
2007 conf
ICINCO-SPSMC
Lili Ma, Chengyu Cao, Naira Hovakimyan, Craig A. Woolsey, Warren E. Dixon
2007 C conf
ACC
Kent Kaiser, Nicholas R. Gans, Warren E. Dixon
2007 C conf
CCA
Guoqiang Hu, Warren E. Dixon
2007 J jnl
IEEE Trans. Autom. Control.
Charu Makkar, Guoqiang Hu, W. Gregory Sawyer, Warren E. Dixon
2007 J jnl
Autom.
Jian Chen, Darren M. Dawson, Warren E. Dixon, Vilas K. Chitrakaran
2007 C conf
CCA
Guoqiang Hu, Nicholas R. Gans, Warren E. Dixon
2007 C conf
ACC
Lili Ma, Chengyu Cao, Naira Hovakimyan, Warren E. Dixon, Craig A. Woolsey
2007 C conf
CCA
William MacKunis, Nicholas R. Gans, M. Kent Kaiser, Warren E. Dixon
2006 A* conf
ICRA
Guoqiang Hu, Warren E. Dixon, Sumit Gupta, Norman G. Fitz-Coy
2006 conf
CDC
Siddhartha S. Mehta, Guoqiang Hu, Nicholas R. Gans, Warren E. Dixon
2006 J jnl
Int. J. Robotics Autom.
Yongchun Fang, Warren E. Dixon, Darren M. Dawson, Jian Chen
2006 conf
CDC
Parag M. Patre, William MacKunis, Charu Makkar, Warren E. Dixon
2006 conf
CDC
Keith Dupree, Chien-Hao Liang, Guoqiang Hu, Warren E. Dixon
2006 J jnl
IEEE Trans. Robotics
Jian Chen, Warren E. Dixon, Darren M. Dawson, Michael L. McIntyre
2006 conf
CDC
Darren Aiken, Sumit Gupta, Guoqiang Hu, Warren E. Dixon
2006 conf
CDC
Guoqiang Hu, Sumit Gupta, Norman G. Fitz-Coy, Warren E. Dixon
2006 C conf
ACC
Keith Dupree, Warren E. Dixon, Guoqiang Hu, Chien-Hao Liang
2006 C conf
ACC
Sumit Gupta, Darren Aiken, Guoqiang Hu, Warren E. Dixon
2006 J jnl
Robotica
Michael L. McIntyre, Warren E. Dixon, Darren M. Dawson, Enver Tatlicioglu
2006 conf
CDC
S. C. Solanki, Warren E. Dixon, Carl D. Crane, Sumit Gupta
2006 C conf
ACC
S. S. Mehta, Warren E. Dixon, D. Mac Arthur, Carl D. Crane
2005 J jnl
IEEE Trans. Control. Syst. Technol.
Jian Chen, Darren M. Dawson, Warren E. Dixon, Aman Behal
2005 J jnl
J. Field Robotics
Aman Behal, Pradeep Setlur, Warren E. Dixon, Darren M. Dawson
2005 C conf
ACC
Michael L. McIntyre, Warren E. Dixon, Darren M. Dawson, Bin Xian
2005 conf
RoMoCo
Warren E. Dixon, W. E. Galluzo, Guoqiang Hu, Carl Crane
2005 conf
CDC/ECC
Guoqiang Hu, Warren E. Dixon, Charu Makkar
2005 C conf
ACC
Vilas K. Chitrakaran, Darren M. Dawson, Jian Chen, Warren E. Dixon
2005 J jnl
IEEE Trans. Robotics
Michael L. McIntyre, Warren E. Dixon, Darren M. Dawson, Ian D. Walker
2005 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Yongchun Fang, Warren E. Dixon, Darren M. Dawson, P. Chawda
2005 J jnl
Autom.
Vilas K. Chitrakaran, Darren M. Dawson, Warren E. Dixon, Jian Chen
2005 C conf
ACC
Charu Makkar, Warren E. Dixon, W. Gregory Sawyer, Guoqiang Hu
2005 C conf
ACC
Jian Chen, Darren M. Dawson, Warren E. Dixon, Vilas K. Chitrakaran
2005 conf
CDC/ECC
David Braganza, Warren E. Dixon, Darren M. Dawson, Bin Xian
2004 C conf
ICARCV
Yongchun Fang, Warren E. Dixon, Darren M. Dawson
2004 C conf
ACC
Warren E. Dixon
2004 J jnl
IEEE Trans. Control. Syst. Technol.
Warren E. Dixon, Marcio S. de Queiroz, Darren M. Dawson, Terrance J. Flynn
2004 conf
CDC
Jian Chen, Darren M. Dawson, Warren E. Dixon, Vilas K. Chitrakaran
2004 conf
CDC
Ximing T. Zhang, Darren M. Dawson, Warren E. Dixon, Bin Xian
2004 A* conf
ICRA
Michael L. McIntyre, Warren E. Dixon, Darren M. Dawson, Ian D. Walker
2004 J jnl
Robotica
Warren E. Dixon, Erkan Zergeroglu, Darren M. Dawson
2004 C conf
CCA
Jian Chen, Warren E. Dixon, Darren M. Dawson, Vilas K. Chitrakaran
2003 A conf
IROS
Jian Chen, Darren M. Dawson, Warren E. Dixon, Aman Behal
2003 conf
ISIC
Warren E. Dixon, Yongchun Fang, Darren M. Dawson, Jian Chen
2003 conf
CDC
Jian Chen, Aman Behal, Darren M. Dawson, Warren E. Dixon
2003 conf
CDC
Yongchun Fang, Warren E. Dixon, Darren M. Dawson, Jian Chen
2003 J jnl
IEEE Trans. Autom. Control.
Warren E. Dixon, Jian Chen
2003 A conf
IROS
Jian Chen, Warren E. Dixon, Darren M. Dawson, Michael L. McIntyre
2003 conf
CDC
Vilas K. Chitrakaran, Darren M. Dawson, Warren E. Dixon, Jian Chen
2003 C conf
ACC
Warren E. Dixon, Yongchun Fang, Darren M. Dawson, Thomas J. Flynn
2003 J jnl
IEEE Trans. Autom. Control.
Warren E. Dixon, Yongchun Fang, Darren M. Dawson, Terrance J. Flynn
2003 C conf
ACC
Yongchun Fang, Warren E. Dixon, Darren M. Dawson, Jian Chen
2003 A conf
IROS
Warren E. Dixon
2002 J jnl
IEEE Trans. Educ.
Warren E. Dixon, Darren M. Dawson, Bret T. Costic, Marcio S. de Queiroz
2002 conf
CDC
Yongchun Fang, Aman Behal, Warren E. Dixon, Darren M. Dawson
2002 A* conf
ICRA
Warren E. Dixon, Marcio S. de Queiroz, Darren M. Dawson
2002 A* conf
ICRA
V. K. Varma, Warren E. Dixon
2002 conf
CDC
Yongchun Fang, Darren M. Dawson, Warren E. Dixon, Marcio S. de Queiroz
2002 A* conf
ICRA
Warren E. Dixon, Erkan Zergeroglu, Yongchun Fang, Darren M. Dawson
2002 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Warren E. Dixon, Erkan Zergeroglu, Darren M. Dawson, Bret T. Costic
2002 J jnl
IEEE Trans. Autom. Control.
Aman Behal, Darren M. Dawson, Warren E. Dixon, Yongchun Fang
2001 A conf
IROS
Warren E. Dixon, D. Moses, Ian D. Walker, Darren M. Dawson
2001 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Warren E. Dixon, Darren M. Dawson, Erkan Zergeroglu, Aman Behal
2001 J jnl
IEEE Trans. Autom. Control.
T. Zhang, Warren E. Dixon, Erkan Zergeroglu, Chun-Yi Su
2001 J jnl
IEEE Trans. Autom. Control.
Warren E. Dixon, Erkan Zergeroglu
2001 conf
CDC
Yongchun Fang, Warren E. Dixon, Darren M. Dawson, Erkan Zergeroglu
2001 C conf
ACC
Warren E. Dixon, Darren M. Dawson, Bret T. Costic, Marcio S. de Queiroz
2000 J jnl
Robotica
Erkan Zergeroglu, Warren E. Dixon, Aman Behal, Darren M. Dawson
2000 C conf
ACC
Warren E. Dixon, Darren M. Dawson, Erkan Zergeroglu, Aman Behal
2000 J jnl
IEEE Trans. Robotics Autom.
Marcio S. de Queiroz, Fumin Zhang, Warren E. Dixon
2000 J jnl
IEEE Trans. Autom. Control.
Warren E. Dixon, E. Zergerogin
2000 A* conf
ICRA
Warren E. Dixon, Ian D. Walker, Darren M. Dawson, J. P. Hartranft
2000 J jnl
IEEE Trans. Robotics Autom.
Warren E. Dixon, Ian D. Walker, Darren M. Dawson, J. P. Hartranft
2000 J jnl
IEEE Trans. Autom. Control.
Fumin Zhang, Darren M. Dawson, Marcio S. de Queiroz, Warren E. Dixon
2000 J jnl
Robotica
Warren E. Dixon, Erkan Zergeroglu, Darren M. Dawson, Michael W. Hannan
2000 J jnl
Autom.
Warren E. Dixon, Zhong-Ping Jiang, Darren M. Dawson
2000 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Warren E. Dixon, Darren M. Dawson, Fumin Zhang, Erkan Zergeroglu
2000 conf
CDC
Aman Behal, Darren M. Dawson, Warren E. Dixon, Yongchun Fang
1999 J jnl
Robotica
Erkan Zergeroglu, Warren E. Dixon, D. Haste, Darren M. Dawson
1999 J jnl
Robotica
Warren E. Dixon, Marcio S. de Queiroz, Fumin Zhang, Darren M. Dawson
1998 A* conf
ICRA
Warren E. Dixon, Erkan Zergeroglu, Marcio S. de Queiroz, Darren M. Dawson
tests/unit/test_apk_code_analyzer.py
← Index tests/unit/test_apk_code_analyzer.py python
"""
Unit tests for APK code analysis components.

Tests APKCodeAnalyzer, LibraryFilter, SmaliParser, method enumeration,
library filtering, and method key matching. All external tools are mocked.
"""
import os
import tempfile
import textwrap

import pytest
from unittest.mock import MagicMock, patch, PropertyMock

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


def _has_mmh3():
    try:
        import mmh3  # noqa: F401
        return True
    except ImportError:
        return False


# ============================================================================
# LibraryFilter Tests
# ============================================================================

class TestLibraryFilter:
    """Tests for package-based library filtering."""

    def test_default_prefixes_loaded(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("android.app.Activity")
        assert lf.is_library("androidx.core.app.NotificationCompat")

    def test_user_class_not_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("com.example.myapp.MainActivity")
        assert not lf.is_library("org.myorg.MyClass")

    def test_dalvik_descriptor_format(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("Landroid/app/Activity;")
        assert lf.is_library("Landroidx/core/app/NotificationCompat;")
        assert not lf.is_library("Lcom/example/myapp/MainActivity;")

    def test_custom_prefixes(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter(prefixes=["com.custom."])
        assert lf.is_library("com.custom.SomeClass")
        assert not lf.is_library("android.app.Activity")

    def test_env_var_override(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        with patch.dict(os.environ, {"APK_LIBRARY_PREFIXES": "my.lib.,other.lib."}):
            lf = LibraryFilter()
            assert lf.is_library("my.lib.SomeClass")
            assert lf.is_library("other.lib.AnotherClass")
            assert not lf.is_library("android.app.Activity")

    def test_filter_stats(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        lf.is_library("android.app.Activity")
        lf.is_library("com.example.MyClass")
        lf.is_library("kotlin.Unit")
        stats = lf.get_filter_stats()
        assert stats["library"] == 2
        assert stats["user"] == 1

    def test_normalize_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        assert LibraryFilter._normalize_class_name("Lcom/example/Foo;") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com.example.Foo") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com/example/Foo") == "com.example.Foo"

    def test_google_libraries_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.google.android.gms.ads.AdView")
        assert lf.is_library("com.google.firebase.messaging.FirebaseMessagingService")
        assert lf.is_library("com.google.gson.Gson")

    def test_kotlin_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("kotlin.Unit")
        assert lf.is_library("kotlinx.coroutines.CoroutineScope")

    def test_third_party_libs_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.squareup.okhttp3.OkHttpClient")
        assert lf.is_library("io.reactivex.Observable")
        assert lf.is_library("org.apache.commons.io.IOUtils")

    def test_empty_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("")


# ============================================================================
# SmaliParser Tests
# ============================================================================

class TestSmaliParser:
    """Tests for smali file parsing."""

    SAMPLE_SMALI = textwrap.dedent("""\
        .class public Lcom/example/MyClass;
        .super Ljava/lang/Object;

        .method public constructor <init>()V
            .registers 1
            invoke-direct {p0}, Ljava/lang/Object;-><init>()V
            return-void
        .end method

        .method public onCreate(Landroid/os/Bundle;)V
            .registers 4
            .param p1, "savedInstanceState"

            .line 10
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
            const/high16 v0, 0x7f090000
            invoke-virtual {p0, v0}, Lcom/example/MyClass;->setContentView(I)V
            const-string v1, "hello"
            invoke-virtual {p0, v1}, Lcom/example/MyClass;->log(Ljava/lang/String;)V
            return-void
        .end method

        .method public abstract doSomething()V
        .end method

        .method public native nativeMethod()V
        .end method
    """)

    def test_parse_smali_content(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        # abstract and native should be skipped
        assert len(methods) == 2

    def test_method_names_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "<init>" in names
        assert "onCreate" in names

    def test_class_name_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        for m in methods:
            assert m.class_name == "Lcom/example/MyClass;"

    def test_method_signature(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.method_signature == "(Landroid/os/Bundle;)V"

    def test_instruction_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        # invoke-super, const/high16, invoke-virtual, const-string, invoke-virtual, return-void
        assert oncreate.instruction_count == 6

    def test_register_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.register_count == 4

    def test_register_count_locals_directive(self):
        """apktool outputs .locals by default, not .registers."""
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        smali_with_locals = textwrap.dedent("""\
            .class public Lcom/example/Locals;
            .super Ljava/lang/Object;

            .method public doWork()V
                .locals 3
                const/4 v0, 0x0
                const/4 v1, 0x1
                add-int v2, v0, v1
                return-void
            .end method
        """)
        methods = SmaliParser._parse_smali_content(smali_with_locals)
        assert len(methods) == 1
        assert methods[0].register_count == 3

    def test_abstract_native_skipped(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "doSomething" not in names
        assert "nativeMethod" not in names

    def test_normalize_smali_body(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .line 10
            # comment
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

            const-string v1, "hello"
        """)
        normalized = SmaliParser.normalize_smali_body(body)
        assert ".line" not in normalized
        assert "# comment" not in normalized
        assert "invoke-super" in normalized
        assert "const-string" in normalized

    def test_count_instructions(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .param p1, "x"
            invoke-virtual {p0}, Lcom/example/Foo;->bar()V
            const/4 v0, 0x0
            :label_0
            if-eqz v0, :label_1
            return-void
            :label_1
            goto :label_0
        """)
        assert SmaliParser.count_instructions(body) == 5

    def test_make_method_key(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        key = SmaliParser.make_method_key(
            "Lcom/example/Foo;", "bar", "(I)V"
        )
        assert key == "Lcom/example/Foo;->bar(I)V"

    def test_parse_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.NamedTemporaryFile(
            mode="w", suffix=".smali", delete=False
        ) as f:
            f.write(self.SAMPLE_SMALI)
            f.flush()
            try:
                methods = SmaliParser.parse_smali_file(f.name)
                assert len(methods) == 2
            finally:
                os.unlink(f.name)

    def test_parse_smali_directory(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.TemporaryDirectory() as tmpdir:
            # Create nested dir structure
            pkg_dir = os.path.join(tmpdir, "com", "example")
            os.makedirs(pkg_dir)
            with open(os.path.join(pkg_dir, "MyClass.smali"), "w") as f:
                f.write(self.SAMPLE_SMALI)

            result = SmaliParser.parse_smali_directory(tmpdir)
            assert len(result) == 2
            # Check keys are in expected format
            for key in result:
                assert "->" in key

    def test_empty_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content("")
        assert methods == []

    def test_class_only_no_methods(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        content = ".class public Lcom/example/Empty;\n.super Ljava/lang/Object;\n"
        methods = SmaliParser._parse_smali_content(content)
        assert methods == []


# ============================================================================
# MethodExtractor Tests (Hashing, Obfuscation, Type Conversion)
# ============================================================================

class TestMethodExtractor:
    """Tests for method-level content extraction and hashing."""

    def test_compute_sha256(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h = compute_sha256("test content")
        assert len(h) == 64
        assert h == compute_sha256("test content")  # deterministic

    def test_compute_sha256_different_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("a") != compute_sha256("b")

    def test_compute_ssdeep_short_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        result = compute_ssdeep("short")
        assert result is None

    def test_compute_ssdeep_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        result = compute_ssdeep("x" * 200)
        # May be None depending on entropy, but shouldn't crash
        assert result is None or isinstance(result, str)

    def test_compute_tlsh_short_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        result = compute_tlsh("short")
        assert result is None

    def test_compute_tlsh_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        data = "".join(chr(i % 256) for i in range(200))
        result = compute_tlsh(data)
        assert result is None or isinstance(result, str)

    def test_compute_minhash_returns_none_without_mmh3(self):
        from unittest.mock import patch
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        with patch.dict("sys.modules", {"mmh3": None}):
            # Force reimport to hit ImportError
            import importlib
            import redb.extractors.decompiler.apk.method_extractor as mod
            importlib.reload(mod)
            result = mod.compute_minhash("line1\nline2\nline3\nline4")
            # mmh3 may or may not be available; just check it doesn't crash
            assert result is None or isinstance(result, list)
            importlib.reload(mod)  # restore

    def test_compute_minhash_too_few_lines(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        result = compute_minhash("invoke-direct {v0}, Lfoo;->bar()V")
        # Only 1 instruction line, need at least 3 for 3-grams
        assert result is None

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig1 = compute_minhash(smali)
        sig2 = compute_minhash(smali)
        assert sig1 is not None
        assert sig1 == sig2

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_signature_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        assert len(sig) == 64  # SIGNATURE_LENGTH

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_value_range(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        for val in sig:
            assert 0 <= val < 256  # 8-bit values

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_different_inputs_differ(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali_a = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_b = (
            "sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;\n"
            "const-string v1, \"world\"\n"
            "invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V\n"
            "return-void"
        )
        sig_a = compute_minhash(smali_a)
        sig_b = compute_minhash(smali_b)
        assert sig_a is not None
        assert sig_b is not None
        assert sig_a != sig_b

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_skips_directives_and_labels(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        # Directives and labels should be filtered out
        smali = (
            ".registers 3\n"
            ":start\n"
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            ".line 10\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_clean = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig_with_directives = compute_minhash(smali)
        sig_clean = compute_minhash(smali_clean)
        assert sig_with_directives == sig_clean

    def test_dalvik_to_java_class(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_class
        assert dalvik_to_java_class("Lcom/example/Foo;") == "com.example.Foo"
        assert dalvik_to_java_class("com.example.Foo") == "com.example.Foo"

    def test_dalvik_type_to_java(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("V") == "void"
        assert dalvik_type_to_java("I") == "int"
        assert dalvik_type_to_java("Z") == "boolean"
        assert dalvik_type_to_java("Ljava/lang/String;") == "String"
        assert dalvik_type_to_java("[I") == "int[]"
        assert dalvik_type_to_java("[Ljava/lang/String;") == "String[]"

    def test_dalvik_to_java_prototype(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("onCreate", "(Landroid/os/Bundle;)V")
        assert result == "void onCreate(Bundle)"

    def test_dalvik_to_java_prototype_no_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("toString", "()Ljava/lang/String;")
        assert result == "String toString()"

    def test_dalvik_to_java_prototype_multiple_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("foo", "(ILjava/lang/String;Z)V")
        assert result == "void foo(int, String, boolean)"

    def test_detect_obfuscation_short_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        result = detect_obfuscation_indicators("a", "Lcom/example/Foo;", "", 10)
        assert result["short_method_name"] is True
        result = detect_obfuscation_indicators("onCreate", "Lcom/example/Foo;", "", 10)
        assert result["short_method_name"] is False

    def test_detect_obfuscation_short_class(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        result = detect_obfuscation_indicators("foo", "Lcom/example/a;", "", 10)
        assert result["short_class_name"] is True
        result = detect_obfuscation_indicators("foo", "Lcom/example/MainActivity;", "", 10)
        assert result["short_class_name"] is False

    def test_detect_reflection_calls(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "invoke-virtual {v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_reflection_calls"] is True

    def test_detect_no_reflection(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "invoke-virtual {p0}, Lcom/example/Foo;->bar()V"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_reflection_calls"] is False

    def test_detect_string_encryption(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'const-string v0, "encrypted"\n    invoke-static {v0}, Lcom/example/Crypto;->decrypt(Ljava/lang/String;)Ljava/lang/String;'
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_string_encryption"] is True

    def test_detect_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label_0"] * 20)
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 30)
        # threshold = max(5, 30*0.15) = 5, 20 > 5
        assert result["excessive_goto_count"] is True

    def test_detect_no_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "goto :label_0\nreturn-void"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 100)
        assert result["excessive_goto_count"] is False

    def test_parse_dalvik_params_empty(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("") == []

    def test_parse_dalvik_params_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("IZJ")
        assert result == ["I", "Z", "J"]

    def test_parse_dalvik_params_object(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("Ljava/lang/String;")
        assert result == ["Ljava/lang/String;"]

    def test_parse_dalvik_params_mixed(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("ILjava/lang/String;Z")
        assert result == ["I", "Ljava/lang/String;", "Z"]

    def test_parse_dalvik_params_array(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("[I[Ljava/lang/String;")
        assert result == ["[I", "[Ljava/lang/String;"]


# ============================================================================
# APKCodeAnalyzer Tests (mocked tools)
# ============================================================================

class TestAPKCodeAnalyzer:
    """Tests for the APKCodeAnalyzer orchestration."""

    def test_init_defaults(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        assert analyzer.filepath == "/fake/path.apk"
        assert analyzer.timeout == 600
        assert analyzer.min_instructions == 5

    def test_init_custom_timeout(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk", timeout=300)
        assert analyzer.timeout == 300

    def test_init_min_instructions_env(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        with patch.dict(os.environ, {"APK_MIN_METHOD_INSTRUCTIONS": "10"}):
            analyzer = APKCodeAnalyzer("/fake/path.apk")
            assert analyzer.min_instructions == 10

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    @patch.object(
        __import__("redb.extractors.decompiler.apk.apktool_wrapper", fromlist=["ApktoolDisassembler"]).ApktoolDisassembler,
        "disassemble",
        return_value=False,
    )
    @patch.object(
        __import__("redb.extractors.decompiler.apk.jadx_wrapper", fromlist=["JADXDecompiler"]).JADXDecompiler,
        "decompile",
        return_value=False,
    )
    def test_extract_returns_dict_keys(self, mock_jadx, mock_apktool, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_analysis = MagicMock()
        mock_analysis.get_methods.return_value = []
        mock_androguard.return_value = (MagicMock(), [], mock_analysis)

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert "decompiled_content" in results
        assert "decompiled_refs" in results
        assert "smali_content" in results
        assert "smali_refs" in results
        assert "similarity_metrics" in results
        assert "strings" in results
        assert "analysis_errors" in results
        analyzer.cleanup()

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    def test_extract_androguard_failure(self, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_androguard.side_effect = Exception("Analysis failed")

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert len(results["analysis_errors"]) > 0
        analyzer.cleanup()

    def test_cleanup_removes_temp_dirs(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        tmpdir = tempfile.mkdtemp()
        analyzer._temp_dirs.append(tmpdir)
        assert os.path.isdir(tmpdir)
        analyzer.cleanup()
        assert not os.path.isdir(tmpdir)

    def test_normalize_java(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_java
        source = "  public void foo() {\n    int x = 1;\n  }\n"
        normalized = _normalize_java(source)
        assert normalized == "public void foo() {\nint x = 1;\n}"


class TestNormalizeAndroguardOperands:
    """Tests for androguard-to-apktool output normalization."""

    def test_invoke_adds_braces(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-direct",
            "v1, Ljava/lang/Object;-><init>()V"
        )
        assert result == "{v1}, Ljava/lang/Object;-><init>()V"

    def test_invoke_virtual_multiple_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual",
            "v0, v1, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"
        )
        assert result == "{v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"

    def test_invoke_static_no_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        # invoke-static with no register args (rare but possible)
        result = _normalize_androguard_operands(
            "invoke-static",
            "Ljava/lang/System;->gc()V"
        )
        # First part starts with L, so no registers to wrap
        assert result == "Ljava/lang/System;->gc()V"

    def test_invoke_range(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual/range",
            "v3, v4, v5, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"
        )
        assert result == "{v3, v4, v5}, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"

    def test_iget_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iget-object",
            "v0, v4, LF;->a Ljava/lang/String;"
        )
        assert result == "v0, v4, LF;->a:Ljava/lang/String;"

    def test_iput_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iput-object",
            "v0, v1, LA;->b Ljava/lang/String;"
        )
        assert result == "v0, v1, LA;->b:Ljava/lang/String;"

    def test_sget_primitive_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sget",
            "v0, Lcom/Foo;->count I"
        )
        assert result == "v0, Lcom/Foo;->count:I"

    def test_sput_array_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sput-object",
            "v0, Lcom/Foo;->data [B"
        )
        assert result == "v0, Lcom/Foo;->data:[B"

    def test_non_invoke_non_field_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "const-string",
            'v0, "hello world"'
        )
        assert result == 'v0, "hello world"'

    def test_move_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("move", "v0, v4")
        assert result == "v0, v4"

    def test_goto_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("goto", "+005h")
        assert result == "+005h"


class TestSmaliCFG:
    """Tests for smali CFG construction and metrics computation."""

    def test_empty_body(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        m = compute_cfg_metrics("")
        assert m.block_count == 0
        assert m.cyclomatic_complexity == 1

    def test_linear_method_apktool(self):
        """Single basic block — no branches."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            invoke-direct {v1}, Ljava/lang/Object;-><init>()V
            const-string v0, "hello"
            iput-object v0, v1, LA;->a:Ljava/lang/String;
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1
        assert m.loop_count == 0
        assert m.max_depth == 0
        assert m.max_fan_out == 0

    def test_linear_method_androguard(self):
        """Single basic block — androguard format (no labels/directives)."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "    const-string v0, \"hello\"\n"
            "    iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "    return-void"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1

    def test_if_branch_apktool(self):
        """Diamond pattern: if-else with two paths merging."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        # Blocks: [const,if] [const,goto] [const] [return]
        assert m.block_count == 4
        assert m.cyclomatic_complexity == 2  # E - N + 2
        assert m.loop_count == 0
        assert m.max_fan_out == 2  # if-branch has 2 successors

    def test_loop_apktool(self):
        """Simple loop: goto back to earlier label."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            :loop_start
            add-int/lit8 v0, v0, 0x1
            const/16 v1, 0xa
            if-lt v0, v1, :loop_start
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 1  # back edge from if-lt to loop_start
        assert m.cyclomatic_complexity >= 2

    def test_if_branch_androguard(self):
        """If-else in androguard offset format."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    const/4 v0, 0x0\n"
            "    if-eqz v0, +2h\n"        # skip 2 instructions ahead
            "    const/4 v0, 0x1\n"
            "    goto +1h\n"               # skip 1 ahead
            "    const/4 v0, 0x2\n"
            "    return v0"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count >= 3
        assert m.cyclomatic_complexity >= 2

    def test_multiple_if_branches(self):
        """Multiple if-branches increase cyclomatic complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            if-eqz v0, :cond_0
            if-eqz v1, :cond_1
            const/4 v2, 0x0
            goto :end
            :cond_0
            const/4 v2, 0x1
            goto :end
            :cond_1
            const/4 v2, 0x2
            :end
            return v2
        """)
        m = compute_cfg_metrics(smali)
        # Two if-branches: CC should be >= 3
        assert m.cyclomatic_complexity >= 3

    def test_return_terminates_block(self):
        """Return instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            const/4 v0, 0x0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_throw_terminates_block(self):
        """Throw instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            new-instance v0, Ljava/lang/RuntimeException;
            invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
            throw v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_max_depth_linear_chain(self):
        """Chain of blocks gives increasing depth."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        # 3 blocks chained: entry -> if -> fall-through -> return
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-nez v0, :cond_0
            const/4 v0, 0x1
            :cond_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.max_depth >= 1

    def test_nested_loop_apktool(self):
        """Nested loop: two back edges."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            const/4 v0, 0x0
            :outer
            const/4 v1, 0x0
            :inner
            add-int/lit8 v1, v1, 0x1
            if-lt v1, v2, :inner
            add-int/lit8 v0, v0, 0x1
            if-lt v0, v2, :outer
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 2

    def test_consistency_formula(self):
        """Verify E - N + 2 formula matches cyclomatic_complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        expected_cc = m.edge_count - m.block_count + 2
        assert m.cyclomatic_complexity == max(1, expected_cc)