コード例 #1
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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));
        }
コード例 #2
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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));
        }
コード例 #3
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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
        }
コード例 #4
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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
        }
コード例 #5
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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
        }
コード例 #6
0
ファイル: NarrayTest.cs プロジェクト: Arainsd/OCRonet
        /// <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));
        }
コード例 #7
0
ファイル: BrushFire.cs プロジェクト: nickun/OCRonet
        /// <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;
                }
            }
        }
コード例 #8
0
ファイル: BrushFire.cs プロジェクト: liaoheping/OCRonet
        /// <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;
                }
            }
        }