             
         }
         if _data2.count < 2 {
-            if left.contains(right) {
+            if left.contains(right, hint: Set(0..<right.count).subtracting(overlap_r_index)) {
                 overlap = .superset
-            } else if right.contains(left) {
+            } else if right.contains(left, hint: Set(0..<left.count).subtracting(overlap_l_index)) {
                 overlap = .subset
             }
             return


extension Shape.Component {
    
    fileprivate func contains(_ loop: Shape.Component) -> Bool {
        
        if !self.bigBound.contains(loop.boundary) {
            return false

        if looping_left.count != 0 || looping_right.count != 0 {
            return
        }
        if _data.count < 2 {
            if left.contains(right, hint: Set(0..<right.count).subtracting(overlap_r_index)) {
                overlap = .superset
            } else if right.contains(left, hint: Set(0..<left.count).subtracting(overlap_l_index)) {
                overlap = .subset
            }
            return
        }
        
        func signCheck(_ p0: Point, _ p1: Point, _ q: Point) -> FloatingPointSign {
            
            let p0u = p0.unit
