public void RubyArray_Add() { RubyArray a; a = new RubyArray(); for (int i = 0; i < Utils.MinListSize; i++) { a.Add(i); Assert((int)a[i] == i && a.Count == i + 1 && a.Capacity == Utils.MinListSize); } Assert(((IList)a).Add(Utils.MinListSize) == Utils.MinListSize); Assert(a.Count == Utils.MinListSize + 1); for (int i = 0; i < a.Count; i++) { Assert((int)a[i] == i); } a = new RubyArray(new[] { 1, 2, 3 }); a.AddCapacity(0); Assert(a.Count == 3); a.AddCapacity(100); Assert(a.Count == 3 && a.Capacity >= 103); a = new RubyArray(new[] { 1, 2, 3 }); a.AddMultiple(0, 4); AssertValueEquals(a, 1, 2, 3); a.AddMultiple(5, 4); AssertValueEquals(a, 1, 2, 3, 4, 4, 4, 4, 4); a = new RubyArray(new[] { 1, 2, 3 }); a.AddRange(new object[0]); AssertValueEquals(a, 1, 2, 3); a.AddRange(new[] { 4 }); AssertValueEquals(a, 1, 2, 3, 4); a.AddRange(new[] { 5, 6, 7, 8, 9, 10 }); AssertValueEquals(a, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); a.AddRange(new[] { 11 }); AssertValueEquals(a, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); a = new RubyArray(); a.AddRange((IEnumerable) new RubyArray(new[] { 1, 2, 3 })); a.AddRange((IList) new RubyArray(new[] { 1, 2, 3 }), 1, 2); AssertValueEquals(a, 1, 2, 3, 2, 3); a.Freeze(); AssertExceptionThrown <InvalidOperationException>(() => a.Add(1)); AssertExceptionThrown <InvalidOperationException>(() => a.AddCapacity(10)); AssertExceptionThrown <InvalidOperationException>(() => a.AddMultiple(10, 10)); AssertExceptionThrown <InvalidOperationException>(() => a.AddRange(new object[0])); AssertExceptionThrown <InvalidOperationException>(() => a.AddRange(Enumerable(0))); }
public void RubyArray_Add() { RubyArray a; a = new RubyArray(); for (int i = 0; i < Utils.MinListSize; i++) { a.Add(i); Assert((int)a[i] == i && a.Count == i + 1 && a.Capacity == Utils.MinListSize); } Assert(((IList)a).Add(Utils.MinListSize) == Utils.MinListSize); Assert(a.Count == Utils.MinListSize + 1); for (int i = 0; i < a.Count; i++) { Assert((int)a[i] == i); } a = new RubyArray(new[] { 1,2,3 }); a.AddCapacity(0); Assert(a.Count == 3); a.AddCapacity(100); Assert(a.Count == 3 && a.Capacity >= 103); a = new RubyArray(new[] { 1, 2, 3 }); a.AddMultiple(0, 4); AssertValueEquals(a, 1, 2, 3); a.AddMultiple(5, 4); AssertValueEquals(a, 1, 2, 3, 4, 4, 4, 4, 4); a = new RubyArray(new[] { 1, 2, 3 }); a.AddRange(new object[0]); AssertValueEquals(a, 1, 2, 3); a.AddRange(new[] { 4 }); AssertValueEquals(a, 1, 2, 3, 4); a.AddRange(new[] { 5, 6, 7, 8, 9, 10 }); AssertValueEquals(a, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); a.AddRange(new[] { 11 }); AssertValueEquals(a, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); a = new RubyArray(); a.AddRange((IEnumerable)new RubyArray(new[] { 1, 2, 3 })); a.AddRange((IList)new RubyArray(new[] { 1, 2, 3 }), 1, 2); AssertValueEquals(a, 1, 2, 3, 2, 3); a.Freeze(); AssertExceptionThrown<RuntimeError>(() => a.Add(1)); AssertExceptionThrown<RuntimeError>(() => a.AddCapacity(10)); AssertExceptionThrown<RuntimeError>(() => a.AddMultiple(10, 10)); AssertExceptionThrown<RuntimeError>(() => a.AddRange(new object[0])); AssertExceptionThrown<RuntimeError>(() => a.AddRange(Enumerable(0))); }
public static object SetElement(RubyArray/*!*/ self, [DefaultProtocol]int index, object value) { index = NormalizeIndexThrowIfNegative(self, index); if (index >= self.Count) { self.AddMultiple(index + 1 - self.Count, null); } return self[index] = value; }
public static RubyArray/*!*/ ReinitializeByRepeatedValue(RubyContext/*!*/ context, RubyArray/*!*/ self, [DefaultProtocol]int size, object value) { RubyUtils.RequiresNotFrozen(context, self); if (size < 0) { throw RubyExceptions.CreateArgumentError("negative array size"); } self.Clear(); self.AddMultiple(size, value); return self; }
public void RubyArray_Remove() { RubyArray a; a = new RubyArray(new[] { 1, 2, 3, 4, 5 }); a.RemoveAt(1); AssertValueEquals(a, 1, 3, 4, 5); a.RemoveAt(1); AssertValueEquals(a, 1, 4, 5); a.RemoveAt(1); AssertValueEquals(a, 1, 5); a.RemoveAt(1); AssertValueEquals(a, 1); a.AddRange(new[] { 2, 3 }); AssertValueEquals(a, 1, 2, 3); a.RemoveAt(0); AssertValueEquals(a, 2, 3); a.RemoveAt(0); AssertValueEquals(a, 3); a.RemoveAt(0); AssertValueEquals(a); a.AddRange(new[] { 1, 2, 3 }); AssertValueEquals(a, 1, 2, 3); a = new RubyArray(); a.AddMultiple(100, 1); a[0] = 0; a[99] = 99; a.RemoveRange(1, 98); AssertValueEquals(a, 0, 99); Assert(a.Capacity < 100, "array should shrink"); ((IList)a).Remove(0); AssertValueEquals(a, 99); a.Clear(); Assert(a.Count == 0); a = new RubyArray(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }); a.RemoveRange(0, 4); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11); a.AddMultiple(3, 1); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11, 1, 1, 1); a.RemoveRange(0, 6); AssertValueEquals(a, 10, 11, 1, 1, 1); a.AddMultiple(2, 2); AssertValueEquals(a, 10, 11, 1, 1, 1, 2, 2); a = new RubyArray(); a = new RubyArray(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }); a.RemoveRange(0, 4); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11); a.AddMultiple(3, null); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11, null, null, null); var vector = new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; a = new RubyArray(vector); for (int i = 0, c = a.Count; i < c; i++) { a.RemoveAt(0); vector = ArrayUtils.ShiftLeft(vector, 1); AssertValueEquals(a, vector); } a = new RubyArray(new[] { 1, 2, 3 }); a.Freeze(); Assert(!a.Remove(0)); AssertExceptionThrown <InvalidOperationException>(() => a.Remove(1)); AssertExceptionThrown <InvalidOperationException>(() => a.Clear()); AssertExceptionThrown <InvalidOperationException>(() => a.RemoveAt(0)); AssertExceptionThrown <InvalidOperationException>(() => a.RemoveRange(0, 1)); }
public void RubyArray_Remove() { RubyArray a; a = new RubyArray(new[] { 1, 2, 3, 4, 5 }); a.RemoveAt(1); AssertValueEquals(a, 1, 3, 4, 5); a.RemoveAt(1); AssertValueEquals(a, 1, 4, 5); a.RemoveAt(1); AssertValueEquals(a, 1, 5); a.RemoveAt(1); AssertValueEquals(a, 1); a.AddRange(new[] { 2, 3 }); AssertValueEquals(a, 1, 2, 3); a.RemoveAt(0); AssertValueEquals(a, 2, 3); a.RemoveAt(0); AssertValueEquals(a, 3); a.RemoveAt(0); AssertValueEquals(a); a.AddRange(new[] { 1, 2, 3 }); AssertValueEquals(a, 1, 2, 3); a = new RubyArray(); a.AddMultiple(100, 1); a[0] = 0; a[99] = 99; a.RemoveRange(1, 98); AssertValueEquals(a, 0, 99); Assert(a.Capacity < 100, "array should shrink"); ((IList)a).Remove(0); AssertValueEquals(a, 99); a.Clear(); Assert(a.Count == 0); a = new RubyArray(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }); a.RemoveRange(0, 4); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11); a.AddMultiple(3, 1); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11, 1, 1, 1); a.RemoveRange(0, 6); AssertValueEquals(a, 10, 11, 1, 1, 1); a.AddMultiple(2, 2); AssertValueEquals(a, 10, 11, 1, 1, 1, 2, 2); a = new RubyArray(); a = new RubyArray(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }); a.RemoveRange(0, 4); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11); a.AddMultiple(3, null); AssertValueEquals(a, 4, 5, 6, 7, 8, 9, 10, 11, null, null, null); var vector = new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; a = new RubyArray(vector); for (int i = 0, c = a.Count; i < c; i++) { a.RemoveAt(0); vector = ArrayUtils.ShiftLeft(vector, 1); AssertValueEquals(a, vector); } a = new RubyArray(new[] { 1, 2, 3 }); a.Freeze(); Assert(!a.Remove(0)); AssertExceptionThrown<RuntimeError>(() => a.Remove(1)); AssertExceptionThrown<RuntimeError>(() => a.Clear()); AssertExceptionThrown<RuntimeError>(() => a.RemoveAt(0)); AssertExceptionThrown<RuntimeError>(() => a.RemoveRange(0, 1)); }
public static RubyArray ReinitializeByRepeatedValue(RubyContext/*!*/ context, RubyArray/*!*/ self, [DefaultProtocol]int size, object value) { CheckArraySize(size); self.Clear(); self.AddMultiple(size, value); return self; }