 
         XCTAssertEqual(try wktReader.read(wkt: input) as? GeometryCollection, expected)
     }
+
+    func testRead_GeometryCollection_Invalid_ElementNoZ() {
+
+        let input = "GEOMETRYCOLLECTION Z (POINT (1.0 1.0 1.0))"
+        let expected = "Unexpected token at line: 1 column: 29. Expected 'Z' but found -> '(1.0 1.0 1.0))'"
+
+        XCTAssertThrowsError(try wktReader.read(wkt: input)) { error in
+            if case ParseError.unexpectedToken(let message) = error {
+                XCTAssertEqual(message, expected)
+            } else {
+                XCTFail("Wrong error thrown")
+            }
+        }
+    }
 }
 
 // MARK: - Coordinate3DM, FloatingPrecision, Cartesian -


        let input = "POINT Z (1.0 1.0 )"
        let expected = "Unexpected token at line: 1 column: 18. Expected 'numeric literal' but found -> ')'"

        XCTAssertThrowsError(try wktReader.read(wkt: input)) { error in
            if case ParseError.unexpectedToken(let message) = error {

        }
    }

    func testRead_Point_Invalid_Coordinate_NoSpaceAfterM() {

        let input = "POINT ZM(1.0 1.0 1.01.0)"
        let expected = "Unexpected token at line: 1 column: 9. Expected 'single space' but found -> '(1.0 1.0 1.01.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_Point_Invalid_Coordinate_NoSpaceBeforeM() {

        let input = "POINT ZM (1.0 1.0 1.01.0)"
