/// <summary> ///A test for At ///</summary> public void AtTestHelper <T>() { var target = new Narray <T>(10, 20, 5, 2); int i0 = 2; int i1 = 1; int i2 = 3; int i3 = 1; T expected = default(T); T value = (T)Convert.ChangeType(109, typeof(T)); Assert.AreEqual(expected, target.At(i0, i1, i2, i3)); target.Put(i0, i1, i2, i3, value); Assert.AreEqual(value, target.At(i0, i1, i2, i3)); }
/// <summary> ///A test for Narray`1 Constructor for 1d array. ///</summary> public void NarrayConstructorTest1Helper <T>() { const int d0 = 121; var value = (T)Convert.ChangeType(99, typeof(T)); var target = new Narray <T>(d0); Assert.AreEqual(1, target.Rank(), "Rank must be 1"); Assert.AreEqual(d0, target.Length(), "Length must be " + d0); Assert.AreEqual(d0, target.Length1d(), "Length1d must be " + d0); Assert.AreEqual(d0, target.Dim(0)); Assert.AreEqual(0, target.Dim(1)); Assert.AreEqual(0, target.Dim(2)); Assert.AreEqual(0, target.Dim(3)); Assert.AreEqual(default(T), target.At(0)); target.Put(10, value); Assert.AreEqual(value, target.At(10)); }
/// <summary> ///A test for Copy ///</summary> public void CopyTestHelper <T1, T2>() { var target = new Narray <T1>(10); var src = new Narray <T2>(10); T1 valueT = (T1)Convert.ChangeType(99, typeof(T1)); T2 valueS = (T2)Convert.ChangeType(99, typeof(T2)); src.Put(0, valueS); // put at position 0 src.Put(9, valueS); // put at position 9 target.Copy(src); Assert.AreEqual(10, target.Length()); // 10 Assert.AreEqual(10, src.Length()); // 10 Assert.AreEqual(valueS, src.At(0)); // first value Assert.AreEqual(valueS, src.At(9)); // last value Assert.AreEqual(valueT, target.At(0)); // first value Assert.AreEqual(valueT, target.At(9)); // last value }
/// <summary> ///A test for Append ///</summary> public void AppendTest1Helper <T>() { var target = new Narray <T>(10); var src = new Narray <T>(20); var valueT1 = (T)Convert.ChangeType(99, typeof(T)); var valueT2 = (T)Convert.ChangeType(99, typeof(T)); src.Put(0, valueT2); // put at position 0 src.Put(src.Length() - 1, valueT2); // put at last position target.Append(src); Assert.AreEqual(30, target.Length()); // 10 + 20 Assert.AreEqual(20, src.Length()); // 20 Assert.AreEqual(valueT2, src.At(0)); // first value Assert.AreEqual(valueT2, src.At(src.Length() - 1)); // last value Assert.AreEqual(valueT1, target.At(10)); // next after 9 Assert.AreEqual(valueT1, target.At(target.Length() - 1)); // last value }
/// <summary> ///A test for Append ///</summary> public void AppendTestHelper <T1, T2>() { var target = new Narray <T1>(10); var src = new Narray <T2>(10); var valueT = (T1)Convert.ChangeType(99, typeof(T1)); var valueS = (T2)Convert.ChangeType(99, typeof(T2)); src.Put(0, valueS); // put at position 0 src.Put(9, valueS); // put at position 9 target.Append(src); Assert.AreEqual(20, target.Length()); // 10 + 10 Assert.AreEqual(10, src.Length()); // 10 Assert.AreEqual(valueS, src.At(0)); // first value Assert.AreEqual(valueS, src.At(9)); // last value Assert.AreEqual(valueT, target.At(10)); // next after 9 Assert.AreEqual(valueT, target.At(target.Length() - 1)); // last value }
/// <summary> ///A test for Put ///</summary> public void PutTestHelper <T>() { // 1d Narray <T> target = new Narray <T>(10); int i0 = 2; int i1 = 4; T value = (T)Convert.ChangeType(99, typeof(T)); Assert.AreEqual(default(T), target.At(i0)); target.Put(i0, value); Assert.AreEqual(value, target.At(i0)); // 2d target = new Narray <T>(10, 11); Assert.AreEqual(default(T), target.At(i0, i1)); target.Put(i0, i1, value); Assert.AreEqual(value, target.At(i0, i1)); }
/// <summary> /// SGI compiler bug: can't make this a template function with /// an unused last argument for the template parameter /// </summary> public static void Go(Metric m, ref Floatarray distance, ref Narray<Point> source, float maxdist) { const float BIG = 1e38f; int w = distance.Dim(0); int h = distance.Dim(1); distance.Resize(w,h); source.Resize(w,h); Queue<Point> queue = new Queue<Point>(w*h); int i, j; for(i = 0; i < w; i++) for(j = 0; j < h; j++) { if(distance.At(i, j) > 0) { queue.Enqueue(new Point(i, j)); distance[i, j] = 0; source[i, j] = new Point(i, j); } else { distance[i, j] = BIG; source[i, j] = new Point(-1, -1); } } while(queue.Count != 0) { Point q = queue.Dequeue(); float d = m.metric(new Point(q.X - 1, q.Y), source.At(q.X, q.Y)); if(d <= maxdist && q.X > 0 && d < distance.At(q.X - 1, q.Y)) { queue.Enqueue(new Point(q.X - 1, q.Y)); source[q.X - 1, q.Y] = source.At(q.X, q.Y); distance[q.X - 1, q.Y] = d; } d = m.metric(new Point(q.X, q.Y - 1), source.At(q.X, q.Y)); if(d <= maxdist && q.Y > 0 && d < distance.At(q.X, q.Y - 1)) { queue.Enqueue(new Point(q.X, q.Y - 1)); source[q.X, q.Y - 1] = source.At(q.X, q.Y); distance[q.X, q.Y - 1] = d; } d = m.metric(new Point(q.X + 1, q.Y), source.At(q.X, q.Y)); if(d <= maxdist && q.X < w - 1 && d < distance.At(q.X + 1, q.Y)) { queue.Enqueue(new Point(q.X + 1, q.Y)); source[q.X + 1, q.Y] = source.At(q.X, q.Y); distance[q.X + 1, q.Y] = d; } d = m.metric(new Point(q.X, q.Y + 1), source.At(q.X, q.Y)); if(d <= maxdist && q.Y < h - 1 && d < distance.At(q.X, q.Y + 1)) { queue.Enqueue(new Point(q.X, q.Y + 1)); source[q.X, q.Y + 1] = source.At(q.X, q.Y); distance[q.X, q.Y + 1] = d; } } }
/// <summary> /// SGI compiler bug: can't make this a template function with /// an unused last argument for the template parameter /// </summary> public static void Go(Metric m, ref Floatarray distance, ref Narray <Point> source, float maxdist) { const float BIG = 1e38f; int w = distance.Dim(0); int h = distance.Dim(1); distance.Resize(w, h); source.Resize(w, h); Queue <Point> queue = new Queue <Point>(w * h); int i, j; for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { if (distance.At(i, j) > 0) { queue.Enqueue(new Point(i, j)); distance[i, j] = 0; source[i, j] = new Point(i, j); } else { distance[i, j] = BIG; source[i, j] = new Point(-1, -1); } } } while (queue.Count != 0) { Point q = queue.Dequeue(); float d = m.metric(new Point(q.X - 1, q.Y), source.At(q.X, q.Y)); if (d <= maxdist && q.X > 0 && d < distance.At(q.X - 1, q.Y)) { queue.Enqueue(new Point(q.X - 1, q.Y)); source[q.X - 1, q.Y] = source.At(q.X, q.Y); distance[q.X - 1, q.Y] = d; } d = m.metric(new Point(q.X, q.Y - 1), source.At(q.X, q.Y)); if (d <= maxdist && q.Y > 0 && d < distance.At(q.X, q.Y - 1)) { queue.Enqueue(new Point(q.X, q.Y - 1)); source[q.X, q.Y - 1] = source.At(q.X, q.Y); distance[q.X, q.Y - 1] = d; } d = m.metric(new Point(q.X + 1, q.Y), source.At(q.X, q.Y)); if (d <= maxdist && q.X < w - 1 && d < distance.At(q.X + 1, q.Y)) { queue.Enqueue(new Point(q.X + 1, q.Y)); source[q.X + 1, q.Y] = source.At(q.X, q.Y); distance[q.X + 1, q.Y] = d; } d = m.metric(new Point(q.X, q.Y + 1), source.At(q.X, q.Y)); if (d <= maxdist && q.Y < h - 1 && d < distance.At(q.X, q.Y + 1)) { queue.Enqueue(new Point(q.X, q.Y + 1)); source[q.X, q.Y + 1] = source.At(q.X, q.Y); distance[q.X, q.Y + 1] = d; } } }