Skip to content

Commit 8f67b98

Browse files
committed
feat: add more unit testing
1 parent e1ee07c commit 8f67b98

File tree

1 file changed

+91
-7
lines changed

1 file changed

+91
-7
lines changed

Tests/DeviceIdentificatorTests/DeviceModelArchitectureTests.swift

Lines changed: 91 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,98 @@ import Testing
44
@Suite("DeviceModel+Architecture Tests")
55
struct DeviceModelArchitectureTests {
66

7-
@Test("Verifies architecture for all device types")
7+
@Test("Verifies architecture for all device models")
88
func testArchitectureForAllTypes() {
9-
#expect(DeviceModel.iPod(.touch7G).architecture == "arm64")
10-
#expect(DeviceModel.iPhone(.iPhone15Pro).architecture == "arm64e")
11-
#expect(DeviceModel.iPad(.pro_11inchM4Wifi).architecture == "arm64e")
12-
#expect(DeviceModel.appleWatch(.series9_41mmGPS).architecture == "arm64e")
13-
#expect(DeviceModel.appleTV(.tv4K3G).architecture == "arm64e")
14-
#expect(DeviceModel.mac(.macBookProM4).architecture == "arm64e")
9+
// Diccionario de referencia que mapea cada procesador a su arquitectura esperada.
10+
// Esta es nuestra "fuente de la verdad" para el test.
11+
let expectedArchitectures: [DeviceModel.Processor: String] = [
12+
// Early Processors
13+
.APL0098: "armv6",
14+
.APL0278: "armv7",
15+
.APL0298: "armv7",
16+
.APL2298: "armv7",
17+
18+
// A-Series
19+
.appleA4: "armv7",
20+
.appleA5: "armv7",
21+
.appleA5X: "armv7",
22+
.appleA6: "armv7s",
23+
.appleA6X: "armv7s",
24+
.appleA7: "arm64",
25+
.appleA8: "arm64",
26+
.appleA8X: "arm64",
27+
.appleA9: "arm64",
28+
.appleA9X: "arm64",
29+
.appleA10Fusion: "arm64",
30+
.appleA10XFusion: "arm64",
31+
.appleA11Bionic: "arm64",
32+
.appleA12Bionic: "arm64e",
33+
.appleA12XBionic: "arm64e",
34+
.appleA12ZBionic: "arm64e",
35+
.appleA13Bionic: "arm64e",
36+
.appleA14Bionic: "arm64e",
37+
.appleA15Bionic: "arm64e",
38+
.appleA16Bionic: "arm64e",
39+
.appleA17Pro: "arm64e",
40+
.appleA18: "arm64e",
41+
.appleA18Pro: "arm64e",
42+
.appleA19: "arm64e",
43+
.appleA19Pro: "arm64e",
44+
45+
// M-Series
46+
.appleM1: "arm64e", .appleM1Pro: "arm64e", .appleM1Max: "arm64e", .appleM1Ultra: "arm64e",
47+
.appleM2: "arm64e", .appleM2Pro: "arm64e", .appleM2Max: "arm64e", .appleM2Ultra: "arm64e",
48+
.appleM3: "arm64e", .appleM3Pro: "arm64e", .appleM3Max: "arm64e",
49+
.appleM4: "arm64e", .appleM4Pro: "arm64e", .appleM4Max: "arm64e",
50+
51+
// R-Series
52+
.appleR1: "arm64",
53+
54+
// S-Series (Watch)
55+
.appleS1: "armv7k",
56+
.appleS1P: "armv7k",
57+
.appleS2: "armv7k",
58+
.appleS3: "armv8-a",
59+
.appleS4: "arm64e",
60+
.appleS5: "arm64e",
61+
.appleS6: "arm64e",
62+
.appleS7: "arm64e",
63+
.appleS8: "arm64e",
64+
.appleS9: "arm64e",
65+
.appleS10: "arm64e"
66+
]
67+
68+
// Itera sobre todos los casos de DeviceModel para verificar su arquitectura.
69+
for model in DeviceModel.allCases {
70+
let calculatedArchitecture = model.architecture
71+
var expectedArchitecture: String?
72+
73+
switch model {
74+
case .iPod(let model):
75+
expectedArchitecture = expectedArchitectures[model.processor]
76+
case .iPhone(let model):
77+
expectedArchitecture = expectedArchitectures[model.processor]
78+
case .iPad(let model):
79+
expectedArchitecture = expectedArchitectures[model.processor]
80+
case .appleWatch(let model):
81+
expectedArchitecture = expectedArchitectures[model.processor]
82+
case .appleTV(let model):
83+
expectedArchitecture = expectedArchitectures[model.processor]
84+
case .mac(let model):
85+
expectedArchitecture = expectedArchitectures[model.processor]
86+
case .macCatalyst, .macDesignedForIpad:
87+
expectedArchitecture = "arm64"
88+
case .simulator(_, let arch):
89+
expectedArchitecture = arch
90+
case .unknown:
91+
expectedArchitecture = nil
92+
}
93+
94+
#expect(
95+
calculatedArchitecture == expectedArchitecture,
96+
"Architecture mismatch for \(model.name). Expected \(String(describing: expectedArchitecture)), got \(String(describing: calculatedArchitecture))"
97+
)
98+
}
1599
}
16100

17101
@Test("Verifies architecture for special cases")

0 commit comments

Comments
 (0)