Okan K. Ersoy

99 papers A* 1B 1C 8Misc 5Journal 65Unranked 17
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Zhe Zhao, Jiali Su, Jiangbo Xi, Zhenhong Li, Okan K. Ersoy
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jiangbo Xi, Xubin Liu, Haixing Shang, Xin Wei, Ming Cong, Okan K. Ersoy
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jian Huang, Xiaoyang Sun, Steven X. Ding, Xu Yang, Okan K. Ersoy
2025 J jnl
IEEE Trans. Artif. Intell.
Jian Huang, Zizhuo Liu, Xu Yang, Yupeng Liu, Zhaomin Lv, Kaixiang Peng, Okan K. Ersoy
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Jie Wang, Binze Wang, Jiangbo Xi, Xue Bai, Okan K. Ersoy, Ming Cong, Siyan Gao, Zhe Zhao
2023 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jiangbo Xi, Okan K. Ersoy, Jianwu Fang, Tianjun Wu, Xin Wei, Chaoying Zhao
2022 J jnl
J. Inf. Sci. Eng.
Zhan Guo, Okan K. Ersoy, Xuefeng Yan
2022 J jnl
Remote. Sens.
Jiangbo Xi, Okan K. Ersoy, Ming Cong, Chaoying Zhao, Wei Qu, Tianjun Wu
2021 conf
ICSI (2)
Qinqin Fan, Yihao Wang, Okan K. Ersoy, Ning Li, Zhenzhong Chu
2021 J jnl
Remote. Sens.
Jiangbo Xi, Ming Cong, Okan K. Ersoy, Weibao Zou, Chaoying Zhao, Zhenhong Li, Junkai Gu, Tianjun Wu
2021 J jnl
IEEE Access
Jiangbo Xi, Okan K. Ersoy, Jianwu Fang, Ming Cong, Xin Wei, Tianjun Wu
2021 J jnl
Remote. Sens.
Jiangbo Xi, Okan K. Ersoy, Jianwu Fang, Ming Cong, Tianjun Wu, Chaoying Zhao, Zhenhong Li
2021 J jnl
IEEE CAA J. Autom. Sinica
Qinqin Fan, Okan K. Ersoy
2020 J jnl
Swarm Evol. Comput.
Zhan Guo, Okan K. Ersoy, Xuefeng Yan
2020 J jnl
CoRR
Homayoun Valafar, Okan K. Ersoy, Faramarz Valafar
2020 J jnl
Turkish J. Electr. Eng. Comput. Sci.
Caner Özcan, Okan K. Ersoy, Iskender Ulgen Ogul
2020 J jnl
CoRR
Homayoun Valafar, Okan K. Ersoy, Faramarz Valafar
2020 J jnl
CoRR
Homayoun Valafar, Faramarz Valafar, Okan K. Ersoy
2020 J jnl
CoRR
Gustavo A. Valencia-Zapata, Carolina Gonzalez-Canas, Michael G. Zentner, Okan K. Ersoy, Gerhard Klimeck
2020 J jnl
IEEE Access
Jiangbo Xi, Yaobing Xiang, Okan K. Ersoy, Ming Cong, Xin Wei, Junkai Gu
2019 J jnl
Comput. Intell. Neurosci.
Jiquan Wang, Mingxin Zhang, Okan K. Ersoy, Kexin Sun, Yusheng Bi
2019 J jnl
IEEE Access
Jiquan Wang, Zhiwen Cheng, Okan K. Ersoy, Mingxin Zhang, Kexin Sun, Yusheng Bi
2018 J jnl
CoRR
Julian Büchel, Okan K. Ersoy
2017 J jnl
CoRR
Gustavo A. Valencia-Zapata, Daniel Mejia, Gerhard Klimeck, Michael G. Zentner, Okan K. Ersoy
2017 J jnl
Remote. Sens.
Chengye Zhang, Huazhong Ren, Yanzhen Liang, Suhong Liu, Qiming Qin, Okan K. Ersoy
2016 conf
SIU
Ertan Atar, Okan K. Ersoy, Lale Özyilmaz
2016 J jnl
J. Vis. Commun. Image Represent.
Nur Huseyin Kaplan, Isin Erer, Okan K. Ersoy
2016 J jnl
Appl. Soft Comput.
Jiquan Wang, Okan K. Ersoy, Mengying He, Fulin Wang
2015 conf
SIU
Ertan Atar, Okan K. Ersoy, Lale Özyilmaz
2014 J jnl
IEEE Trans. Knowl. Data Eng.
Mehmet Fatih Amasyali, Okan K. Ersoy
2014 conf
SIU
Suleyman Demirci, Isin Erer, Okan K. Ersoy
2014 J jnl
IEEE Signal Process. Mag.
Dalton D. Lunga, Saurabh Prasad, Melba M. Crawford, Okan K. Ersoy
2014 J jnl
IEEE Trans. Geosci. Remote. Sens.
Dalton D. Lunga, Okan K. Ersoy
2013 C conf
IGARSS
Dalton D. Lunga, Okan K. Ersoy
2013 J jnl
IEEE Trans. Geosci. Remote. Sens.
Dalton D. Lunga, Okan K. Ersoy
2012 C conf
IGARSS
Gülsen Taskin Kaya, Hüseyin Kaya, Okan K. Ersoy
2012 J jnl
CoRR
Dalton D. Lunga, Okan K. Ersoy
2011 conf
AIPR
Dalton D. Lunga, Okan K. Ersoy
2011 J jnl
Expert Syst. Appl.
Irem Ersöz Kaya, Turgay Ibrikci, Okan K. Ersoy
2011 J jnl
Trans. Mach. Learn. Data Min.
Dalton D. Lunga, Okan K. Ersoy
2011 conf
MLDM
Dalton D. Lunga, Okan K. Ersoy
2011 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gülsen Taskin Kaya, Okan K. Ersoy, Mustafa E. Kamasak
2011 A* conf
ICDM
Dalton D. Lunga, Okan K. Ersoy
2011 J jnl
Decis. Sci.
Herbert Moskowitz, Paul Louis Drnevich, Okan K. Ersoy, Kemal Altinkemer, Alok R. Chaturvedi
2010 C conf
IGARSS
Gülsen Taskin Kaya, Okan K. Ersoy, Mustafa E. Kamasak
2010 conf
SoCPaR
Gülsen Taskin Kaya, Okan K. Ersoy, Mustafa E. Kamasak
2009 J jnl
Decis. Support Syst.
Hoi-Ming Chi, Herbert Moskowitz, Okan K. Ersoy, Kemal Altinkemer, Peter F. Gavin, Bret E. Huff, Bernard A. Olsen
2009 conf
IGARSS (2)
Gülsen Taskin Kaya, Okan K. Ersoy, Mustafa E. Kamasak
2009 conf
IGARSS (4)
Gilbert Rochon, Magdy M. Abdel Wahab, Gamal Salah El Afandi, Gulay Altay, Okan K. Ersoy, Carol X. Song, Lan Zhao, Larry L. Biehl, Belal Elleithy, Mohammed Shokr, Mohamed Mohamed, Tarek A. El-Ghazawi, Darion Grant, Dev Niyogi
2008 J jnl
IEEE Trans. Neural Networks
Mehmet Fatih Amasyali, Okan K. Ersoy
2008 J jnl
Int. J. Comput. Biol. Drug Des.
Ayca C. Pehlivanli, Turgay Ibrikci, Okan K. Ersoy
2008 J jnl
Int. J. Comput. Biol. Drug Des.
Ayca C. Pehlivanli, Okan K. Ersoy, Turgay Ibrikci
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
N. Gökhan Kasapoglu, Okan K. Ersoy
2007 J jnl
Int. J. Gen. Syst.
Mary Qu Yang, Jack Y. Yang, Okan K. Ersoy
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jaejoon Lee, Okan K. Ersoy
2007 J jnl
Eur. J. Oper. Res.
Hoi-Ming Chi, Okan K. Ersoy, Herbert Moskowitz, Jim Ward
2007 J jnl
INFORMS J. Comput.
Hoi-Ming Chi, Okan K. Ersoy, Herbert Moskowitz, Kemal Altinkemer
2005 conf
EUSIPCO
Tuba Sirin, Mehmet Izzet Saglam, Isin Erer, Muhittin Gokmen, Okan K. Ersoy
2005 J jnl
IEEE Trans. Geosci. Remote. Sens.
Hoi-Ming Chi, Okan K. Ersoy
2005 J jnl
Int. J. Gen. Syst.
Hoi-Ming Chi, Okan K. Ersoy
2005 C conf
IGARSS
Murat Sezgin, Isin Erer, Okan K. Ersoy
2005 ch.
Advances in Bioinformatics and Its Applications
Mary Qu Yang, Okan K. Ersoy, Jack Y. Yang
2004 C conf
IGARSS
N. Gökhan Kasapoglu, Okan K. Ersoy, Bingül Yazgan
2003 C conf
ICANN
Hakan Karakahya, Bingül Yazgan, Okan K. Ersoy
2003 C conf
ICANN
Jack Y. Yang, Mary Qu Yang, Okan K. Ersoy
2003 J jnl
Neural Process. Lett.
Hoi-Ming Chi, Okan K. Ersoy
2002 conf
VTC Spring
Keeyoung Suh, Okan K. Ersoy
2000 J jnl
Bioinform.
Wooyoung Choe, Okan K. Ersoy, Minou Bina
1999 B conf
IJCNN
Homayoun Valafar, Faramarz Valafar, Okan K. Ersoy
1998 J jnl
IEEE Trans. Geosci. Remote. Sens.
M. T. Fardanesh, Okan K. Ersoy
1998 conf
ICIP (2)
Emre O. Velipasaoglu, Okan K. Ersoy
1998 ch.
Algorithms and Architectures
Okan K. Ersoy
1997 J jnl
IEEE Trans. Neural Networks
Jón Atli Benediktsson, Johannes R. Sveinsson, Okan K. Ersoy, Philip H. Swain
1996 conf
ICIP (2)
Emre O. Velipasaoglu, Okan K. Ersoy
1996 conf
ICNN
Homayoun Valafar, Okan K. Ersoy, Faramarz Valafar
1995 Misc conf
PDPTA
Faramarz Valafar, Okan K. Ersoy
1995 J jnl
Neural Process. Lett.
Tamer Ölmez, Ertugrul Yazgan, Okan K. Ersoy
1995 conf
ICNN
Faramarz Valafar, Homayoun Valafar, Okan K. Ersoy, Richard G. Schwartz
1995 J jnl
IEEE Trans. Neural Networks
Okan K. Ersoy, Shi-Wee Deng
1994 J jnl
Proc. IEEE
Okan K. Ersoy
1994 C conf
ISCAS
Faramarz Valafar, Okan K. Ersoy
1993 conf
ICNN
Jón Atli Benediktsson, Johannes R. Sveinsson, Okan K. Ersoy, Philip H. Swain
1993 J jnl
IEEE Trans. Ind. Electron.
Okan K. Ersoy, Daesik Hong
1992 J jnl
IEEE Trans. Signal Process.
Okan K. Ersoy, Neng-Chung Hu
1992 J jnl
IEEE Trans. Signal Process.
Neng-Chung Hu, Hong-I Chang, Okan K. Ersoy
1992 J jnl
IEEE J. Sel. Areas Commun.
Okan K. Ersoy, Ahmed Nouira
1991 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Sabzali Aghagolzadeh, Okan K. Ersoy
1990 J jnl
IEEE Trans. Neural Networks
Okan K. Ersoy, Daesik Hong
1989 Misc conf
ICASSP
Okan K. Ersoy, Daesik Hong
1988 Misc conf
ICASSP
Okan K. Ersoy, Neng-Chung Hu
1988 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Okan K. Ersoy
1988 Misc conf
ICASSP
D. Y. Kim, B. J. Stanton, Okan K. Ersoy, Leah H. Jamieson
1988 J jnl
Comput. Vis. Graph. Image Process.
Okan K. Ersoy, C. H. Chen
1987 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Okan K. Ersoy
1987 Misc conf
ICASSP
Okan K. Ersoy, Neng-Chung Hu
1987 conf
FJCC
Okan K. Ersoy, D. Y. Kim
1985 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Okan K. Ersoy
1985 J jnl
IEEE Trans. Acoust. Speech Signal Process.
Okan K. Ersoy
1985 J jnl
IEEE Trans. Computers
Okan K. Ersoy
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