Kai Hu

159 papers A* 6B 1C 3Misc 8Journal 96Unranked 44
YearRankTypeTitle / Venue / Authors
2026 J jnl
Microelectron. J.
Xiaogang Yang, Jinghe Wei, Kai Hu, Ke Ding
2026 J jnl
Appl. Intell.
Shaobo He, Kai Hu, Yuexi Peng, Mengjiao Wang, Zhijun Li
2026 J jnl
Computing
Jiyuan Tang, Wangping Zhou, Kai Hu, Dehua Yang
2026 J jnl
IACR Cryptol. ePrint Arch.
Kai Hu, Gregor Leander, Håvard Raddum, Arne Sandrib, Aleksei Udovenko
2026 J jnl
IACR Trans. Symmetric Cryptol.
Kai Hu, Gregor Leander, Håvard Raddum, Arne Sandrib, Aleksei Udovenko
2026 J jnl
Digit. Signal Process.
Kai Hu, Peiguang Jing, Renhe Liu, Bo Wei, Yu Liu
2026 J jnl
CoRR
Kai Hu, Abhinav Aggarwal, Mehran Khodabandeh, David Zhang, Eric Hsin, Li Chen, Ankit Jain, Matt Fredrikson, Akash Bharadwaj
2026 J jnl
CoRR
Kai Hu, Haoqi Hu, Matt Fredrikson
2026 J jnl
CoRR
Chen Ling, Kai Hu, Hangcheng Liu, Xingshuo Han, Tianwei Zhang, Changhai Ou
2026 J jnl
CoRR
Kai Hu, Yaozu Feng, Vladimir Lysenko, Ya Guo, Huayi Wu
2026 J jnl
CoRR
Weichen Yu, Ravi Mangal, Yinyi Luo, Kai Hu, Jingxuan He, Corina S. Pasareanu, Matt Fredrikson
2026 J jnl
IEEE Trans. Broadcast.
Kai Hu, Han Wang, Yongxiang Lyu, Renhe Liu, Yu Liu
2026 J jnl
CoRR
Kai Hu, Junfu Tan, Fang Xu, Ramy Samy, Yu Liu
2025 J jnl
CoRR
Yushen Chen, Kai Hu, Long Zhou, Shulin Feng, Xusheng Yang, Hangting Chen, Xie Chen
2025 conf
ITSC
Jiao Ye, Yuwei Yang, Zhongxi Qiu, Qi Yang, Kai Hu, Jun Chen, Enze Shi
2025 J jnl
J. Intell. Manuf.
Hang Zhao, Kai Hu, Zehui Yuan, Shaowen Yao, Libo Feng
2025 conf
BIBM
Chenyan Wen, Yuan Zhang, Kai Hu
2025 Misc conf
ICASSP
Haochen Wang, Kai Hu, Liangcai Gao
2025 J jnl
CoRR
Haochen Wang, Kai Hu, Liangcai Gao
2025 conf
VTC2025-Fall
Xibo Fang, Yigao Ning, Xuan Zhao, Kai Hu
2025 J jnl
IEEE Trans. Instrum. Meas.
Renhe Liu, Han Wang, Kai Hu, Shaochu Wang, Yu Liu
2025 J jnl
IEEE Trans. Artif. Intell.
Carlo Adornetto, Adrian Mora, Kai Hu, Leticia Izquierdo Garcia, Parfait Atchade-Adelomou, Gianluigi Greco, Luis Alberto Alonso Pastor, Kent Larson
2025 J jnl
CoRR
Kai Hu, Parfait Atchade-Adelomou, Carlo Adornetto, Adrian Mora-Carrero, Luis Alonso Pastor, Ariel Noyman, Yubo Liu, Kent Larson
2025 J jnl
CoRR
Yinrong Hong, Zhiquan Tan, Kai Hu
2025 conf
ACL (Findings)
Yicheng Chen, Yining Li, Kai Hu, Zerun Ma, Haochen Ye, Kai Chen
2025 J jnl
CoRR
Yicheng Chen, Yining Li, Kai Hu, Zerun Ma, Haochen Ye, Kai Chen
2025 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Kai Hu, Chu-he Lin, Xing Jin, Hangjuan Lin
2025 conf
BMSB
Kaian Wang, Longhao Zou, Haoyu Zhang, Tonghao Wu, Zihao Chen, Kai Hu
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Fang Xu, Zhijie Xie, Kai Hu, Yu Liu, Shenghui Song, Thomas Aaron Gulliver, Yiyuan Xie, Yandong Yang, Bin Duo, Yuanchen Wang
2025 J jnl
CoRR
Shijun Shi, Jing Xu, Zhihang Li, Chunli Peng, Xiaoda Yang, Lijing Lu, Kai Hu, Jiangning Zhang
2025 J jnl
CoRR
Kai Hu, Han Wang, Renhe Liu, Zhilin Li, Shenghui Song, Yu Liu
2025 Misc conf
ICASSP
An Luo, Kai Hu, Kai Jiang
2025 J jnl
IEEE Access
Xinya Fan, Jianwen Hu, Kai Hu
2025 J jnl
CoRR
Kai Hu, Zhidan Zhao, Zhifeng Hao
2025 J jnl
Clust. Comput.
Libo Feng, Peng Wu, Kai Hu, Shaowen Yao
2025 A* conf
CVPR
Shijun Shi, Jing Xu, Lijing Lu, Zhihang Li, Kai Hu
2025 J jnl
CoRR
Shijun Shi, Jing Xu, Lijing Lu, Zhihang Li, Kai Hu
2025 J jnl
Bus. Process. Manag. J.
Liping Wu, Xingchen Yi, Kai Hu, Oleksii Lyulyov, Tetyana Pimonenko
2025 J jnl
CoRR
Kai Hu, Weichen Yu, Li Zhang, Alexander Robey, Andy Zou, Chengming Xu, Haoqi Hu, Matt Fredrikson
2025 J jnl
CoRR
Xusheng Yang, Long Zhou, Wenfu Wang, Kai Hu, Shulin Feng, Chenxing Li, Meng Yu, Dong Yu, Yuexian Zou
2025 J jnl
CoRR
Jiawei Wang, Kai Hu, Qiang Huo
2025 J jnl
Pattern Recognit.
Jiawei Wang, Kai Hu, Qiang Huo
2025 J jnl
CoRR
Lingfan Zhang, Chen Liu, Chengming Xu, Kai Hu, Donghao Luo, Chengjie Wang, Yanwei Fu, Yuan Yao
2025 conf
ICC Workshops
Kai Hu, Longhao Zou, Mingcheng Luo, Jun Jiang, Rui Li
2025 J jnl
IEEE Netw.
Kai Hu, Longhao Zou, Zihao Chen, Jun Jiang, Fan Jiang, Xiaofeng Tao
2025 J jnl
IEEE Trans. Parallel Distributed Syst.
Yuan Yao, Yujiao Hu, Yi Dang, Wei Tao, Kai Hu, Qiming Huang, Zhe Peng, Gang Yang, Xingshe Zhou
2024 Misc conf
ICASSP
Renhe Liu, Yu Liu, Han Wang, Kai Hu, Shan Du
2024 A* conf
ICLR
Kai Hu, Klas Leino, Zifan Wang, Matt Fredrikson
2024 J jnl
Int. J. Imaging Syst. Technol.
Dan Liang, Yangjun Pi, Kai Hu, Yuguo Cui, Ye Huang, Dongtai Liang, Shi-Liang Feng
2024 conf
ACISP (1)
Huina Li, Haochen Zhang, Kai Hu, Guozhen Liu, Weidong Qiu
2024 C conf
ISCAS
Kai Hu, Yu Liu, Fang Xu, Renhe Liu, Han Wang, Shenghui Song
2024 J jnl
Future Gener. Comput. Syst.
Libo Feng, Fei Qiu, Kai Hu, Bei Yu, Junyu Lin, Shaowen Yao
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Qinghua Yu, Chuang Zhang, Jialiang Chen, Ben Ge, Yan He, Kai Hu, Shengli Sun
2024 conf
VTC Spring
Kai Hu, Longhao Zou, Jun Jiang, Gabriel-Miro Muntean
2024 J jnl
CoRR
Zhihao Du, Qian Chen, Shiliang Zhang, Kai Hu, Heng Lu, Yexin Yang, Hangrui Hu, Siqi Zheng, Yue Gu, Ziyang Ma, Zhifu Gao, Zhijie Yan
2024 conf
ICDAR (4)
Jiawei Wang, Kai Hu, Qiang Huo
2024 J jnl
CoRR
Jiawei Wang, Kai Hu, Qiang Huo
2024 conf
ROBIO
Hao Chen, Kai Hu, Longlong Hu, Ziqi Zhou, Yao Li, Bing Li
2024 J jnl
CoRR
Jiawei Wang, Kai Hu, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 J jnl
Pattern Recognit.
Jiawei Wang, Kai Hu, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 conf
ICDAR (1)
Haochen Wang, Kai Hu, Haoyu Dong, Liangcai Gao
2024 J jnl
CoRR
Haochen Wang, Kai Hu, Haoyu Dong, Liangcai Gao
2024 conf
ICDAR (1)
Jiawei Wang, Shunchi Zhang, Kai Hu, Chixiang Ma, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 J jnl
CoRR
Jiawei Wang, Shunchi Zhang, Kai Hu, Chixiang Ma, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 A* conf
NeurIPS
Kai Hu, Weichen Yu, Yining Li, Tianjun Yao, Xiang Li, Wenhe Liu, Lijun Yu, Zhiqiang Shen, Kai Chen, Matt Fredrikson
2024 J jnl
CoRR
Kai Hu, Weichen Yu, Tianjun Yao, Xiang Li, Wenhe Liu, Lijun Yu, Yining Li, Kai Chen, Zhiqiang Shen, Matt Fredrikson
2024 J jnl
Neural Comput. Appl.
Kai Hu, Yu Liu, Renhe Liu, Wei Lu, Gang Yu, Bin Fu
2024 J jnl
CoRR
Keyu An, Qian Chen, Chong Deng, Zhihao Du, Changfeng Gao, Zhifu Gao, Yue Gu, Ting He, Hangrui Hu, Kai Hu, Shengpeng Ji, Yabin Li, Zerui Li, Heng Lu, Haoneng Luo, Xiang Lv, Bin Ma, Ziyang Ma, Chongjia Ni, Changhe Song, Jiaqi Shi, Xian Shi, Hao Wang, Wen Wang, Yuxuan Wang, Zhangyu Xiao, Zhijie Yan, Yexin Yang, Bin Zhang, Qinglin Zhang, Shiliang Zhang, Nan Zhao, Siqi Zheng
2024 Misc conf
ICASSP
Zhihao Du, Shiliang Zhang, Kai Hu, Siqi Zheng
2024 J jnl
IACR Cryptol. ePrint Arch.
Kai Hu
2024 J jnl
Future Gener. Comput. Syst.
Libo Feng, Yifan Liu, Kai Hu, Xue Zeng, Fake Fang, Jiale Xie, Shaowen Yao
2024 J jnl
Pattern Recognit.
Kai Hu, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 conf
ECC
Kai Hu, Qian Wang, Tian Shi, Kohei Nakajima, Yongping Pan
2024 J jnl
CoRR
Yue Hu, Kai Hu, Patrick X. Zhao, Javed Khan, Chengming Xu
2024 J jnl
CoRR
Chengming Xu, Kai Hu, Donghao Luo, Jiangning Zhang, Wei Li, Yanhao Ge, Chengjie Wang
2024 J jnl
CoRR
Ariel Noyman, Kai Hu, Kent Larson
2024 conf
ICDAR (6)
Kai Hu, Jiawei Wang, Weihong Lin, Zhuoyao Zhong, Lei Sun, Qiang Huo
2024 J jnl
CoRR
Kai Hu, Jiawei Wang, Weihong Lin, Zhuoyao Zhong, Lei Sun, Qiang Huo
2023 conf
ICDAR (5)
Zhuoyao Zhong, Jiawei Wang, Haiqing Sun, Kai Hu, Erhan Zhang, Lei Sun, Qiang Huo
2023 A* conf
AAAI
Kai Hu, Zhuoyuan Wu, Zhuoyao Zhong, Weihong Lin, Lei Sun, Qiang Huo
2023 J jnl
CoRR
Kai Hu, Zhuoyuan Wu, Zhuoyao Zhong, Weihong Lin, Lei Sun, Qiang Huo
2023 J jnl
CoRR
Kai Hu, Klas Leino, Zifan Wang, Matt Fredrikson
2023 J jnl
IACR Cryptol. ePrint Arch.
Anubhab Baksi, Jakub Breier, Anupam Chattopadhyay, Tomas Gerlich, Sylvain Guilley, Naina Gupta, Kai Hu, Takanori Isobe, Arpan Jati, Petr Jedlicka, Hyunjun Kim, Fukang Liu, Zdenek Martinasek, Kosei Sakamoto, Hwajeong Seo, Rentaro Shiba, Ritu Ranjan Shrivastwa
2023 conf
BMSB
Kai Hu, Lei Zhan, Longhao Zou, Yi Han, Ting Bi, Gabriel-Miro Muntean
2023 conf
ICIC (2)
Kai Hu, Ran Chen, Zhong-Qiu Zhao
2023 conf
ICIC (2)
Ran Chen, Kai Hu, Zhong-Qiu Zhao
2023 conf
VTC2023-Spring
Kai Hu, Lei Zhan, Longhao Zou, Zuozhou Chen, Gabriel-Miro Muntean
2023 J jnl
J. Intell. Fuzzy Syst.
Qiaozhen Zhou, Fang Wang, Xuanyu Zhao, Kai Hu, Yujian Zhang, Xin Shan, Xin Lin, Yupeng Zhang, Ke Shan, Kailiang Zhang
2023 J jnl
IACR Cryptol. ePrint Arch.
Manas Wadhwa, Anubhab Baksi, Kai Hu, Anupam Chattopadhyay, Takanori Isobe, Dhiman Saha
2023 J jnl
CoRR
Zhihao Du, Shiliang Zhang, Kai Hu, Siqi Zheng
2023 J jnl
CoRR
Ravi Mangal, Klas Leino, Zifan Wang, Kai Hu, Weicheng Yu, Corina S. Pasareanu, Anupam Datta, Matt Fredrikson
2023 J jnl
CoRR
Jiaming Wang, Zhihao Du, Qian Chen, Yunfei Chu, Zhifu Gao, Zerui Li, Kai Hu, Xiaohuan Zhou, Jin Xu, Ziyang Ma, Wen Wang, Siqi Zheng, Chang Zhou, Zhijie Yan, Shiliang Zhang
2023 J jnl
Microelectron. J.
Xin Yin, Yemei Han, Meibing Ma, Kaisong Shen, Kai Hu, Zheng Sun, Fang Wang, Haitao Wu, Kailiang Zhang
2023 conf
CASE
Kai Hu, Xiao Hu, Lei Qi, Guowei Lu, Yi Zhong, Yi Han
2023 conf
BMSB
Lei Zhan, Kai Hu, Longhao Zou, Zhenhui Yuan, Gabriel-Miro Muntean
2023 J jnl
IEEE Access
Kai Hu, Guangming Zhang, Wenyi Zhang
2023 J jnl
CoRR
Kai Hu, Andy Zou, Zifan Wang, Klas Leino, Matt Fredrikson
2023 conf
ICONIP (2)
Shu Mo, Kai Hu, Weibing Li, Yongping Pan
2023 A* conf
NeurIPS
Kai Hu, Andy Zou, Zifan Wang, Klas Leino, Matt Fredrikson
2022 J jnl
IACR Cryptol. ePrint Arch.
Huina Li, Guozhen Liu, Haochen Zhang, Kai Hu, Jian Guo, Weidong Qiu
2022 J jnl
CoRR
Yansong Li, Kai Hu, Kohei Nakajima, Yongping Pan
2022 J jnl
CoRR
Jianhong Tu, Zeyu Cui, Xiaohuan Zhou, Siqi Zheng, Kai Hu, Ju Fan, Chang Zhou
2022 J jnl
CoRR
Kai Hu, Yu Liu, Renhe Liu, Wei Lu, Gang Yu, Bin Fu
2022 conf
ITSC
Bokui Chen, Kai Hu, Yue Li, Lixin Miao
2022 J jnl
IEEE Access
Kai Hu, Wenyi Zhang
2022 J jnl
Sensors
Zhaolan Wei, Mengting Lv, Minghui Shen, Haijun Wang, Qixuan You, Kai Hu, Shaomin Jia
2022 A* conf
CVPR
Wentong Liao, Kai Hu, Michael Ying Yang, Bodo Rosenhahn
2022 conf
WMT
Xian Qian, Kai Hu, Jiaqiang Wang, Yifeng Liu, Xingyuan Pan, Jun Cao, Mingxuan Wang
2022 J jnl
CoRR
Xian Qian, Kai Hu, Jiaqiang Wang, Yifeng Liu, Xingyuan Pan, Jun Cao, Mingxuan Wang
2021 J jnl
Neurocomputing
Shuo Tian, Lianhua Qu, Lei Wang, Kai Hu, Nan Li, Weixia Xu
2021 conf
ICIRA (3)
ShiKeat Lee, Zhenguo Nie, Handing Xu, Kai Hu, Zhao Gong, Qizhi Meng, Fugui Xie, Xin-Jun Liu
2021 conf
WHISPERS
Ulrike Pestel-Schiller, Kai Hu, Daniel Gritzner, Jörn Ostermann
2021 J jnl
IEEE Embed. Syst. Lett.
Shuo Tian, Kai Hu, Shasha Guo, Shiming Li, Lei Wang, Weixia Xu
2021 J jnl
CoRR
Kai Hu, Wentong Liao, Michael Ying Yang, Bodo Rosenhahn
2021 J jnl
CoRR
Weihong Lin, Qifang Gao, Lei Sun, Zhuoyao Zhong, Kai Hu, Qin Ren, Qiang Huo
2021 conf
ICDAR (1)
Weihong Lin, Qifang Gao, Lei Sun, Zhuoyao Zhong, Kai Hu, Qin Ren, Qiang Huo
2020 J jnl
CoRR
Shuo Tian, Lianhua Qu, Kai Hu, Nan Li, Lei Wang, Weixia Xu
2020 J jnl
IEEE Access
Kai Hu, Guangming Zhang
2020 conf
ICONIP (5)
Kai Hu, Dong Ding, Shuo Tian, Rui Gong, Li Luo, Lei Wang
2020 J jnl
IEEE Netw.
Minho Jo, Kai Hu, Richard Yu, Li Sun, Mauro Conti, Qinghe Du
2020 B conf
IJCNN
Kai Hu, Shuo Tian, Shasha Guo, Nan Li, Li Luo, Lei Wang
2019 J jnl
IEICE Electron. Express
Xianzhao Xia, Mao Ye, Jiaji He, Kai Hu, Yiqiang Zhao
2019 conf
AffCon@AAAI
Jielin Qiu, Xiaoshi Chen, Kai Hu
2019 C conf
IGARSS
Yizhen Wang, Qi Han, Kai Hu, Dechen Zhan
2019 J jnl
Sensors
Liguo Qu, Jianguo Liu, Yasong Deng, Liang Xu, Kai Hu, Weifeng Yang, Ling Jin, Xiaoxiao Cheng
2019 J jnl
Int. J. Imaging Syst. Technol.
Bin Sun, Weidan Zhu, Chengwei Luo, Kai Hu, Yu Hu, Jingjing Gao
2019 J jnl
IEICE Electron. Express
Jiaji He, Yanjiang Liu, Yidong Yuan, Kai Hu, Xianzhao Xia, Yiqiang Zhao
2019 conf
TRECVID
Yongqing Sun, Xu Chen, Chaoyu Li, Kiyohito Sawada, Takashi Hosono, Jun Zhu, Chengjuan Xie, Sixiang Huang, Lan Wang, Kai Hu, Qingsong Zhou, Chenqiang Gao, Jun Shimamura, Atsushi Sagata
2019 Misc conf
ICASSP
Kai Hu, Zhijian Ou, Min Hu, Junlan Feng
2019 J jnl
CoRR
Kai Hu, Barnabás Póczos
2018 conf
BIBM
Jie-Lin Qiu, Xiao-Yu Li, Kai Hu
2018 J jnl
IEICE Electron. Express
Ruishan Xin, Mao Ye, Jia Wang, Kai Hu, Yiqiang Zhao
2018 conf
BI
Jie-Lin Qiu, Xin-Yi Qiu, Kai Hu
2018 J jnl
CoRR
Kai Hu, Zhijian Ou, Min Hu, Junlan Feng
2017 J jnl
J. Circuits Syst. Comput.
Gongyuan Zhao, Mao Ye, Yiqiang Zhao, Kai Hu, Ruishan Xin
2017 conf
ICGSP
Bin Sun, Yu Hu, Kai Hu, Shan Luo
2017 conf
CCCV (2)
Kai Hu, Bin Sun, Qiao Deng, Qi Yang
2017 J jnl
IEEE Trans. Ind. Electron.
Qi Zhou, Yi Yang, Kai Hu, Ruopu Zhu, Wanjun Chen, Bo Zhang
2017 Misc conf
ICMLC
Xuan Nie, Kai Hu, Manhua Qi, Dengshan Huang, Bei Cao, Xiaodan Yuan
2015 conf
VAST
Shuang Wei, Kai Hu, Longjie Cheng, Hui Tang, Weidan Du, Chen Guo, Chao Pan, Mingran Li, Bing Yu, Xinzhe Li, Yingjie Victor Chen, Zhenyu Cheryl Qian, Yu Michael Zhu
2015 conf
ICDM Workshops
Zhihao Yi, Danning Wang, Kai Hu, Qiang Li
2015 conf
VAST
Hui Tang, Chao Pan, Bing Yu, Weidan Du, Shuang Wei, Mingran Li, Chen Guo, Longjie Cheng, Kai Hu, Rongrong Zhang, Xinzhe Li, Yingjie Victor Chen, Zhenyu Cheryl Qian, Yu Michael Zhu
2011 conf
ISCID (1)
Ruilian Tao, Kai Hu, Zhihong Zhang
2010 J jnl
Int. J. Cogn. Informatics Nat. Intell.
Kai Hu, Yingxu Wang, Yousheng Tian
2010 C conf
ISCAS
Kai Hu, Frank Herzel, Christoph Scheytt
2009 J jnl
Trans. Comput. Sci.
Yousheng Tian, Yingxu Wang, Kai Hu
2008 conf
GCC
Kai Hu, Bojun Huang, Shilin Huang, Deqing Liu
2007 conf
IEEE ICCI
Kai Hu, Yingxu Wang
2007 J jnl
Intell. Data Anal.
Kai Hu, Samuel H. Huang
2004
Kai Hu
2003 J jnl
Appl. Math. Lett.
Kai Hu
2003 J jnl
Medical Image Anal.
Matthias Nahrendorf, Karl-Heinz Hiller, Kai Hu, Georg Ertl, Axel Haase, Wolfgang R. Bauer
2003 conf
FIMH
Matthias Nahrendorf, Karl-Heinz Hiller, Andreas Greiser, Sascha Köhler, Thomas Neuberger, Kai Hu, Christiane Waller, Georg Ertl, Axel Haase, Wolfgang R. Bauer
2003 Misc conf
PDPTA
Kai Hu, Shell-Ying Huang
2002 J jnl
Int. J. Bifurc. Chaos
Xingang Wang, Haihong Li, Kai Hu, Gang Hu
2001 conf
WAA
Qiang Wang, Weiping Hu, Jianping Hu, Kai Hu
2001 conf
FIMH
Matthias Nahrendorf, Karl-Heinz Hiller, Kai Hu, Christiane Waller, Frank Wiesmann, Jan Ruff, Georg Ertl, Axel Haase, Wolfgang R. Bauer
2000 conf
DEXA Workshop
Jihong Wang, Jianping Hu, Kai Hu
2000 Misc conf
PDPTA
Kai Hu, Jianwei Niu, Jianping Hu
tests/integration/test_basicproperties.py
← Index tests/integration/test_basicproperties.py python
"""
Integration tests for the BasicPropertiesExtractor class.
"""
import pytest
import os
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration]


