         let b = Tensor<Float>(0.1)
         let simple = Simple(w: w, b: b)
 
-        let wHandle = copy(of: w.handle)
-        let bHandle = copy(of: b.handle)
+        let wHandle = w.handle.makeCopy()
+        let bHandle = b.handle.makeCopy()
 
         let expectedSimple = Simple(_handles: [wHandle, bHandle])
 

                let genericMS = Generic<Mixed, Simple>(t: mixed, u: simple)
                let generic = UltraNested(a: genericSM, b: genericMS)

                let wHandle1 = copy(of: w.handle)
                let wHandle2 = copy(of: w.handle)
                let bHandle1 = copy(of: b.handle)
                let bHandle2 = copy(of: b.handle)
                let floatHandle1 = copy(of: float.handle)
                let floatHandle2 = copy(of: float.handle)
                let intHandle1 = copy(of: int.handle)
                let intHandle2 = copy(of: int.handle)

                let expectedGeneric = UltraNested<Simple, Mixed>(
                    _handles: [wHandle1, bHandle1, floatHandle1,  intHandle1,

    }
}

extension TensorHandle {
    func makeCopy() -> TFETensorHandle {
        let status = TF_NewStatus()
        let result = TFETensorHandle(
          _owning: TFE_TensorHandleCopySharingTensor(handle._cTensorHandle, status)!)
        XCTAssertEqual(TF_GetCode(status), TF_OK)
        TF_DeleteStatus(status)
        return result
    }
}

final class TensorGroupTests: XCTestCase {
