anchor.diff:          Check.QuickThrowOnFail<Either<int,int>> (testCloneRefEq, maxRuns = 10)
           GValue(obj()) |> testClonePayload (function GValue v -> v)
   
  +    
  +    [<Test; Category("Clone")>]
  +    let ``2. Clone: struct union`` () = 
  +        Check.QuickThrowOnFail<StructDU> testCloneEq
  +        Check.QuickThrowOnFail<GenericStructDU<int>> (testCloneEq, maxRuns = 10)
  +        SGValue(obj()) |> testClonePayload (function SGValue v -> v)
  +        
       [<Test; Category("Clone")>]
       let ``2. Clone: tuple`` () = 
           Check.QuickThrowOnFail<Tuple<int>>(testCloneRefEq, maxRuns = 10)
  
positive.code:         Check.QuickThrowOnFail<int * string * string * string * string * string * string>(testCloneRefEq, maxRuns = 10)
          Check.QuickThrowOnFail<int * string * string * string * string * string * string * string>(testCloneRefEq, maxRuns = 10)
          (obj(),obj()) |> testClonePayload fst
  
      [<Test; Category("Clone")>]
      let ``2. Clone: choice`` () = 
  
negative.code:         let c' = clone c
          c |> should equal c'
          { SGValue = obj() } |> testClonePayload (fun s -> s.SGValue)
          Check.QuickThrowOnFail<StructRecord>(testCloneEq, maxRuns = 10)
          
      [<Test; Category("Clone")>]
      let ``2. Clone: union`` () = 
          // unions encode certain branches as singletons
  