@@ -116,6 +116,47 @@ FloatingPoint.test("BinaryFloatingPoint/genericIntegerConversion") {
116116}
117117
118118FloatingPoint.test("BinaryFloatingPoint/genericFloatingPointConversion") {
119+ func convert<
120+ T: BinaryFloatingPoint, U: BinaryFloatingPoint
121+ >(exactly value: T, to: U.Type) -> U { U(exactly: value) }
122+
123+ expectEqual(convert(exactly: 0 as Float, to: Double.self), 0.0)
124+ expectEqual(convert(exactly: -0.0 as Float, to: Double.self), -0.0)
125+ expectEqual(
126+ convert(exactly: -0.0 as Float, to: Double.self).sign,
127+ FloatingPointSign.minus)
128+ expectEqual(convert(exactly: 0 as Double, to: Float.self), 0.0 as Float)
129+ expectEqual(convert(exactly: -0.0 as Double, to: Float.self), -0.0 as Float)
130+ expectEqual(
131+ convert(exactly: -0.0 as Double, to: Float.self).sign,
132+ FloatingPointSign.minus)
133+ expectEqual(convert(exactly: 1 as Float, to: Double.self), 1.0)
134+ expectEqual(convert(exactly: -1 as Float, to: Double.self), -1.0)
135+ expectEqual(convert(exactly: 1 as Double, to: Float.self), 1.0 as Float)
136+ expectEqual(convert(exactly: -1 as Double, to: Float.self), -1.0 as Float)
137+ expectEqual(
138+ convert(exactly: Float.infinity, to: Double.self), Double.infinity)
139+ expectEqual(
140+ convert(exactly: -Float.infinity, to: Double.self), -Double.infinity)
141+ expectEqual(
142+ convert(exactly: Double.infinity, to: Float.self), Float.infinity)
143+ expectEqual(
144+ convert(exactly: -Double.infinity, to: Float.self), -Float.infinity)
145+ expectEqual(convert(exactly: Float.nan, to: Double.self), nil)
146+ expectEqual(convert(exactly: Double.nan, to: Float.self), nil)
147+ expectEqual(convert(exactly: Float.nan, to: Float.self), nil)
148+ expectEqual(convert(exactly: Double.nan, to: Double.self), nil)
149+ expectEqual(
150+ convert(exactly: Double.leastNonzeroMagnitude, to: Float.self), nil)
151+ expectEqual(
152+ convert(exactly: Float.leastNonzeroMagnitude, to: Double.self),
153+ Double(Float.leastNonzeroMagnitude))
154+ expectEqual(
155+ convert(exactly: Double.greatestFiniteMagnitude, to: Float.self), nil)
156+ expectEqual(
157+ convert(exactly: Float.greatestFiniteMagnitude, to: Double.self),
158+ Double(Float.greatestFiniteMagnitude))
159+
119160 expectTrue(Double._convert(from: 0 as Float) == (value: 0, exact: true))
120161 expectTrue(Double._convert(from: -0.0 as Float) == (value: -0.0, exact: true))
121162 expectTrue(Double._convert(from: 1 as Float) == (value: 1, exact: true))
0 commit comments