csfile = open("test1.cs", "w")
grouping = range(1,30)

csfile.write("""
using System;
using System.Runtime.InteropServices;
public class XYZ {
""");

def genStruct(size):
	csfile.write("[StructLayout(LayoutKind.Sequential)]\n")
	csfile.write("public struct Size%d { \n" % (size))
	for each in range(0, size):
		csfile.write("public int x%d = %d;\n" % (each, each));
	csfile.write("public Size%d() { } \n" % size);
	csfile.write("}\n\n");
	
	csfile.write(""" internal static void 
					TestSize%d(Size%d arg)
					{
						unsafe
						{
							IntPtr ptr = Marshal.AllocHGlobal(sizeof(Size%d));
							Marshal.StructureToPtr(arg, ptr, false);
							// Leak memory, but it's ok
						}
					}
					""" % (size, size,size));
	
for each in grouping:
	genStruct(each)

csfile.write("""
public static void Main()
{
""")

for each in grouping:
	csfile.write("""
		TestSize%d(new Size%d());
	""" %(each, each));
csfile.write("""
}
};
""");
csfile.close()
