예제 #1
0
        public static IEnumerable <object[]> CodeSnippetsToCompile()
        {
            yield return(new[] { CodeSnippets.TrivialClassDeclarations });

            yield return(new[] { CodeSnippets.TrivialStructDeclarations });

            yield return(new[] { CodeSnippets.MultipleAttributes });

            yield return(new[] { CodeSnippets.NestedNamespace });

            yield return(new[] { CodeSnippets.NestedTypes });

            yield return(new[] { CodeSnippets.UnsafeContext });

            yield return(new[] { CodeSnippets.UserDefinedEntryPoint });

            yield return(new[] { CodeSnippets.AllLibraryImportNamedArguments });

            yield return(new[] { CodeSnippets.DefaultParameters });

            yield return(new[] { CodeSnippets.UseCSharpFeaturesForConstants });

            // Parameter / return types
            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <byte>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <sbyte>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <short>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <ushort>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <int>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <uint>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <long>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <ulong>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <float>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <double>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <IntPtr>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiers <UIntPtr>() });

            // Arrays
            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <byte>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <sbyte>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <short>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <ushort>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <int>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <uint>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <long>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <ulong>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <float>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <double>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <IntPtr>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers <UIntPtr>() });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("byte*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("sbyte*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("short*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("ushort*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("int*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("uint*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("long*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("ulong*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("float*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("double*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("System.IntPtr*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParametersAndModifiers("System.UIntPtr*", "unsafe") });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <byte>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <sbyte>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <short>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ushort>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <int>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <uint>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <long>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ulong>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <IntPtr>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <UIntPtr>(isByRef: false) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <byte>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <sbyte>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <short>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ushort>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <int>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <uint>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <long>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <ulong>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <IntPtr>(isByRef: true) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithSizeParam <UIntPtr>(isByRef: true) });

            // StringMarshalling
            yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Utf16) });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf16) });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Utf8) });

            // StringMarshallingCustomType
            yield return(new[] { CodeSnippets.CustomStringMarshallingParametersAndModifiers <string>() });

            // MarshalAs
            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.Bool) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.VariantBool) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <bool>(UnmanagedType.I1) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.I2) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.U2) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <IntPtr>(UnmanagedType.SysInt) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <UIntPtr>(UnmanagedType.SysUInt) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPWStr) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPTStr) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPUTF8Str) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.LPStr) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiers <string>(UnmanagedType.BStr) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPWStr) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPUTF8Str) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.LPStr) });

            yield return(new[] { CodeSnippets.MarshalAsArrayParameterWithNestedMarshalInfo <string>(UnmanagedType.BStr) });

            // [In, Out] attributes
            // By value non-blittable array
            yield return(new [] { CodeSnippets.ByValueParameterWithModifier("S[]", "Out")
                                  + CodeSnippets.CustomStructMarshalling.NonBlittableUserDefinedType()
                                  + CodeSnippets.CustomStructMarshalling.NativeTypeRef });

            yield return(new [] { CodeSnippets.ByValueParameterWithModifier("S[]", "In, Out")
                                  + CodeSnippets.CustomStructMarshalling.NonBlittableUserDefinedType()
                                  + CodeSnippets.CustomStructMarshalling.NativeTypeRef });

            // Enums
            yield return(new[] { CodeSnippets.EnumParameters });

            // Pointers
            yield return(new[] { CodeSnippets.PointerParameters <byte>() });

            yield return(new[] { CodeSnippets.PointerParameters <sbyte>() });

            yield return(new[] { CodeSnippets.PointerParameters <short>() });

            yield return(new[] { CodeSnippets.PointerParameters <ushort>() });

            yield return(new[] { CodeSnippets.PointerParameters <int>() });

            yield return(new[] { CodeSnippets.PointerParameters <uint>() });

            yield return(new[] { CodeSnippets.PointerParameters <long>() });

            yield return(new[] { CodeSnippets.PointerParameters <ulong>() });

            yield return(new[] { CodeSnippets.PointerParameters <float>() });

            yield return(new[] { CodeSnippets.PointerParameters <double>() });

            yield return(new[] { CodeSnippets.PointerParameters <bool>() });

            yield return(new[] { CodeSnippets.PointerParameters <IntPtr>() });

            yield return(new[] { CodeSnippets.PointerParameters <UIntPtr>() });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("void*") });

            // Delegates
            yield return(new[] { CodeSnippets.DelegateParametersAndModifiers });

            yield return(new[] { CodeSnippets.DelegateMarshalAsParametersAndModifiers });

            // Function pointers
            yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* <void>") });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged<void>") });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged<int, int>") });

            yield return(new[] { CodeSnippets.BasicParametersAndModifiersUnsafe("delegate* unmanaged[Stdcall]<int, int>") });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiersUnsafe("delegate* <int>", UnmanagedType.FunctionPtr) });

            yield return(new[] { CodeSnippets.MarshalAsParametersAndModifiersUnsafe("delegate* unmanaged<int>", UnmanagedType.FunctionPtr) });

            // Structs
            yield return(new[] { CodeSnippets.BlittableStructParametersAndModifiers(string.Empty) });

            yield return(new[] { CodeSnippets.BlittableStructParametersAndModifiers(CodeSnippets.DisableRuntimeMarshalling) });

            yield return(new[] { CodeSnippets.ValidateDisableRuntimeMarshalling.TypeUsage(string.Empty)
                                 + CodeSnippets.ValidateDisableRuntimeMarshalling.NonBlittableUserDefinedTypeWithNativeType });

            yield return(new[] { CodeSnippets.ValidateDisableRuntimeMarshalling.TypeUsage(CodeSnippets.DisableRuntimeMarshalling)
                                 + CodeSnippets.ValidateDisableRuntimeMarshalling.NonBlittableUserDefinedTypeWithNativeType });

            // SafeHandle
            yield return(new[] { CodeSnippets.BasicParametersAndModifiers("Microsoft.Win32.SafeHandles.SafeFileHandle") });

            yield return(new[] { CodeSnippets.BasicParameterByValue("System.Runtime.InteropServices.SafeHandle") });

            yield return(new[] { CodeSnippets.SafeHandleWithCustomDefaultConstructorAccessibility(privateCtor: false) });

            yield return(new[] { CodeSnippets.SafeHandleWithCustomDefaultConstructorAccessibility(privateCtor: true) });

            // Custom type marshalling
            yield return(new[] { CodeSnippets.CustomStructMarshalling.ParametersAndModifiers });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.StackallocParametersAndModifiersNoRef });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.StackallocTwoStageParametersAndModifiersNoRef });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.OptionalStackallocParametersAndModifiers });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.TwoStageParametersAndModifiers });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.PinnableParametersAndModifiers });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeTypePinnable("byte", "byte") });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeTypePinnable("byte", "int") });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.MarshalUsingParametersAndModifiers });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeToManagedOnlyOutParameter });

            yield return(new[] { CodeSnippets.CustomStructMarshalling.NativeToManagedOnlyReturnValue });

            yield return(new[] { CodeSnippets.ArrayMarshallingWithCustomStructElement });

            yield return(new[] { CodeSnippets.ArrayMarshallingWithCustomStructElementWithValueProperty });

            // Escaped C# keyword identifiers
            yield return(new[] { CodeSnippets.ByValueParameterWithName("Method", "@event") });

            yield return(new[] { CodeSnippets.ByValueParameterWithName("Method", "@var") });

            yield return(new[] { CodeSnippets.ByValueParameterWithName("@params", "i") });

            //Generics
            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <byte>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <sbyte>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <short>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <ushort>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <int>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <uint>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <long>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <ulong>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <float>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <double>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <IntPtr>() });

            yield return(new[] { CodeSnippets.MaybeBlittableGenericTypeParametersAndModifiers <UIntPtr>() });

            // Custom collection marshalling
            yield return(new[] { CodeSnippets.CollectionByValue <byte>() });

            yield return(new[] { CodeSnippets.CollectionByValue <sbyte>() });

            yield return(new[] { CodeSnippets.CollectionByValue <short>() });

            yield return(new[] { CodeSnippets.CollectionByValue <ushort>() });

            yield return(new[] { CodeSnippets.CollectionByValue <int>() });

            yield return(new[] { CodeSnippets.CollectionByValue <uint>() });

            yield return(new[] { CodeSnippets.CollectionByValue <long>() });

            yield return(new[] { CodeSnippets.CollectionByValue <ulong>() });

            yield return(new[] { CodeSnippets.CollectionByValue <float>() });

            yield return(new[] { CodeSnippets.CollectionByValue <double>() });

            yield return(new[] { CodeSnippets.CollectionByValue <IntPtr>() });

            yield return(new[] { CodeSnippets.CollectionByValue <UIntPtr>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <byte[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <sbyte[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <short[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ushort[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <int[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <uint[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <long[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <ulong[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <float[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <double[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <IntPtr[]>() });

            yield return(new[] { CodeSnippets.MarshalUsingCollectionCountInfoParametersAndModifiers <UIntPtr[]>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <byte>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <sbyte>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <short>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <ushort>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <int>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <uint>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <long>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <ulong>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <float>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <double>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <IntPtr>() });

            yield return(new[] { CodeSnippets.CustomCollectionDefaultMarshallerParametersAndModifiers <UIntPtr>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <byte>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <sbyte>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <short>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <ushort>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <int>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <uint>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <long>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <ulong>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <float>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <double>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <IntPtr>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerParametersAndModifiers <UIntPtr>() });

            yield return(new[] { CodeSnippets.CustomCollectionCustomMarshallerReturnValueLength <int>() });

            yield return(new[] { CodeSnippets.GenericCollectionWithCustomElementMarshalling });

            yield return(new[] { CodeSnippets.CollectionsOfCollectionsStress });
        }
예제 #2
0
        public static IEnumerable <object[]> CodeSnippetsToCompile()
        {
            // Not LibraryImportAttribute
            yield return(new object[] { ID(), CodeSnippets.UserDefinedPrefixedAttributes, 0, 3 });

            // No explicit marshalling for char or string
            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <char>(), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <string>(), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParametersAndModifiers <char>(), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParametersAndModifiers <string>(), 5, 0 });

            // No explicit marshaling for bool
            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <bool>(), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParametersAndModifiers <bool>(), 5, 0 });

            // Unsupported StringMarshalling configuration
            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Utf8), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <char>(StringMarshalling.Custom), 6, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiersWithStringMarshalling <string>(StringMarshalling.Custom), 6, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStringMarshallingParametersAndModifiers <char>(), 5, 0 });

            // Unsupported UnmanagedType
            yield return(new object[] { ID(), CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.I1), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsParametersAndModifiers <char>(UnmanagedType.U1), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsParametersAndModifiers <int[]>(UnmanagedType.SafeArray), 10, 0 });

            // Unsupported MarshalAsAttribute usage
            //  * UnmanagedType.CustomMarshaler, MarshalTypeRef, MarshalType, MarshalCookie
            yield return(new object[] { ID(), CodeSnippets.MarshalAsCustomMarshalerOnTypes, 16, 0 });

            // Unsupported [In, Out] attributes usage
            // Blittable array
            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier <int[]>("Out"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier <int[]>("In, Out"), 1, 0 });

            // By ref with [In, Out] attributes
            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier("in int", "In"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier("ref int", "In"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier("ref int", "In, Out"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier("out int", "Out"), 1, 0 });

            // By value non-array with [In, Out] attributes
            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier <byte>("In"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier <byte>("Out"), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.ByValueParameterWithModifier <byte>("In, Out"), 1, 0 });

            // LCIDConversion
            yield return(new object[] { ID(), CodeSnippets.LCIDConversionAttribute, 1, 0 });

            // No size information for array marshalling from unmanaged to managed
            //   * return, out, ref
            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <byte[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <sbyte[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <short[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <ushort[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <char[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <string[]>(CodeSnippets.DisableRuntimeMarshalling), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <int[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <uint[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <long[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <ulong[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <float[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <double[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <bool[]>(CodeSnippets.DisableRuntimeMarshalling), 5, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <IntPtr[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            yield return(new object[] { ID(), CodeSnippets.BasicParametersAndModifiers <UIntPtr[]>(CodeSnippets.DisableRuntimeMarshalling), 3, 0 });

            // Collection with non-integer size param
            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParameterWithSizeParam <float>(isByRef: false), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParameterWithSizeParam <double>(isByRef: false), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsArrayParameterWithSizeParam <bool>(isByRef: false), 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalUsingArrayParameterWithSizeParam <float>(isByRef: false), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalUsingArrayParameterWithSizeParam <double>(isByRef: false), 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalUsingArrayParameterWithSizeParam <bool>(isByRef: false), 2, 0 });

            // Custom type marshalling with invalid members
            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.NonStaticMarshallerEntryPoint, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateless.ManagedToNativeOnlyOutParameter, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateless.ManagedToNativeOnlyReturnValue, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateless.NativeToManagedOnlyInParameter, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateless.StackallocOnlyRefParameter, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateful.ManagedToNativeOnlyOutParameter, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateful.ManagedToNativeOnlyReturnValue, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateful.NativeToManagedOnlyInParameter, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomStructMarshalling.Stateful.StackallocOnlyRefParameter, 1, 0 });

            // Abstract SafeHandle type by reference
            yield return(new object[] { ID(), CodeSnippets.BasicParameterWithByRefModifier("ref", "System.Runtime.InteropServices.SafeHandle"), 1, 0 });

            // Collection with constant and element size parameter
            yield return(new object[] { ID(), CodeSnippets.MarshalUsingCollectionWithConstantAndElementCount, 2, 0 });

            // Collection with null element size parameter name
            yield return(new object[] { ID(), CodeSnippets.MarshalUsingCollectionWithNullElementName, 2, 0 });

            // Generic collection marshaller has different arity than collection.
            yield return(new object[] { ID(), CodeSnippets.CustomCollectionMarshalling.Stateless.GenericCollectionMarshallingArityMismatch, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.MarshalAsAndMarshalUsingOnReturnValue, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomCollectionMarshalling.Stateless.CustomElementMarshallingDuplicateElementIndirectionDepth, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.CustomCollectionMarshalling.Stateless.CustomElementMarshallingUnusedElementIndirectionDepth, 1, 0 });

            yield return(new object[] { ID(), CodeSnippets.RecursiveCountElementNameOnReturnValue, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.RecursiveCountElementNameOnParameter, 2, 0 });

            yield return(new object[] { ID(), CodeSnippets.MutuallyRecursiveCountElementNameOnParameter, 4, 0 });

            yield return(new object[] { ID(), CodeSnippets.MutuallyRecursiveSizeParamIndexOnParameter, 4, 0 });

            // Ref returns
            yield return(new object[] { ID(), CodeSnippets.RefReturn("int"), 2, 2 });
        }