Monobjc.BlockTests.TestBlock01 C# (CSharp) Method

TestBlock01() private method

private TestBlock01 ( ) : void
return void
        public void TestBlock01()
        {
            IntPtr number;
            int value;
            int[] values = new int[256];
			
            // Create random values
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = new Random().Next(1, 65535);
            }

            // Put zero at random index
            values[new Random().Next(values.Length)] = 0;

            // Create a mutable array
            IntPtr array = objc_sendMsg_IntPtr(this.cls_NSMutableArray, this.sel_alloc);
            Assert.AreNotEqual(IntPtr.Zero, array, "NSMutableArray allocation failed");
            array = objc_sendMsg_IntPtr(array, this.sel_init);
            Assert.AreNotEqual(IntPtr.Zero, array, "NSMutableArray initialization failed");

            // Add elements
            for (int i = 0; i < values.Length; i++)
            {
                number = objc_sendMsg_IntPtr_int(this.cls_NSNumber, this.sel_numberWithInt, values[i]);
                Assert.AreNotEqual(IntPtr.Zero, number, "NSNumber '" + values[i] + "' initialization failed");
                objc_sendMsg_void_IntPtr(array, this.sel_addObject, number);
            }

            // Checking the count
            uint count;
            if (ObjectiveCRuntime.Is64Bits)
            {
                count = (uint)objc_sendMsg_ulong(array, this.sel_count);
            }
            else
            {
                count = objc_sendMsg_uint(array, this.sel_count);
            }
            Assert.AreEqual(values.Length, count, "Array's count is wrong");

            // Checking elements
            for (int i = 0; i < values.Length; i++)
            {
                number = objc_sendMsg_IntPtr_uint(array, this.sel_objectAtIndex, (uint)i);
                Assert.AreNotEqual(IntPtr.Zero, number, "Object at index " + i + " is nil");
                value = objc_sendMsg_int(number, this.sel_intValue);
                Assert.AreEqual(values[i], value, "Object at index " + i + " is wrong");
            }

//            int lastValue = 0;
//            uint zeroIndex = 0;
//
//            // Enumerate with a block: void (^)(id, NSUInteger, BOOL *)
//            Action<IntPtr, TSUInteger, IntPtr> dlgt = delegate(IntPtr ptr1, TSUInteger ui1, IntPtr ptr2)
//            {
//                int v = objc_sendMsg_int(ptr1, this.sel_intValue);
//                if (v == 0)
//                {
//                    // Store the index of the zero value and stop enumeration
//                    zeroIndex = ui1;
//                    Marshal.WriteInt32(ptr2, 1);
//                    return;
//                }
//                // Store value if non-zero. On exit, contains the last non-zero value
//                lastValue = v;
//            };
//            using (Block block1 = this.GetBlock(dlgt))
//            {
//                // Enumerate in forward order
//                Assert.AreNotEqual(IntPtr.Zero, block1.NativePointer, "Block native structure is nil");
//                objc_sendMsg_void_IntPtr(array, this.sel_enumerateObjectsUsingBlock, block1.NativePointer);
//                int index = Array.FindIndex(values, (v) => (v == 0));
//                Assert.AreEqual(index, zeroIndex, "Index of zero value is wrong");
//                Assert.AreEqual(values[index - 1], lastValue, "Last non-zero value is wrong");
//            }

            // Release the array
            objc_sendMsg_void(array, this.sel_release);
        }