Nan Ma

123 papers A* 3B 19C 21Misc 1Journal 43Unranked 36
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Chem. Eng.
Qipeng Yang, Wentian Fan, Nan Ma, Shu Lin, Jiawen Chang, Zhiqiang Zou, Liang Sun, Haifeng Zhang
2026 J jnl
CoRR
Yuanwang Yang, Hongliang Liu, Muxin Zhang, Nan Ma, Jing-Yu Yang, Yu-Kun Lai, Kun Li
2025 J jnl
J. Comput. Assist. Learn.
Nan Ma, Zhiyong Zhong
2025 B conf
WCNC
Jiatong Wu, Nan Ma, Kaiheng Zhang, Ke Peng
2025 conf
VTC2025-Spring
Xuanrong Li, Nan Ma, Xiaoqi Qin, Wei Chang
2025 J jnl
CoRR
Shuo Cao, Nan Ma, Jiayang Li, Xiaohui Li, Lihao Shao, Kaiwen Zhu, Yu Zhou, Yuandong Pu, Jiarui Wu, Jiaquan Wang, Bo Qu, Wenhai Wang, Yu Qiao, Dajuin Yao, Yihao Liu
2025 conf
VTC2025-Spring
Xuan Tan, Nan Ma, Zuojun Dai
2025 J jnl
IEEE Trans. Hum. Mach. Syst.
Nan Ma, David Cheneler, Guangping He, Junjie Yuan, Gui-Bin Bian
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Jiawei Sun, Weiye Qian, Nan Ma, Wenjia Liu, Zhiyuan Yang
2025 J jnl
BMC Medical Imaging
Yinyao Chao, Hongzhang Zhu, Wenyi Yang, Haohua Yao, Nan Ma, Xianda Chen, Jing Zhao, Huali Ma, Zhenhua Liu, Hui Han, Zhuowei Liu, Kai Yao, Yiyao Li, Peng Wu, Jingtong Zhang, Bin Li, Shengjie Guo
2025 conf
ICC
Wenkai Liu, Nan Ma, Jianqiao Chen, Kaiheng Zhang, Ke Peng
2025 J jnl
CoRR
Wenkai Liu, Nan Ma, Jianqiao Chen, Xiaoxuan Qi, Yuhang Ma
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jialin Tang, Nan Ma, Chen Jia, Rui Tian, Yanhui Guo
2025 B conf
WCNC
Yuxuan Hu, Yixuan Li, Xueting Han, Liang Xin, Xiaoqi Qin, Nan Ma
2025 J jnl
CoRR
Jianqiao Chen, Tingting Zhu, Huishi Song, Nan Ma, Xiaodong Xu
2025 J jnl
Int. J. Soc. Robotics
Chuyang Sun, Nan Ma, Rixin Tang
2024 B conf
WCNC
Ke Peng, Nan Ma, Kaiheng Zhang, Shaoyi Liu
2024 conf
WCSP
Wenkai Liu, Nan Ma, Jianqiao Chen, Kaiheng Zhang, Ke Peng
2024 conf
ICSR + InnoBiz
Luntian Mou, Peize Li, Haiwu Zhao, Qiang Fu, Hong Luo, Cong Liu, Nan Ma, Tie-Jun Huang, Wen Gao
2024 J jnl
Comput. Math. Appl.
Nan Ma, Qiuyan Xu, Zhiyong Liu, Jiye Yang
2024 conf
ICRCA
Zeyu Dong, Hanxu Sun, Gang Chen, Nan Ma, Qingdong Wang, Yuhang Yan
2024 conf
WCSP
Ruichen Li, Nan Ma, Kaiheng Zhang, Xiaoqi Qin, Huigang Chang, Fengmin Tang
2024 conf
WCSP
Zhaoting Li, Nan Ma, Xiaoqi Qin, Huigang Chang, Nan Li
2023 B conf
WCNC
Shaoyi Liu, Nan Ma, Yamao Zhao, Maotao Li
2023 C conf
ICCC
Yaning Chen, Nan Ma, Shaoyi Liu, Kaiheng Zhang
2023 conf
GLOBECOM (Workshops)
Shaoyi Liu, Nan Ma, Yaning Chen, Ke Peng, Dongsheng Xue
2023 J jnl
CoRR
Shaoyi Liu, Nan Ma, Yaning Chen, Ke Peng, Dongsheng Xue
2023 conf
ICCT
Yujia Tian, Yue Meng, Xiaoqi Qin, Nan Ma
2023 conf
DSA
Chuansheng Xiao, Nan Ma, Kongjian Qin, Genbao Xu, Mohan Wang
2023 J jnl
Algorithms
Nan Ma, Ziyi Wang, Zeyu Ba, Xinran Li, Ning Yang, Xinyi Yang, Haifeng Zhang
2023 B conf
BigData
Guochuan Liu, Zhenjiang Pang, Jing Zeng, Haimin Hong, Yongming Sun, Mingjie Su, Nan Ma
2023 J jnl
Briefings Bioinform.
Mengjie Shao, Nanjiao Ying, Qian Liang, Nan Ma, Sebastian Leptihn, Yunsong Yu, Huan Chen, Chengzhi Liu, Xiaoting Hua
2023 C conf
ICCC
Jie Zhao, Nan Ma, Baoling Liu
2023 conf
DSA
Zhixuan Wu, Nan Ma, Tao Zhi, Genbao Xu
2023 conf
CIPAE
Nan Ma, Changjun Shui, Changqing Li, Binxiang Ma
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Wanyi Zhou, Xiaolin Xiao, Yue-Jiao Gong, Jia Chen, Jun Fang, Naiqiang Tan, Nan Ma, Qun Li, Hua Chai, Sang-Woon Jeon, Jun Zhang
2022 C conf
IGARSS
Chunxiang Wang, Ping Wang, Nan Ma
2022 conf
WCSP
Maotao Li, Nan Ma, Jianqiao Chen, Yamao Zhao
2022 B conf
WCNC
Jinyu Wang, Nan Ma, Baoling Liu
2022 J jnl
Algorithms
Xinyi Yang, Ziyi Wang, Hengxi Zhang, Nan Ma, Ning Yang, Hualin Liu, Haifeng Zhang, Lei Yang
2022 C conf
CIS
Nan Ma, Chuansheng Xiao, Mohan Wang, Genbao Xu
2022 conf
CACML
Hui Yuan, Yuan Xu, Shaoqiang Han, Meng Sun, Nan Ma, Zhang Hao, Maohui Liu
2022 A* conf
KDD
Zebin Chen, Xiaolin Xiao, Yue-Jiao Gong, Jun Fang, Nan Ma, Hua Chai, Zhiguang Cao
2022 C conf
CIS
Jiahong Li, Yongqiang Yao, Nan Ma
2022 B conf
WCNC
Yamao Zhao, Nan Ma, Fan Liu, Jianqiao Chen
2022 conf
ICCCS
Hua Qu, Nan Ma, Xiaodong Yuan, Jihong Zhao, Yongyue Yu, Feng Wei
2022 conf
WASA (1)
Fuyong Sun, Ruipeng Gao, Weiwei Xing, Yaoxue Zhang, Wei Lu, Jun Fang, Shui Liu, Nan Ma, Hua Chai
2021 C conf
ICCC
Zhi Ruan, Nan Ma, Fan Liu, Baoling Liu
2021 C conf
CIS
Zongli Jiang, Jingwen Li, Nan Ma
2021 J jnl
Neurocomputing
Ying Zheng, Hong Bao, Chaochao Meng, Nan Ma
2021 C conf
CIS
Zongli Jiang, Jieru Liang, Nan Ma
2021 C conf
CIS
Jiahong Li, Nan Ma
2021 conf
SIGSPATIAL/GIS
Chenbei Lu, Jiaman Wu, Chenye Wu, Yongli Qin, Qun (Tracy) Li, Nan Ma
2021 J jnl
Sci. China Inf. Sci.
Nan Ma, Deyi Li, Wen He, Yue Deng, Jiahong Li, Yue Gao, Hong Bao, Huan Zhang, Xinkai Xu, Yuansheng Liu, Zhixuan Wu, Li Chen
2021 C conf
CIS
Guoping Zhang, Nan Ma, Jiahong Li, Beiyan Jiang, Zhixuan Wu
2021 C conf
CIS
Beiyan Jiang, Nan Ma
2021 A* conf
KDD
Lan-Zhe Guo, Zhi Zhou, Jie-Jing Shao, Qi Zhang, Feng Kuang, Gao-Le Li, Zhang-Xun Liu, Guobin Wu, Nan Ma, Qun (Tracy) Li, Yufeng Li
2021 conf
UbiComp/ISWC Adjunct
Jiaman Wu, Chenbei Lu, Chenye Wu, Yongli Qin, Qun (Tracy) Li, Nan Ma, Jun Fang
2021 C conf
CIS
Yongqiang Yao, Nan Ma, Jiahong Li, Zhixuan Wu, Guoping Zhang
2020 C conf
ICCC
Fan Liu, Nan Ma, Jianqiao Chen, Lulu Gu
2020 conf
ICC Workshops
Lulu Gu, Nan Ma, Jianqiao Chen, Lingfeng Wang, Baoling Liu
2020 conf
WCSP
Shihao Chen, Nan Ma, Jianqiao Chen, Xiaoli Yang, Baoling Liu
2020 conf
VTC Spring
Nan Ma, Xiaofeng Zhong, Peng Liu, Shidong Zhou
2020 J jnl
Vis. Comput.
Ye Liang, Hongzhe Liu, Nan Ma
2020 C conf
ACC
Huiwen Jia, Jun Fang, Naiqiang Tan, Xinyue Liu, Zengwei Huo, Nan Ma, Guobin Wu, Hua Chai, Xiaohu Qie, Bo Zhang, Yafeng Yin, Siqian Shen
2020 conf
CDC
Jiahong Li, Nan Ma, Fang Deng
2020 conf
ICCT
Fei Yu, Nan Ma, Xiaoli Yang, Jianqiao Chen
2020 J jnl
Sci. China Inf. Sci.
Deyi Li, Nan Ma, Yue Gao
2020 A* conf
AAAI
Lan-Zhe Guo, Feng Kuang, Zhang-Xun Liu, Yufeng Li, Nan Ma, Xiao-Hu Qie
2020 B conf
PIMRC
Nan Ma, Lin Pan, Shihao Chen, Baoling Liu
2020 conf
GLOBECOM (Workshops)
Xiaoli Yang, Nan Ma, Fei Yu, Jianqiao Chen
2020 J jnl
CoRR
Lan-Zhe Guo, Feng Kuang, Zhang-Xun Liu, Yufeng Li, Nan Ma, Xiao-Hu Qie
2019 conf
GeoAI@SIGSPATIAL
Tengfei Xing, Yang Gu, Zhichao Song, Zhihui Wang, Yiping Meng, Nan Ma, Pengfei Xu, Runbo Hu, Hua Chai
2019 J jnl
Multim. Tools Appl.
Nan Ma, Sicheng Zhao, Zhen Sun, Xiuping Wu, Yun Zhai
2019 J jnl
Clust. Comput.
Ruishan Du, Fuhua Shang, Nan Ma
2019 C conf
IGARSS
Nan Ma, Sichao Liu, Qinghua Su, Zhenjun Yu, Xirong Liu
2019 C conf
CIS
Nan Ma, Li Chen, Jiancheng Hu, Qiuna Shang, Jiahong Li, Guoping Zhang
2019 conf
ISOEN
Koichi Suematsu, Wataru Harano, Tokiharu Oyama, Nan Ma, Ken Watanabe, Kengo Shimanoe
2018 C conf
CIS
Ying Zheng, Hong Bao, Xinkai Xu, Nan Ma, Jialei Zhao, Dawei Luo
2018 B conf
WCNC
Xiaosu Li, Nan Ma, Qixiang Tang, Baoling Liu
2018 conf
IMIS
Shan Guo, Ying Wang, Sachula Meng, Nan Ma
2018 J jnl
Pers. Ubiquitous Comput.
Min Lei, Yu Yang, Nan Ma, Huizhong Sun, Chunru Zhou, Minyao Ma
2018 J jnl
Sensors
Koichi Suematsu, Nan Ma, Ken Watanabe, Masayoshi Yuasa, Tetsuya Kida, Kengo Shimanoe
2018 J jnl
Appl. Comput. Intell. Soft Comput.
Ye Liang, Congyan Lang, Jian Yu, Hongzhe Liu, Nan Ma
2018 conf
ICCSIP (1)
Li Chen, Nan Ma, Pengfei Wang, Guilin Pang, Xiaojun Shi
2017 C conf
CIS
Jun Yang, Hong Bao, Nan Ma, Zuxing Xuan
2017 C conf
ICCC
Qian Zhou, Baoling Liu, Fangyuan Zhou, Zhi Zhang, Nan Ma
2017 C conf
CIS
Kaijing Shi, Hong Bao, Nan Ma
2017 C conf
CIS
Hui Li, Qin He, Hong Bao, Nan Ma, Guilin Pang
2017 conf
VAST
Ruike Jiang, Wei Huang, Nan Ma, Fan Hong, Ying Zhao, Xiaoru Yuan
2015 conf
FSKD
Nan Ma, Hao Wang, Qin He, Tao Yao
2014 J jnl
J. Comput.
Kuoyi Shao, Yun Zhai, Haifeng Sui, Changsheng Zhang, Nan Ma
2013 J jnl
CoRR
Abolfazl S. Motahari, Kannan Ramchandran, David Tse, Nan Ma
2013 B conf
ISIT
Abolfazl S. Motahari, Kannan Ramchandran, David Tse, Nan Ma
2013 J jnl
IEEE Trans. Inf. Theory
Nan Ma, Prakash Ishwar
2013 conf
Digital Heritage (1)
Nan Ma, Florent Laroche, Benjamin Hervy, Jean-Louis Kerouanton
2012 J jnl
CoRR
Nan Ma, Kannan Ramchandran, David Tse
2012 B conf
ISIT
Nan Ma, Kannan Ramchandran, David N. C. Tse
2012 J jnl
IEEE Trans. Inf. Theory
Nan Ma, Prakash Ishwar
2012 conf
CSWS
Hai-Tao Zheng, Nan Ma, Yong Jiang, Shu-Tao Xia, Hui-Qiu Li
2012 J jnl
IEEE Trans. Inf. Theory
Nan Ma, Prakash Ishwar, Piyush Gupta
2012 J jnl
J. Multiple Valued Log. Soft Comput.
Yun Zhai, Da Ruan, Nan Ma, Bing An
2011 B conf
ISIT
Nan Ma, Kannan Ramchandran, David Tse
2011 J jnl
IEEE Trans. Inf. Theory
Nan Ma, Prakash Ishwar
2011 J jnl
CoRR
Nan Ma, Kannan Ramchandran, David Tse
2011 J jnl
IEEE Trans. Inf. Theory
Nan Ma, Prakash Ishwar
2010 J jnl
CoRR
Nan Ma, Prakash Ishwar
2010 B conf
ISIT
Nan Ma, Prakash Ishwar
2010 J jnl
CoRR
Nan Ma, Prakash Ishwar
2010 B conf
ISIT
Nan Ma, Prakash Ishwar
2010 Misc conf
ISKE
Yun Zhai, Bingru Yang, Nan Ma, Da Ruan
2009 J jnl
CoRR
Nan Ma, Prakash Ishwar
2009 conf
Allerton
Nan Ma, Prakash Ishwar
2009 J jnl
CoRR
Nan Ma, Prakash Ishwar, Piyush Gupta
2009 B conf
ISIT
Nan Ma, Prakash Ishwar, Piyush Gupta
2009 conf
CIKM-CNIKM
Nan Ma, Ee-Peng Lim, Viet-An Nguyen, Aixin Sun, Haifeng Liu
2008 B conf
DCC
Y. N. Sairam, Nan Ma, Neelu Sinha
2008 B conf
EuroSPI
Nan Ma, Tracy Hall, Trevor Barker
2008 J jnl
CoRR
Nan Ma, Prakash Ishwar
2008 B conf
ISIT
Nan Ma, Prakash Ishwar
2008 conf
WER
Nan Ma, Tracy Hall, Trevor Barker, Ming Zhang
2007 J jnl
CoRR
Nan Ma, Ye Wang, Prakash Ishwar
2007 B conf
ISIT
Nan Ma, Prakash Ishwar
tests/unit/test_macho_dataclasses.py
← Index tests/unit/test_macho_dataclasses.py python
"""
Unit tests for Mach-O dataclasses.
"""
import pytest
from typing import List, Dict, Optional

