anchor.diff:  
                   // positive range
                   TimeSpan.FromMinutes(30.0), shouldSucceed
  -                TimeSpan.FromHours(1.0), shouldSucceed
                   TimeSpan.FromHours(2.0), shouldSucceed
                   TimeSpan(13, 59, 0), shouldSucceed
                   TimeSpan.FromHours(14.0), shouldSucceed
  
positive.code: 
                  // negative range
                  TimeSpan.FromMinutes(-30.0), shouldSucceed
                  TimeSpan.FromHours(-1.0), shouldSucceed
                  TimeSpan.FromHours(-2.0), shouldSucceed
                  TimeSpan(-13, -59, 0), shouldSucceed
                  TimeSpan.FromHours(-14.0), shouldSucceed
  
negative.code:             yield!
                  offsets
                  |> List.map (fun (offset, _) ->
                      // offset = local offset doesn't throw
                      if offset = localOffset then
                          // don't adjust to throw: generated test name might conflict with other test case
                          // instead emit succeeding test to keep test count same
                          // -> same as single testCase below (`offset = localOffset (...) succeeds`)
                          (offset, shouldSucceed)
                      else
                          (offset, shouldThrowUTCOffsetAndLocalDateTimeDontMatch)
                  )
                  |> withCtor fromLocalDateTime
                  |> List.map toTestCase
  