/* * Copyright (c) 2008-2023 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "TestsAppDelegate.h" @implementation TestsAppDelegate (OFSystemInfoTests) - (void)systemInfoTests { void *pool = objc_autoreleasePoolPush(); #ifdef OF_SYSTEM_INFO_HAS_NETWORK_INTERFACES OFDictionary *networkInterfaces; bool firstInterface = true; #endif [OFStdOut setForegroundColor: [OFColor lime]]; [OFStdOut writeFormat: @"[OFSystemInfo] Page size: %zd\n", [OFSystemInfo pageSize]]; [OFStdOut writeFormat: @"[OFSystemInfo] Number of CPUs: %zd\n", [OFSystemInfo numberOfCPUs]]; [OFStdOut writeFormat: @"[OFSystemInfo] ObjFW version: %@\n", [OFSystemInfo ObjFWVersion]]; [OFStdOut writeFormat: @"[OFSystemInfo] ObjFW version major: %u\n", [OFSystemInfo ObjFWVersionMajor]]; [OFStdOut writeFormat: @"[OFSystemInfo] ObjFW version minor: %u\n", [OFSystemInfo ObjFWVersionMinor]]; [OFStdOut writeFormat: @"[OFSystemInfo] Operating system name: %@\n", [OFSystemInfo operatingSystemName]]; [OFStdOut writeFormat: @"[OFSystemInfo] Operating system version: %@\n", [OFSystemInfo operatingSystemVersion]]; [OFStdOut writeFormat: @"[OFSystemInfo] User config IRI: %@\n", [OFSystemInfo userConfigIRI].string]; [OFStdOut writeFormat: @"[OFSystemInfo] User data IRI: %@\n", [OFSystemInfo userDataIRI].string]; [OFStdOut writeFormat: @"[OFSystemInfo] Temporary directory IRI: %@\n", [OFSystemInfo temporaryDirectoryIRI].string]; [OFStdOut writeFormat: @"[OFSystemInfo] CPU vendor: %@\n", [OFSystemInfo CPUVendor]]; [OFStdOut writeFormat: @"[OFSystemInfo] CPU model: %@\n", [OFSystemInfo CPUModel]]; #if defined(OF_X86_64) || defined(OF_X86) [OFStdOut writeFormat: @"[OFSystemInfo] Supports MMX: %d\n", [OFSystemInfo supportsMMX]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports 3DNow!: %d\n", [OFSystemInfo supports3DNow]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports enhanced 3DNow!: %d\n", [OFSystemInfo supportsEnhanced3DNow]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSE: %d\n", [OFSystemInfo supportsSSE]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSE2: %d\n", [OFSystemInfo supportsSSE2]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSE3: %d\n", [OFSystemInfo supportsSSE3]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSSE3: %d\n", [OFSystemInfo supportsSSSE3]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSE4.1: %d\n", [OFSystemInfo supportsSSE41]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SSE4.2: %d\n", [OFSystemInfo supportsSSE42]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports AVX: %d\n", [OFSystemInfo supportsAVX]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports AVX2: %d\n", [OFSystemInfo supportsAVX2]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports AES-NI: %d\n", [OFSystemInfo supportsAESNI]]; [OFStdOut writeFormat: @"[OFSystemInfo] Supports SHA extensions: %d\n", [OFSystemInfo supportsSHAExtensions]]; #endif #ifdef OF_POWERPC [OFStdOut writeFormat: @"[OFSystemInfo] Supports AltiVec: %d\n", [OFSystemInfo supportsAltiVec]]; #endif #ifdef OF_SYSTEM_INFO_HAS_NETWORK_INTERFACES [OFStdOut writeString: @"[OFSystemInfo] Network interfaces: "]; networkInterfaces = [OFSystemInfo networkInterfaces]; for (OFString *name in networkInterfaces) { OFDictionary *interface = [networkInterfaces objectForKey: name]; OFData *etherAddr = [interface objectForKey: OFNetworkInterfaceEthernetAddress]; bool firstAddress = true; OFData *addrs; if (!firstInterface) [OFStdOut writeString: @"; "]; firstInterface = false; [OFStdOut writeFormat: @"%@(", name]; if (etherAddr.itemSize == 1 && etherAddr.count == 6) { const unsigned char *addr = etherAddr.items; [OFStdOut writeFormat: @"%02X:%02X:%02X:%02X:%02X:%02X", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]]; firstAddress = false; } addrs = [interface objectForKey: OFNetworkInterfaceAddresses]; for (size_t i = 0; i < addrs.count; i++) { const OFSocketAddress *addr = [addrs itemAtIndex: i]; OFString *string; @try { string = OFSocketAddressString(addr); } @catch (OFInvalidArgumentException *e) { continue; } if (!firstAddress) [OFStdOut writeString: @", "]; firstAddress = nil; [OFStdOut writeString: string]; } [OFStdOut writeString: @")"]; } [OFStdOut writeString: @"\n"]; #endif objc_autoreleasePoolPop(pool); } @end