11import XCTest
22import CodableCSV
33
4- /// Tests checking support for encoding/decoding floating-points.
4+ /// Check support for encoding/decoding floating-points.
55final class CodableFloatingPointTests : XCTestCase {
66 override func setUp( ) {
77 self . continueAfterFailure = false
88 }
99}
1010
1111extension CodableFloatingPointTests {
12+ /// Representation of a CSV row.
1213 private struct _Student : Codable , Equatable {
14+ /// A student's name.
1315 var name : String
16+ /// A student's age.
1417 var age : Double
1518 }
1619}
1720
1821extension CodableFloatingPointTests {
19- /// Test the regular floating-point encoding/decoding.
22+ /// Tests the regular floating-point encoding/decoding.
2023 func testRegularUsage( ) throws {
21- let encoder = CSVEncoder { $0. headers = [ " name " , " age " ] }
22- let students : [ _Student ] = [
23- . init( name: " Heidrun " , age: 27.3 ) ,
24- . init( name: " Gudrun " , age: 62.0008 ) ,
25- ]
24+ let rows = [ _Student ( name: " Heidrun " , age: 27.3 ) ,
25+ _Student ( name: " Gudrun " , age: 62.0008 ) ]
2626
27- let data = try encoder. encode ( students, into: Data . self)
27+ let encoder = CSVEncoder { $0. headers = [ " name " , " age " ] }
28+ let data = try encoder. encode ( rows, into: Data . self)
2829
2930 let decoder = CSVDecoder { $0. headerStrategy = . firstLine }
3031 let result = try decoder. decode ( [ _Student ] . self, from: data)
31- XCTAssertEqual ( students , result)
32+ XCTAssertEqual ( rows , result)
3233 }
3334
34- /// Test the regular floating-point encoding/decoding .
35+ /// Tests the error throwing/handling .
3536 func testThrows( ) throws {
37+ let rows = [ _Student ( name: " Heidrun " , age: 27.3 ) ,
38+ _Student ( name: " Gudrun " , age: 62.0008 ) ,
39+ _Student ( name: " Brunhilde " , age: . infinity) ]
40+
3641 let encoder = CSVEncoder { $0. headers = [ " name " , " age " ] }
37- let students : [ _Student ] = [
38- . init( name: " Heidrun " , age: 27.3 ) ,
39- . init( name: " Gudrun " , age: 62.0008 ) ,
40- . init( name: " Brunhilde " , age: . infinity)
41- ]
42- XCTAssertThrowsError ( try encoder. encode ( students, into: Data . self) )
42+ XCTAssertThrowsError ( try encoder. encode ( rows, into: Data . self) )
4343
4444 let decoder = CSVDecoder { $0. headerStrategy = . firstLine }
4545 let data = """
@@ -51,26 +51,23 @@ extension CodableFloatingPointTests {
5151 XCTAssertThrowsError ( try decoder. decode ( [ _Student ] . self, from: data) )
5252 }
5353
54- /// Test the regular floating-point encoding/decoding.
55- func testConversion( ) throws {
56- let students : [ _Student ] = [
57- . init( name: " Heidrun " , age: 27.3 ) ,
58- . init( name: " Gudrun " , age: 62.0008 ) ,
59- . init( name: " Brunhilde " , age: . infinity)
60- ]
54+ /// Tests the the non conforming floating-point conversions.
55+ func testNonConformity( ) throws {
56+ let rows = [ _Student ( name: " Heidrun " , age: 27.3 ) ,
57+ _Student ( name: " Gudrun " , age: 62.0008 ) ,
58+ _Student ( name: " Brunhilde " , age: . infinity) ]
6159
6260 let encoder = CSVEncoder {
6361 $0. headers = [ " name " , " age " ]
6462 $0. nonConformingFloatStrategy = . convert( positiveInfinity: " +∞ " , negativeInfinity: " -∞ " , nan: " NaN " )
6563 }
66-
67- let data = try encoder. encode ( students, into: Data . self)
64+ let data = try encoder. encode ( rows, into: Data . self)
6865
6966 let decoder = CSVDecoder {
7067 $0. headerStrategy = . firstLine
7168 $0. nonConformingFloatStrategy = . convert( positiveInfinity: " +∞ " , negativeInfinity: " -∞ " , nan: " NaN " )
7269 }
7370 let result = try decoder. decode ( [ _Student ] . self, from: data)
74- XCTAssertEqual ( students , result)
71+ XCTAssertEqual ( rows , result)
7572 }
7673}
0 commit comments