Example #1
0
        public void Indexers()
        {
            TestRuntime.AssertXcodeVersion(9, 0);

            NSError err;
            var     shape = new nint [] { 10 };

            using (var arr = new MLMultiArray(shape, MLMultiArrayDataType.Int32, out err)) {
                Assert.IsNull(err, "err");
                Assert.AreEqual(10, arr.Count, "Count");
                Assert.AreEqual(new nint [] { 10 }, arr.Shape, "Shape");
                Assert.AreEqual(new nint [] { 1 }, arr.Strides, "Strides");

                arr [0] = 0;                 // MLMultiArray's elements aren't zero-initialized
                Assert.AreEqual(0, arr [0].Int32Value, "a");
                Assert.AreEqual(0, arr [new nint [] { 0 }].Int32Value, "b");
                Assert.AreEqual(0, arr [new NSNumber [] { NSNumber.FromNInt(0) }].Int32Value, "c nint");
                Assert.AreEqual(0, arr [new NSNumber [] { NSNumber.FromInt32(0) }].Int32Value, "c int32");
                Assert.AreEqual(0, arr [new NSNumber [] { NSNumber.FromByte(0) }].Int32Value, "c byte");
                Assert.AreEqual(0, arr [new NSNumber [] { NSNumber.FromFloat(0) }].Int32Value, "c float");

                Assert.AreEqual(0, arr.GetObject(0).Int32Value, "GetObject a");
                Assert.AreEqual(0, arr.GetObject(new nint [] { 0 }).Int32Value, "GetObject b");
                Assert.AreEqual(0, arr.GetObject(new NSNumber [] { NSNumber.FromNInt(0) }).Int32Value, "GetObject c nint");
                Assert.AreEqual(0, arr.GetObject(new NSNumber [] { NSNumber.FromInt32(0) }).Int32Value, "GetObject c int32");
                Assert.AreEqual(0, arr.GetObject(new NSNumber [] { NSNumber.FromByte(0) }).Int32Value, "GetObject c byte");
                Assert.AreEqual(0, arr.GetObject(new NSNumber [] { NSNumber.FromFloat(0) }).Int32Value, "GetObject c float");

                arr [1] = NSNumber.FromInt32(1);
                arr [new nint [] { 2 }] = NSNumber.FromInt32(2);
                arr [new NSNumber [] { NSNumber.FromUInt16(3) }] = NSNumber.FromInt32(3);
                arr.SetObject(NSNumber.FromInt32(4), 4);
                arr.SetObject(NSNumber.FromInt32(5), new nint [] { 5 });
                arr.SetObject(NSNumber.FromInt32(6), new NSNumber [] { NSNumber.FromSByte(6) });

                Assert.AreEqual(1, arr [1].Int32Value, "1");
                Assert.AreEqual(2, arr [2].Int32Value, "2");
                Assert.AreEqual(3, arr [3].Int32Value, "3");
                Assert.AreEqual(4, arr [4].Int32Value, "4");
                Assert.AreEqual(5, arr [5].Int32Value, "5");
                Assert.AreEqual(6, arr [6].Int32Value, "6");
            }

            // multi-dimensional
            shape = new nint [] { 7, 7, 7 };
            using (var arr = new MLMultiArray(shape, MLMultiArrayDataType.Int32, out err)) {
                Assert.IsNull(err, "err");
                Assert.AreEqual(shape [0] * shape [1] * shape [2], arr.Count, "Count");

                arr [0, 0, 0] = 0;                 // MLMultiArray's elements aren't zero-initialized
                Assert.AreEqual(0, arr [0, 0, 0].Int32Value, "a");
                Assert.AreEqual(0, arr [new nint [] { 0, 0, 0 }].Int32Value, "b");
                Assert.AreEqual(0, arr [new NSNumber [] { NSNumber.FromNInt(0), NSNumber.FromNInt(0), NSNumber.FromNInt(0) }].Int32Value, "c nint");

                Assert.AreEqual(0, arr.GetObject(0, 0, 0).Int32Value, "GetObject a");
                Assert.AreEqual(0, arr.GetObject(new nint [] { 0, 0, 0 }).Int32Value, "GetObject b");
                Assert.AreEqual(0, arr.GetObject(new NSNumber [] { NSNumber.FromNInt(0), NSNumber.FromNInt(0), NSNumber.FromNInt(0) }).Int32Value, "GetObject c nint");

                arr [1, 1, 1] = NSNumber.FromInt32(1);
                arr [new nint [] { 2, 2, 2 }] = NSNumber.FromInt32(2);
                arr [new NSNumber [] { NSNumber.FromUInt16(3), NSNumber.FromUInt16(3), NSNumber.FromUInt16(3) }] = NSNumber.FromInt32(3);
                arr.SetObject(NSNumber.FromInt32(4), 4, 4, 4);
                arr.SetObject(NSNumber.FromInt32(5), new nint [] { 5, 5, 5 });
                arr.SetObject(NSNumber.FromInt32(6), new NSNumber [] { NSNumber.FromSByte(6), NSNumber.FromSByte(6), NSNumber.FromSByte(6) });

                Assert.AreEqual(1, arr [1, 1, 1].Int32Value, "1");
                Assert.AreEqual(2, arr [2, 2, 2].Int32Value, "2");
                Assert.AreEqual(3, arr [3, 3, 3].Int32Value, "3");
                Assert.AreEqual(4, arr [4, 4, 4].Int32Value, "4");
                Assert.AreEqual(5, arr [5, 5, 5].Int32Value, "5");
                Assert.AreEqual(6, arr [6, 6, 6].Int32Value, "6");
            }
        }
        public static NSObject ConvertToNSObject(object obj)
        {
            if (obj != null)
            {
                if (obj is Boolean)
                {
                    return(NSNumber.FromBoolean((bool)obj));
                }
                else if (obj is Byte)
                {
                    return(NSNumber.FromByte((byte)obj));
                }
                else if (obj is SByte)
                {
                    return(NSNumber.FromSByte((sbyte)obj));
                }
                else if (obj is Int16)
                {
                    return(NSNumber.FromInt16((short)obj));
                }
                else if (obj is Int32)
                {
                    return(NSNumber.FromInt32((int)obj));
                }
                else if (obj is Int64)
                {
                    return(NSNumber.FromInt64((long)obj));
                }
                else if (obj is UInt16)
                {
                    return(NSNumber.FromUInt16((ushort)obj));
                }
                else if (obj is UInt32)
                {
                    return(NSNumber.FromUInt32((uint)obj));
                }
                else if (obj is UInt64)
                {
                    return(NSNumber.FromUInt64((ulong)obj));
                }
                else if (obj is Single)
                {
                    return(NSNumber.FromFloat((float)obj));
                }
                else if (obj is Double)
                {
                    return(NSNumber.FromDouble((double)obj));
                }
                else if (obj is string)
                {
                    return(new NSString(obj.ToString()));
                }
                else if (obj is Guid)
                {
                    return(new NSUuid(((Guid)obj).ToByteArray()));
                }
                else if (obj is DateTime)
                {
                    return(((DateTime)obj).ToNSDate());
                }
                else if (obj is DateTimeOffset)
                {
                    return(new NSString(((DateTimeOffset)obj).ToString("O")));
                }
            }

            return(null);
        }