class TestBasicPropertiesExtractorInitialization:
    """Tests for BasicPropertiesExtractor initialization."""

    def test_initialization(self, elf_binary_path, mock_logger):
        """Test basic initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.filepath == elf_binary_path
            assert extractor.basic_properties is None
            assert extractor.is_packed is None
            assert extractor.is_fat is None
            assert extractor.parent_sha256 is None
            assert extractor.child_sha256 is None
            assert extractor.child_architecture is None
            assert extractor.child_filetype is None

    def test_initialization_with_fat_params(self, elf_binary_path, mock_logger):
        """Test initialization with FAT Mach-O parameters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123", "def456"]
            child_archs = ["x86_64", "arm64"]
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                is_fat=True,
                child_sha256=child_hashes,
                child_architecture=child_archs,
                child_filetype=child_types
            )

            assert extractor.is_fat is True
            assert extractor.child_sha256 == child_hashes
            assert extractor.child_architecture == child_archs
            assert extractor.child_filetype == child_types

    def test_initialization_with_parent_sha256(self, elf_binary_path, mock_logger):
        """Test initialization with parent_sha256 for slice binaries."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            parent_hash = "parent_sha256_hash_here"

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                parent_sha256=parent_hash
            )

            assert extractor.parent_sha256 == parent_hash

    def test_elastic_index_suffix(self, elf_binary_path, mock_logger):
        """Test that elastic_index has correct suffix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert "-basic_properties" in extractor.elastic_index


