public void ArrayFieldMappedValueShouldBeCorrect(Type type, object value, object expectedBigQueryValue,
                                                         Value.MapResult expectedValueAgain, bool fetchOnly)
        {
            var fieldToBigQuery   = Value.MaybeRepeatedFieldToBigQueryFunction(type.MakeArrayType());
            var fieldFromBigQuery = Value.MaybeRepeatedFieldFromBigQueryFunction(type.MakeArrayType());

            object bigQueryValue;

            if (!fetchOnly)
            {
                bigQueryValue = fieldToBigQuery(value);
                bigQueryValue
                .ShouldBeEquivalentTo(expectedBigQueryValue);
            }
            else
            {
                bigQueryValue = expectedBigQueryValue;
            }

            if (expectedValueAgain.Skip)
            {
                fieldFromBigQuery(bigQueryValue).Skip.Should().BeTrue("Should skip");
            }
            else
            {
                fieldFromBigQuery(bigQueryValue).Value.ShouldBeEquivalentTo(expectedValueAgain.Value);
            }
        }
        public void FieldMappedValueShouldBeCorrect(Type type, object value, object expectedBigQueryValue,
                                                    Value.MapResult expectedValueAgain, bool fetchOnly)
        {
            var fieldToBigQuery   = Value.MaybeFieldToBigQueryFunction(type);
            var fieldFromBigQuery = Value.MaybeFieldFromBigQueryFunction(type);

            object bigQueryValue;

            if (!fetchOnly)
            {
                bigQueryValue = fieldToBigQuery(value);
                bigQueryValue
                .ShouldBeEquivalentTo(expectedBigQueryValue,
                                      $"{type} value {value} should be {expectedBigQueryValue} when converted to big query value");
            }
            else
            {
                bigQueryValue = expectedBigQueryValue;
            }

            var valueAgain = fieldFromBigQuery(bigQueryValue);

            if (expectedValueAgain.Skip)
            {
                valueAgain.Skip.Should()
                .BeTrue($"Should skip setting {type} value {bigQueryValue} when converting from big query");
            }
            else
            {
                valueAgain.Value.ShouldBeEquivalentTo(expectedValueAgain.Value,
                                                      $"Should set {type} value {bigQueryValue} to {expectedValueAgain.Value} when converting from big query");
            }
        }