Skip to content

Commit f0a2d5f

Browse files
committed
Add tests for min/maxRepresentableNumber functions
1 parent 1f08182 commit f0a2d5f

2 files changed

Lines changed: 159 additions & 0 deletions

File tree

BitByteData.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
06FA0DC421935115009B4DEB /* LsbBitWriterBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A81B0E2177947600B6B7BB /* LsbBitWriterBenchmarks.swift */; };
3636
06FA0DC521935115009B4DEB /* MsbBitWriterBenchmarks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A81B102177955500B6B7BB /* MsbBitWriterBenchmarks.swift */; };
3737
E608AB16253740C60036626D /* TestHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E608AB15253740C60036626D /* TestHelper.swift */; };
38+
E6425642267FA97E002D75D8 /* SignedNumberRepresentationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6425641267FA97E002D75D8 /* SignedNumberRepresentationTests.swift */; };
3839
/* End PBXBuildFile section */
3940

4041
/* Begin PBXContainerItemProxy section */
@@ -85,6 +86,7 @@
8586
06F0656C1FFAEA4B00312A82 /* BitByteData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BitByteData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8687
06F065811FFAEAA000312A82 /* TestBitByteData.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestBitByteData.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
8788
E608AB15253740C60036626D /* TestHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHelper.swift; sourceTree = "<group>"; };
89+
E6425641267FA97E002D75D8 /* SignedNumberRepresentationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignedNumberRepresentationTests.swift; sourceTree = "<group>"; };
8890
/* End PBXFileReference section */
8991

9092
/* Begin PBXFrameworksBuildPhase section */
@@ -169,6 +171,7 @@
169171
06F065641FFAEA1F00312A82 /* LsbBitWriterTests.swift */,
170172
06F065621FFAEA1F00312A82 /* MsbBitWriterTests.swift */,
171173
E608AB15253740C60036626D /* TestHelper.swift */,
174+
E6425641267FA97E002D75D8 /* SignedNumberRepresentationTests.swift */,
172175
);
173176
path = BitByteDataTests;
174177
sourceTree = "<group>";
@@ -320,6 +323,7 @@
320323
buildActionMask = 2147483647;
321324
files = (
322325
06F0658F1FFAEAA900312A82 /* LsbBitReaderTests.swift in Sources */,
326+
E6425642267FA97E002D75D8 /* SignedNumberRepresentationTests.swift in Sources */,
323327
06F065901FFAEAA900312A82 /* LittleEndianByteReaderTests.swift in Sources */,
324328
E608AB16253740C60036626D /* TestHelper.swift in Sources */,
325329
06F0658C1FFAEAA900312A82 /* MsbBitWriterTests.swift in Sources */,
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
// Copyright (c) 2021 Timofey Solomko
2+
// Licensed under MIT License
3+
//
4+
// See LICENSE for license information
5+
6+
import XCTest
7+
import BitByteData
8+
9+
class SignedNumberRepresentationTests: XCTestCase {
10+
11+
// MARK: minRepresentableNumber
12+
13+
func testMinRepresentableNumber_SM() {
14+
let repr = SignedNumberRepresentation.signMagnitude
15+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), 0)
16+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -1)
17+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -1023)
18+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -16383)
19+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -4194303)
20+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), Int.min)
21+
}
22+
23+
func testMinRepresentableNumber_1C() {
24+
let repr = SignedNumberRepresentation.oneComplementNegatives
25+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), 0)
26+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -1)
27+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -1023)
28+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -16383)
29+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -4194303)
30+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), Int.min)
31+
}
32+
33+
func testMinRepresentableNumber_2C() {
34+
let repr = SignedNumberRepresentation.twoComplementNegatives
35+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), -1)
36+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -2)
37+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -1024)
38+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -16384)
39+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -4194304)
40+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), Int.min)
41+
}
42+
43+
func testMinRepresentableNumber_Biased_E3() {
44+
let repr = SignedNumberRepresentation.biased(bias: 3)
45+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), -3)
46+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -3)
47+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -3)
48+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -3)
49+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -3)
50+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), -3)
51+
}
52+
53+
func testMinRepresentableNumber_Biased_E127() {
54+
let repr = SignedNumberRepresentation.biased(bias: 127)
55+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), -127)
56+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -127)
57+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -127)
58+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -127)
59+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -127)
60+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), -127)
61+
}
62+
63+
func testMinRepresentableNumber_Biased_E1023() {
64+
let repr = SignedNumberRepresentation.biased(bias: 1023)
65+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), -1023)
66+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -1023)
67+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -1023)
68+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -1023)
69+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -1023)
70+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), -1023)
71+
}
72+
73+
func testMinRepresentableNumber_RN2() {
74+
let repr = SignedNumberRepresentation.radixNegativeTwo
75+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 1), 0)
76+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 2), -2)
77+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 11), -682)
78+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 15), -10922)
79+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: 23), -2796202)
80+
XCTAssertEqual(repr.minRepresentableNumber(bitsCount: Int.bitWidth), Int.min)
81+
}
82+
83+
// MARK: maxRepresentableNumber
84+
85+
func testMaxRepresentableNumber_SM() {
86+
let repr = SignedNumberRepresentation.signMagnitude
87+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), 0)
88+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), 1)
89+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1023)
90+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 16383)
91+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 4194303)
92+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max)
93+
}
94+
95+
func testMaxRepresentableNumber_1C() {
96+
let repr = SignedNumberRepresentation.oneComplementNegatives
97+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), 0)
98+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), 1)
99+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1023)
100+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 16383)
101+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 4194303)
102+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max)
103+
}
104+
105+
func testMaxRepresentableNumber_2C() {
106+
let repr = SignedNumberRepresentation.twoComplementNegatives
107+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), 0)
108+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), 1)
109+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1023)
110+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 16383)
111+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 4194303)
112+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max)
113+
}
114+
115+
func testMaxRepresentableNumber_Biased_E3() {
116+
let repr = SignedNumberRepresentation.biased(bias: 3)
117+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), -2)
118+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), 0)
119+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 2044)
120+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 32764)
121+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 8388604)
122+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max - 3)
123+
}
124+
125+
func testMaxRepresentableNumber_Biased_E127() {
126+
let repr = SignedNumberRepresentation.biased(bias: 127)
127+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), -126)
128+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), -124)
129+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1920)
130+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 32640)
131+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 8388480)
132+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max - 127)
133+
}
134+
135+
func testMaxRepresentableNumber_Biased_E1023() {
136+
let repr = SignedNumberRepresentation.biased(bias: 1023)
137+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), -1022)
138+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), -1020)
139+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1024)
140+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 31744)
141+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 8387584)
142+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), Int.max - 1023)
143+
}
144+
145+
func testMaxRepresentableNumber_RN2() {
146+
let repr = SignedNumberRepresentation.radixNegativeTwo
147+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 1), 1)
148+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 2), 1)
149+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 11), 1365)
150+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 15), 21845)
151+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: 23), 5592405)
152+
XCTAssertEqual(repr.maxRepresentableNumber(bitsCount: Int.bitWidth), 6148914691236517205)
153+
}
154+
155+
}

0 commit comments

Comments
 (0)