class TestBasicPropertiesExtractorTag:
    """Tests for tag method."""

    def test_tag_value(self, elf_binary_path, mock_logger):
        """Test that tag returns correct value."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.tag() == Tag.BASIC_PROPERTIES.value
            assert extractor.tag() == "basic_properties"


class TestBasicPropertiesExtract:
    """Tests for extract method."""

    def test_extract_elf_binary(self, elf_binary_path, mock_logger):
        """Test extracting properties from ELF binary."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.models.dataclasses import BasicProperties

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, BasicProperties)
            assert result.sample_name == os.path.basename(elf_binary_path)
            assert result.filesize > 0
            assert result.file_entropy >= 0
            assert result.filetype is not None
            assert result.filetype_mime is not None
            assert result.filetype_magika is not None

    def test_extract_pe_binary(self, pe_binary_path, mock_logger):
        """Test extracting properties from PE binary."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor
        from redb.models.dataclasses import BasicProperties

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(pe_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, BasicProperties)
            assert result.filesize > 0
            # PE file should be detected
            assert "PE" in result.filetype or "executable" in result.filetype.lower()

    def test_extract_text_file(self, temp_text_file, mock_logger):
        """Test extracting properties from text file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(temp_text_file, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert "text" in result.filetype.lower() or "ASCII" in result.filetype
            assert result.file_entropy >= 0

    def test_extract_stores_in_basic_properties(self, elf_binary_path, mock_logger):
        """Test that extract stores result in basic_properties attribute."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.basic_properties is None
            result = extractor.extract()
            assert extractor.basic_properties is result


class TestBasicPropertiesFiletype:
    """Tests for file type detection."""

    def test_elf_filetype(self, elf_binary_path, mock_logger):
        """Test ELF file type detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Should detect as ELF
            assert "ELF" in result.filetype

    def test_pe_filetype_mime(self, pe_binary_path, mock_logger):
        """Test PE file type MIME detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(pe_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            # PE MIME types (varies by libmagic version)
            assert "dosexec" in result.filetype_mime or "x-msdownload" in result.filetype_mime or "portable-executable" in result.filetype_mime

    def test_text_filetype_mime(self, temp_text_file, mock_logger):
        """Test text file type MIME detection."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(temp_text_file, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Text MIME types
            assert "text" in result.filetype_mime


class TestBasicPropertiesEntropy:
    """Tests for entropy calculation in BasicPropertiesExtractor."""

    def test_entropy_reasonable_range(self, elf_binary_path, mock_logger):
        """Test that entropy is within reasonable range (0-8)."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert 0 <= result.file_entropy <= 8

    def test_entropy_rounded(self, elf_binary_path, mock_logger):
        """Test that entropy is rounded to 3 decimal places."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Check rounding to 3 decimal places
            entropy_str = str(result.file_entropy)
            if '.' in entropy_str:
                decimal_places = len(entropy_str.split('.')[1])
                assert decimal_places <= 3


class TestBasicPropertiesFilesize:
    """Tests for file size calculation."""

    def test_filesize_matches_actual(self, elf_binary_path, mock_logger):
        """Test that filesize matches actual file size."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            actual_size = os.path.getsize(elf_binary_path)
            assert result.filesize == actual_size

    def test_filesize_matches_binary_length(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that filesize matches binary content length."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result.filesize == len(elf_binary_content)


class TestBasicPropertiesPrepareExportData:
    """Tests for prepare_export_data method."""

    def test_prepare_export_elasticsearch(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            extractor.extract()

            result = extractor.prepare_export_data("ElasticsearchExporter")

            assert result is extractor.basic_properties

    def test_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            extractor.extract()

            result = extractor.prepare_export_data("ClickHouseExporter")

            # Should return tuple of (data, column_names, column_type_names)
            assert isinstance(result, tuple)
            assert len(result) == 3

            data, column_names, column_type_names = result

            assert isinstance(data, list)
            assert len(data) == 1  # One row
            assert isinstance(column_names, list)
            assert isinstance(column_type_names, list)

            # Check expected columns
            assert 'sha256' in column_names
            assert 'md5' in column_names
            assert 'sha1' in column_names
            assert 'filesize' in column_names
            assert 'file_entropy' in column_names
            assert 'filetype' in column_names
            assert 'filetype_mime' in column_names
            assert 'filetype_magika' in column_names
            # New FAT/child columns
            assert 'parent_sha256' in column_names
            assert 'child_sha256' in column_names
            assert 'child_architecture' in column_names
            assert 'child_filetype' in column_names
            assert 'is_fat' in column_names

    def test_prepare_export_clickhouse_data_types(self, elf_binary_path, mock_logger):
        """Test that ClickHouse export data has correct types."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            extractor.extract()

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")

            row = data[0]

            # Check that sha256 is a string with correct length
            sha256_idx = column_names.index('sha256')
            assert isinstance(row[sha256_idx], str)
            assert len(row[sha256_idx]) == 64

            # Check that filesize is an integer
            filesize_idx = column_names.index('filesize')
            assert isinstance(row[filesize_idx], int)

            # Check that file_entropy is a float
            entropy_idx = column_names.index('file_entropy')
            assert isinstance(row[entropy_idx], float)


class TestBasicPropertiesClickHouseTable:
    """Tests for get_clickhouse_table method."""

    def test_clickhouse_table_name(self, elf_binary_path, mock_logger):
        """Test correct ClickHouse table name."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.get_clickhouse_table() == "redb_basic_properties"


class TestBasicPropertiesExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()

            assert result is True

    def test_export_data_empty_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()

            # Should succeed with no exporters
            assert result is True


class TestBasicPropertiesMagika:
    """Tests for Magika file type detection."""

    def test_magika_elf_detection(self, elf_binary_path, mock_logger):
        """Test Magika detection of ELF files."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Magika should detect ELF
            assert result.filetype_magika == "elf" or "elf" in result.filetype_magika.lower()

    def test_magika_pe_detection(self, pe_binary_path, mock_logger):
        """Test Magika detection of PE files."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(pe_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            # Magika should detect PE
            assert "pe" in result.filetype_magika.lower() or "exe" in result.filetype_magika.lower()


class TestBasicPropertiesFATSupport:
    """Tests for FAT Mach-O and child file support."""

    def test_extract_with_fat_flag(self, elf_binary_path, mock_logger):
        """Test extraction with is_fat flag set."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                is_fat=True
            )

            result = extractor.extract()

            assert result is not None
            assert result.is_fat is True

    def test_extract_with_child_hashes(self, elf_binary_path, mock_logger):
        """Test extraction with child_sha256 provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123def456", "789ghi012jkl"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_sha256=child_hashes
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_sha256 == child_hashes

    def test_extract_with_child_architecture(self, elf_binary_path, mock_logger):
        """Test extraction with child_architecture provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_archs = ["x86_64", "arm64"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_architecture=child_archs
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_architecture == child_archs

    def test_extract_with_child_filetype(self, elf_binary_path, mock_logger):
        """Test extraction with child_filetype provided."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                child_filetype=child_types
            )

            result = extractor.extract()

            assert result is not None
            assert result.child_filetype == child_types

    def test_clickhouse_export_with_fat_data(self, elf_binary_path, mock_logger):
        """Test ClickHouse export includes FAT-related fields correctly."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            child_hashes = ["abc123", "def456"]
            child_archs = ["x86_64", "arm64"]
            child_types = ["macho", "macho"]

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                is_fat=True,
                child_sha256=child_hashes,
                child_architecture=child_archs,
                child_filetype=child_types,
                parent_sha256=None  # FAT container has no parent
            )
            extractor.extract()

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")
            row = data[0]

            # Check FAT fields
            is_fat_idx = column_names.index('is_fat')
            assert row[is_fat_idx] is True

            child_sha256_idx = column_names.index('child_sha256')
            assert row[child_sha256_idx] == child_hashes

            child_arch_idx = column_names.index('child_architecture')
            assert row[child_arch_idx] == child_archs

            child_type_idx = column_names.index('child_filetype')
            assert row[child_type_idx] == child_types

    def test_clickhouse_export_for_slice(self, elf_binary_path, mock_logger):
        """Test ClickHouse export for a slice binary with parent_sha256."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            parent_hash = "parent_container_sha256_hash"

            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                parent_sha256=parent_hash
            )
            extractor.extract()

            data, column_names, column_type_names = extractor.prepare_export_data("ClickHouseExporter")
            row = data[0]

            parent_idx = column_names.index('parent_sha256')
            assert row[parent_idx] == parent_hash

    def test_default_fat_fields_are_none_or_empty(self, elf_binary_path, mock_logger):
        """Test that FAT-related fields default to None/empty for non-FAT binaries."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()

            assert result is not None
            assert result.is_fat is None
            assert result.child_sha256 is None
            assert result.child_architecture is None
            assert result.child_filetype is None


