anchor.diff:  open Xunit
   open TurtleRunner
   open Microsoft.FSharp.Reflection
  +open System.Reflection
  +
  +// These tests rely heavily on reflection 
  +// This is to allow the tests to compile and fail with an incomplete solution
   
   let private getUnionTypeFromString<'a> (s:string, v:obj list Option) =
       let matchedType = FSharpType.GetUnionCases typeof<'a> 
  
positive.code:     let direction = getUnionTypeFromString<TurnDirection>("Left", None)
  
      match direction with
      | Some value -> let item = getUnionTypeFromString<Command>("Turn", Some [Left; 10.0])
                      Assert.True(item.IsSome)
      | None -> Assert.True(false, "Must define TurnDirection Left first")
  
  
negative.code:     match colour with
      | Some value -> let item = getUnionTypeFromString<Command>("SetColour", Some [value])
                      Assert.True(item.IsSome)
      | None -> Assert.True(false, "Must define Colour Red first")
  
  [<Fact>]
  let ``Expected Turtle record type is defined``() =
      let penState = getUnionTypeFromString<PenState>("Up", None)
      let colour = getUnionTypeFromString<Colour>("Red", None)
  
      match (penState, colour) with
      | (Some penVal, Some colourVal) 
          -> let record = getRecordType<Turtle>([0.0; 0.0; 90.0; Up; Red])
             Assert.True(record.IsSome)
      | (None, Some _) -> Assert.True(false, "Must define PenState Up first")
      | (Some _, None) -> Assert.True(false, "Must define Colour Red first")
      | (None, None) -> Assert.True(false, "Must define PenState Up & Colour Red first")
  
  [<Fact>]
  let ``Expected processCommand function accepts a Move command``() =
      let command = getUnionTypeFromString<Command>("Move", Some [10.0])
      testProcessCommand command
  
  [<Fact>]
  let ``Expected processCommand function accepts a Turn command``() =
      let direction = getUnionTypeFromString<TurnDirection>("Left", None)
  
      match direction with
      | Some value -> let command = getUnionTypeFromString<Command>("Turn", Some [value; 90.0])
                      testProcessCommand command
      | None -> Assert.True(false, "Must define TurnDirection Left first")
  
  [<Fact>]
  let ``Expected processCommand function accepts a SetPen command``() =
      let penState = getUnionTypeFromString<PenState>("Up", None)
  
      match penState with
      | Some value -> let command = getUnionTypeFromString<Command>("SetPen", Some [value])
                      testProcessCommand command
      | None -> Assert.True(false, "Must define PenState Up first")
  
  [<Fact>]
  let ``Expected processCommand function accepts a SetColour command``() =
      let colour = getUnionTypeFromString<Colour>("Red", None)
  
      match colour with
      | Some value -> let command = getUnionTypeFromString<Command>("SetColour", Some [value])
                      testProcessCommand command
      | None -> Assert.True(false, "Must define SetColour Red first")