     }
 
     public func extrema() -> (xyz: [[CGFloat]], values: [CGFloat] ) {
-        return (xyz: [], [])
+        return (xyz: [[],[],[]], [])
     }
 
     public func project(_ point: CGPoint) -> (point: CGPoint, t: CGFloat) {

    }

    public func split(from t1: CGFloat, to t2: CGFloat) -> LineSegment {
        let p0 = self.p0
        let p1 = self.p1
        return LineSegment(p0: Utils.lerp(t1, p0, p1),
                           p1: Utils.lerp(t2, p0, p1))
    }

    public func split(at t: CGFloat) -> (left: LineSegment, right: LineSegment) {

    }

    public func compute(_ t: CGFloat) -> CGPoint {
        if t == 0 {
            return self.p0
        } else if t == 1 {
            return self.p1
        } else {
            return Utils.lerp(t, self.p0, self.p1)
        }
    }

    // -- MARK: - overrides