@pytest.mark.unit
@pytest.mark.dataclass
class TestBasicPropertiesDataclass:
    """Tests for BasicProperties dataclass structure."""

    def test_dataclass_has_all_expected_fields(self):
        """Test that BasicProperties dataclass has all expected fields."""
        from redb.models.dataclasses import BasicProperties

        # Create a sample instance
        bp = BasicProperties(
            filename="test.exe",
            sample_name="test.exe",
            filesize=1024,
            filetype="PE32",
            filetype_mime="application/x-dosexec",
            filetype_magika="pebin",
            file_entropy=6.5
        )

        # Check required fields
        assert bp.filename == "test.exe"
        assert bp.sample_name == "test.exe"
        assert bp.filesize == 1024
        assert bp.filetype == "PE32"
        assert bp.filetype_mime == "application/x-dosexec"
        assert bp.filetype_magika == "pebin"
        assert bp.file_entropy == 6.5

        # Check optional fields default to None
        assert bp.is_packed is None
        assert bp.is_fat is None
        assert bp.child_sha256 is None
        assert bp.child_architecture is None
        assert bp.child_filetype is None

    def test_dataclass_with_optional_fat_fields(self):
        """Test BasicProperties dataclass with FAT-related optional fields."""
        from redb.models.dataclasses import BasicProperties

        bp = BasicProperties(
            filename="universal.app",
            sample_name="universal.app",
            filesize=2048,
            filetype="Mach-O universal",
            filetype_mime="application/x-mach-binary",
            filetype_magika="macho",
            file_entropy=7.2,
            is_fat=True,
            child_sha256=["hash1", "hash2"],
            child_architecture=["x86_64", "arm64"],
            child_filetype=["macho", "macho"]
        )

        assert bp.is_fat is True
        assert bp.child_sha256 == ["hash1", "hash2"]
        assert bp.child_architecture == ["x86_64", "arm64"]
        assert bp.child_filetype == ["macho", "macho"]