         XCTAssertEqual(try wktReader.read(wkt: input) as? MultiLineString<Coordinate2D>, expected)
     }
 
-    func testRead_MultiLineString_Invalid_MissingClosingParen() {
+    func testRead_MultiLineString_Valid_Empty() {
+
+        let input = "MULTILINESTRING EMPTY"
+        let expected = MultiLineString<Coordinate2D>(elements: [])
+
+        XCTAssertEqual(try wktReader.read(wkt: input) as? MultiLineString<Coordinate2D>, expected)
+    }
+
+    func testRead_MultiLineString_Invalid_WhiteSpace() {
+
+        let input = "MULTILINESTRING  ((1.0 1.0, 2.0 2.0, 3.0 3.0), (4.0 4.0, 5.0 5.0, 6.0 6.0))"
+        let expected = "Unexpected token at line: 1 column: 16. Expected 'single space' but found -> '  ((1.0 1.0, 2.0 2.0, 3.0 3.0), (4.0 4.0, 5.0 5.0, 6.0 6.0))'"
+
+        XCTAssertThrowsError(try wktReader.read(wkt: input)) { error in
+            if case ParseError.unexpectedToken(let message) = error {
+                XCTAssertEqual(message, expected)
+            } else {
+                XCTFail("Wrong error thrown")
+            }
+        }
+    }
+
+    func testRead_MultiLineString_Invalid_DoubleSapceAfterComma() {
+
+        let input = "MULTILINESTRING ((1.0 1.0, 2.0 2.0, 3.0 3.0),  (4.0 4.0, 5.0 5.0, 6.0 6.0))"
+        let expected = "Unexpected token at line: 1 column: 46. Expected 'single space' but found -> '  (4.0 4.0, 5.0 5.0, 6.0 6.0))'"
+
+        XCTAssertThrowsError(try wktReader.read(wkt: input)) { error in
+            if case ParseError.unexpectedToken(let message) = error {
+                XCTAssertEqual(message, expected)
+            } else {
+                XCTFail("Wrong error thrown")
+            }
+        }
+    }
+
+    func testRead_MultiLineString_Invalid_MissingLeftParen() {
+
+        let input = "MULTILINESTRING 1.0 1.0, 2.0 2.0, 3.0 3.0), (4.0 4.0, 5.0 5.0, 6.0 6.0))"
+        let expected = "Unexpected token at line: 1 column: 17. Expected '(' but found -> '1.0 1.0, 2.0 2.0, 3.0 3.0), (4.0 4.0, 5.0 5.0, 6.0 6.0))'"
+
+        XCTAssertThrowsError(try wktReader.read(wkt: input)) { error in
+            if case ParseError.unexpectedToken(let message) = error {
+                XCTAssertEqual(message, expected)
+            } else {
+                XCTFail("Wrong error thrown")
+            }
+        }
+    }
+
+    func testRead_MultiLineString_Invalid_MissingRightParen() {
 
         let input = "MULTILINESTRING ((1.0 1.0, 2.0 2.0, 3.0 3.0), (4.0 4.0, 5.0 5.0, 6.0 6.0)"
         let expected = "Unexpected token at line: 1 column: 74. Expected ')' but found -> ''"

        }
    }

    func testRead_MultiPoint_Valid() {

        let input = "MULTIPOINT ((1.0 2.0), (3.0 4.0))"

    fileprivate typealias WKTReaderType = WKTReader<Coordinate2D>
    fileprivate var wktReader = WKTReaderType(precision: FloatingPrecision(), coordinateReferenceSystem: Cartesian())

    /// Mark: Init

    func testRead_Point_Float_Valid() {

        let input = "POINT (1.0 1.0)"
