anchor.diff:              ({ r1 with A = r1.B} <> r2) |@ "{r1 with A = r1.B} <> r2" .&.
               (r1.Equals r2)              |@ "r1.Equals r2"
   
  +
   [<Struct>]
   type StructRecord =
       {   C: int
           D: int
       }
  +
   
   let [<Test>] ``can compare struct records`` () =
       Check.QuickThrowOnFailure <|
  
positive.code:     Assert.IsTrue ((x3.R2 = x1))
      Assert.IsTrue ((y3.R2 = x1))
   
  [<Struct>]
  [<CustomComparison; CustomEquality>]
  type ComparisonStructRecord =
  
negative.code: 
  [<Struct>]
  type StructRecordDefaultValue =
      {   [<DefaultValue (false)>] 
          R1: Record
          R2: StructRecord
      }
  
  
  let [<Test>] ``correct behaviour with a [<DefaultValue>] on a ref type field of a struct record`` () =
      Check.QuickThrowOnFailure <|
          fun (i1:int) (i2:int) ->
              let s = { C = i1; D = i2 }
              let r1 = { R2 = s }
              (obj.ReferenceEquals (r1.R1, null))     |@ "r1.R1 is null" .&.
              (r1.R2 = { C = i1; D = i2 })            |@ "r1.R2 = { C = i1; D = i2 }"
  
  [<Struct>]
  type StructRecordDefaultValue2 =
      {   R1: Record
          [<DefaultValue (false)>] 
          R2: StructRecord
      }
  
  
  let [<Test>] ``correct behaviour with a [<DefaultValue>] on a value type field of a struct record`` () =
      Check.QuickThrowOnFailure <|
          fun (i1:int) (i2:int) ->
              let r = { A = i1; B = i2 }
              let r1 = { R1 = r }
              (r1.R1 = { A = i1; B = i2 })    |@ "r1.R1 = { A = i1; B = i2 }" .&.
              (r1.R2 = { C = 0; D = 0 })      |@ "r1.R2 = { C = 0; D = 0 }"
  
  
  let [<Test>] ``correct behaviour for Unchecked.defaultof on a struct record`` () =
      let x1 = { C = 0; D = 0 }
  