pytestmark = [pytest.mark.unit, pytest.mark.dataclass, pytest.mark.macho]


class TestMachODataclass:
    """Tests for MachO dataclass."""

    def test_macho_required_fields(self):
        """Test MachO dataclass with required fields."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS", "MH_DYLDLINK", "MH_TWOLEVEL", "MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True
        )

        assert macho.magic == 0xFEEDFACF
        assert macho.cputype == 0x01000007
        assert macho.is_64bit is True
        assert macho.is_signed is True
        assert macho.magic_str == "MH_MAGIC_64"
        assert macho.filetype_str == "MH_EXECUTE"

    def test_macho_optional_fields_defaults(self):
        """Test MachO dataclass optional fields default to correct values."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=False
        )

        assert macho.number_of_load_commands == 0
        assert macho.load_commands_set is None
        assert macho.number_of_segments == 0
        assert macho.number_of_dylibs == 0
        assert macho.number_of_imports == 0
        assert macho.number_of_exports == 0
        assert macho.entry_point is None
        assert macho.uuid is None
        assert macho.version_info is None
        assert macho.version_info_str is None

    def test_macho_with_all_fields(self):
        """Test MachO dataclass with all fields populated."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True,
            number_of_load_commands=15,
            load_commands_set=["LC_SEGMENT_64", "LC_DYLD_INFO_ONLY"],
            number_of_segments=4,
            number_of_dylibs=5,
            number_of_imports=100,
            number_of_exports=10,
            entry_point=0x100001234,
            uuid="12345678-1234-1234-1234-123456789012",
            version_info={"min_os": "10.15"},
            version_info_str={"min_os": "macOS 10.15"}
        )

        assert macho.number_of_load_commands == 15
        assert macho.uuid == "12345678-1234-1234-1234-123456789012"
        assert macho.entry_point == 0x100001234


class TestMachOSegmentDataclass:
    """Tests for MachOSegment dataclass."""

    def test_segment_creation(self):
        """Test MachOSegment dataclass creation."""
        from redb.models.dataclasses import MachOSegment

        segment = MachOSegment(
            segment_name="__TEXT",
            segment_vaddr=0x100000000,
            segment_vsize=0x1000,
            segment_offset=0,
            segment_size=0x1000,
            segment_max_vm_protection=7,
            segment_initial_vm_protection=5,
            segment_nsects=4,
            segment_flags=0,
            segment_entropy=6.5,
            segment_sha256="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert segment.segment_name == "__TEXT"
        assert segment.segment_vaddr == 0x100000000
        assert segment.segment_entropy == 6.5


class TestMachOImportDataclass:
    """Tests for MachOImport dataclass."""

    def test_import_creation(self):
        """Test MachOImport dataclass creation."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(
            macho_imports_total=50,
            macho_import_libraryName=["libSystem.B.dylib", "CoreFoundation"],
            macho_import_functions=["_printf", "_malloc", "_free"]
        )

        assert import_info.macho_imports_total == 50
        assert len(import_info.macho_import_libraryName) == 2
        assert "_printf" in import_info.macho_import_functions

    def test_import_optional_fields(self):
        """Test MachOImport with optional fields as None."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(macho_imports_total=0)

        assert import_info.macho_imports_total == 0
        assert import_info.macho_import_libraryName is None
        assert import_info.macho_import_functions is None


class TestMachOExportDataclass:
    """Tests for MachOExport dataclass."""

    def test_export_creation(self):
        """Test MachOExport dataclass creation."""
        from redb.models.dataclasses import MachOExport

        export_info = MachOExport(
            macho_exports_total=10,
            macho_export_symbols=["_main", "_helper_func"]
        )

        assert export_info.macho_exports_total == 10
        assert "_main" in export_info.macho_export_symbols


class TestMachODylibDataclass:
    """Tests for MachODylib dataclass."""

    def test_dylib_creation(self):
        """Test MachODylib dataclass creation."""
        from redb.models.dataclasses import MachODylib

        dylib = MachODylib(
            dylib_name="/usr/lib/libSystem.B.dylib",
            dylib_timestamp=2,
            dylib_current_version=0x04E10200,
            dylib_compat_version=0x00010000
        )

        assert dylib.dylib_name == "/usr/lib/libSystem.B.dylib"
        assert dylib.dylib_timestamp == 2


class TestMachOLoadCommandDataclass:
    """Tests for MachOLoadCommand dataclass."""

    def test_load_command_creation(self):
        """Test MachOLoadCommand dataclass creation."""
        from redb.models.dataclasses import MachOLoadCommand

        lc = MachOLoadCommand(
            load_command=0x19,
            load_command_str="LC_SEGMENT_64",
            load_command_size=72
        )

        assert lc.load_command == 0x19
        assert lc.load_command_str == "LC_SEGMENT_64"
        assert lc.load_command_size == 72


class TestMachOUniversalDataclass:
    """Tests for MachOUniversal dataclass."""

    def test_universal_fat_binary(self):
        """Test MachOUniversal for FAT binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=True,
            architecture_count=2,
            architectures=["x86_64", "arm64"],
            architecture_info=[
                {"arch": "x86_64", "offset": 0x1000},
                {"arch": "arm64", "offset": 0x10000}
            ],
            fat_hash="abc123def456789012345678901234567890123456789012345678901234",
            fat_md5="abc123def456789012345678901234",
            fat_sha1="abc123def456789012345678901234567890"
        )

        assert universal.is_fat is True
        assert universal.architecture_count == 2
        assert "x86_64" in universal.architectures
        assert "arm64" in universal.architectures

    def test_universal_single_arch(self):
        """Test MachOUniversal for single-architecture binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=False,
            architecture_count=1,
            architectures=["arm64"],
            architecture_info=[{"arch": "arm64", "offset": 0}]
        )

        assert universal.is_fat is False
        assert universal.architecture_count == 1
        assert universal.fat_hash is None


class TestMachOCertificateDataclass:
    """Tests for MachOCertificate dataclass."""

    def test_certificate_creation(self):
        """Test MachOCertificate dataclass creation."""
        from redb.models.dataclasses import MachOCertificate

        cert = MachOCertificate(
            subject="CN=Apple Development",
            issuer="CN=Apple Worldwide Developer Relations",
            serial_number="123456789",
            not_before="2023-01-01T00:00:00Z",
            not_after="2024-01-01T00:00:00Z",
            thumbprint="abc123def456789012345678901234567890",
            certificate_type="leaf",
            order=0,
            algorithm="sha256WithRSAEncryption",
            common_name="Apple Development",
            organizational_unit="Development",
            organization="Apple Inc."
        )

        assert cert.subject == "CN=Apple Development"
        assert cert.certificate_type == "leaf"
        assert cert.order == 0


class TestMachOCodeDirectoryDataclass:
    """Tests for MachOCodeDirectory dataclass."""

    def test_code_directory_creation(self):
        """Test MachOCodeDirectory dataclass creation."""
        from redb.models.dataclasses import MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF",
            flags=0x10000,
            cd_hash="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert cd.identifier == "com.example.app"
        assert cd.team_id == "ABC123DEF"
        assert cd.flags == 0x10000


class TestMachOCodeSigningInfoDataclass:
    """Tests for MachOCodeSigningInfo dataclass."""

    def test_code_signing_info_unsigned(self):
        """Test MachOCodeSigningInfo for unsigned binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="unsigned",
            has_signature=False,
            number_of_certificates=0
        )

        assert info.signing_type == "unsigned"
        assert info.has_signature is False
        assert info.number_of_certificates == 0

    def test_code_signing_info_signed(self):
        """Test MachOCodeSigningInfo for signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo, MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF"
        )

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="certificate",
            has_signature=True,
            number_of_certificates=3,
            code_directories=[cd],
            entitlements={"com.apple.security.app-sandbox": True},
            has_hardened_runtime=True,
            has_library_validation=True
        )

        assert info.signing_type == "certificate"
        assert info.has_signature is True
        assert info.number_of_certificates == 3
        assert info.has_hardened_runtime is True

    def test_code_signing_info_adhoc(self):
        """Test MachOCodeSigningInfo for ad-hoc signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="ad-hoc",
            has_signature=True,
            number_of_certificates=0,
            arch_identifier="x86_64"
        )

        assert info.signing_type == "ad-hoc"
        assert info.number_of_certificates == 0
        assert info.arch_identifier == "x86_64"


class TestMachOEntitlementDataclass:
    """Tests for MachOEntitlement dataclass."""

    def test_entitlement_boolean(self):
        """Test MachOEntitlement with boolean value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.app-sandbox",
            value_type="boolean",
            value_bool=True
        )

        assert ent.key == "com.apple.security.app-sandbox"
        assert ent.value_type == "boolean"
        assert ent.value_bool is True

    def test_entitlement_string(self):
        """Test MachOEntitlement with string value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.developer.team-identifier",
            value_type="string",
            value_string="ABC123DEF"
        )

        assert ent.key == "com.apple.developer.team-identifier"
        assert ent.value_type == "string"
        assert ent.value_string == "ABC123DEF"

    def test_entitlement_array(self):
        """Test MachOEntitlement with array value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.application-groups",
            value_type="array",
            value_array=["group.com.example.app", "group.com.example.shared"]
        )

        assert ent.key == "com.apple.security.application-groups"
        assert ent.value_type == "array"
        assert len(ent.value_array) == 2