Example #1
0
        public void TestDeserialization()
        {
            var db = new StopsDb();

            db.Add(1.1f, 1.2f, 124);
            db.Add(2.1f, 2.2f, 128);
            db.Add(3.1f, 3.2f, 132);
            db.Add(4.1f, 4.2f, 136);
            db.Add(5.1f, 5.2f, 140);
            db.Add(6.1f, 6.2f, 144);

            using (var stream = new MemoryStream())
            {
                db.Serialize(stream);

                stream.Seek(0, SeekOrigin.Begin);
                var db1 = StopsDb.Deserialize(stream);

                Assert.AreEqual(db.Count, db1.Count);
                Assert.AreEqual(db.SizeInBytes, db1.SizeInBytes);

                var enumerator  = db.GetEnumerator();
                var enumerator1 = db1.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    Assert.IsTrue(enumerator1.MoveNext());

                    Assert.AreEqual(enumerator.Id, enumerator1.Id);
                    Assert.AreEqual(enumerator.Latitude, enumerator1.Latitude);
                    Assert.AreEqual(enumerator.Longitude, enumerator1.Longitude);
                    Assert.AreEqual(enumerator.MetaId, enumerator1.MetaId);
                }
            }
        }
Example #2
0
        public void SortHilbertTestSteps4()
        {
            var n = 4;

            // build locations.
            var locations = new List <Coordinate>();

            locations.Add(new Coordinate(-90, -180));
            locations.Add(new Coordinate(-90, -60));
            locations.Add(new Coordinate(-90, 60));
            locations.Add(new Coordinate(-90, 180));
            locations.Add(new Coordinate(-30, -180));
            locations.Add(new Coordinate(-30, -60));
            locations.Add(new Coordinate(-30, 60));
            locations.Add(new Coordinate(-30, 180));
            locations.Add(new Coordinate(30, -180));
            locations.Add(new Coordinate(30, -60));
            locations.Add(new Coordinate(30, 60));
            locations.Add(new Coordinate(30, 180));
            locations.Add(new Coordinate(90, -180));
            locations.Add(new Coordinate(90, -60));
            locations.Add(new Coordinate(90, 60));
            locations.Add(new Coordinate(90, 180));

            // build db.
            var stops = new StopsDb();

            for (var stop = 0; stop < locations.Count; stop++)
            {
                stops.Add((float)locations[stop].Latitude, (float)locations[stop].Longitude, (uint)stop);
            }

            // build a sorted version in-place.
            stops.Sort(null);

            // test if sorted.
            var stopsDbEnumerator = stops.GetEnumerator();

            for (uint stop = 1; stop < stops.Count - 1; stop++)
            {
                Assert.IsTrue(
                    stopsDbEnumerator.Distance(n, stop) <=
                    stopsDbEnumerator.Distance(n, stop + 1));
            }

            // sort locations.
            locations.Sort((x, y) =>
            {
                return(HilbertCurve.HilbertDistance((float)x.Latitude, (float)x.Longitude, n).CompareTo(
                           HilbertCurve.HilbertDistance((float)y.Latitude, (float)y.Longitude, n)));
            });

            // confirm sort.
            for (uint stop = 0; stop < stops.Count; stop++)
            {
                stopsDbEnumerator.MoveTo(stop);
                Assert.AreEqual(stopsDbEnumerator.Latitude, locations[(int)stop].Latitude);
                Assert.AreEqual(stopsDbEnumerator.Longitude, locations[(int)stop].Longitude);
            }
        }
Example #3
0
        public void TestAdd()
        {
            var db = new StopsDb(3);

            Assert.AreEqual(0, db.Add(1.1f, 1.2f, 124));

            var enumerator = db.GetEnumerator();

            enumerator.MoveTo(0);

            Assert.AreEqual(1.1f, enumerator.Latitude);
            Assert.AreEqual(1.2f, enumerator.Longitude);
            Assert.AreEqual(124, enumerator.MetaId);

            Assert.AreEqual(1, db.Add(2.1f, 2.2f, 128));
            Assert.AreEqual(2, db.Add(3.1f, 3.2f, 132));
            Assert.AreEqual(3, db.Add(4.1f, 4.2f, 136));
            Assert.AreEqual(4, db.Add(5.1f, 5.2f, 140));
            Assert.AreEqual(5, db.Add(6.1f, 6.2f, 144));

            Assert.AreEqual(6, db.Count);

            enumerator = db.GetEnumerator();

            enumerator.MoveTo(0);
            Assert.AreEqual(1.1f, enumerator.Latitude);
            Assert.AreEqual(1.2f, enumerator.Longitude);
            Assert.AreEqual(124, enumerator.MetaId);

            enumerator.MoveTo(1);
            Assert.AreEqual(2.1f, enumerator.Latitude);
            Assert.AreEqual(2.2f, enumerator.Longitude);
            Assert.AreEqual(128, enumerator.MetaId);

            enumerator.MoveTo(2);
            Assert.AreEqual(3.1f, enumerator.Latitude);
            Assert.AreEqual(3.2f, enumerator.Longitude);
            Assert.AreEqual(132, enumerator.MetaId);

            enumerator.MoveTo(3);
            Assert.AreEqual(4.1f, enumerator.Latitude);
            Assert.AreEqual(4.2f, enumerator.Longitude);
            Assert.AreEqual(136, enumerator.MetaId);

            enumerator.MoveTo(4);
            Assert.AreEqual(5.1f, enumerator.Latitude);
            Assert.AreEqual(5.2f, enumerator.Longitude);
            Assert.AreEqual(140, enumerator.MetaId);

            enumerator.MoveTo(5);
            Assert.AreEqual(6.1f, enumerator.Latitude);
            Assert.AreEqual(6.2f, enumerator.Longitude);
            Assert.AreEqual(144, enumerator.MetaId);
        }
Example #4
0
        public void SearchClosestStopTest()
        {
            var stops = new StopsDb();

            stops.Add(1, 1, 10);
            stops.Add(2, 2, 20);

            stops.Sort(null);

            var stopsDbEnumerator = stops.GetEnumerator();

            Assert.AreEqual(0, stopsDbEnumerator.SearchClosest(1, 1, 1));
            Assert.AreEqual(1, stopsDbEnumerator.SearchClosest(2, 2, 1));
            Assert.AreEqual(Constants.NoStopId, stopsDbEnumerator.SearchClosest(3, 3, .5f));
        }
Example #5
0
        public void TestSerialization()
        {
            var db = new StopsDb();

            db.Add(1.1f, 1.2f, 124);
            db.Add(2.1f, 2.2f, 128);
            db.Add(3.1f, 3.2f, 132);
            db.Add(4.1f, 4.2f, 136);
            db.Add(5.1f, 5.2f, 140);
            db.Add(6.1f, 6.2f, 144);

            var size = 1 + 8 + (6 * 3 * 4);

            using (var stream = new MemoryStream())
            {
                Assert.AreEqual(size, db.SizeInBytes);
                Assert.AreEqual(size, db.Serialize(stream));
            }
        }
Example #6
0
        public void TestSorting()
        {
            // build locations.
            var locations = new List <Coordinate>();

            locations.Add(new Coordinate(-90, -180));
            locations.Add(new Coordinate(-90, -60));
            locations.Add(new Coordinate(-90, 60));
            locations.Add(new Coordinate(-90, 180));
            locations.Add(new Coordinate(-30, -180));
            locations.Add(new Coordinate(-30, -60));
            locations.Add(new Coordinate(-30, 60));
            locations.Add(new Coordinate(-30, 180));
            locations.Add(new Coordinate(30, -180));
            locations.Add(new Coordinate(30, -60));
            locations.Add(new Coordinate(30, 60));
            locations.Add(new Coordinate(30, 180));
            locations.Add(new Coordinate(90, -180));
            locations.Add(new Coordinate(90, -60));
            locations.Add(new Coordinate(90, 60));
            locations.Add(new Coordinate(90, 180));

            // build db.
            var db = new StopsDb(locations.Count);

            for (var stop = 0; stop < locations.Count; stop++)
            {
                db.Add((float)locations[stop].Latitude,
                       (float)locations[stop].Longitude, (uint)(stop * 2));
            }

            // build a sorted version in-place.
            db.Sort(null);

            // test if sorted.
            var enumerator = db.GetEnumerator();

            for (var stop = 1; stop < locations.Count; stop++)
            {
                enumerator.MoveTo((uint)stop - 1);
                var latitude1  = enumerator.Latitude;
                var longitude1 = enumerator.Longitude;
                enumerator.MoveTo((uint)stop);
                var latitude2  = enumerator.Latitude;
                var longitude2 = enumerator.Longitude;

                Assert.IsTrue(
                    HilbertCurve.HilbertDistance(latitude1, longitude1, HilbertExtensions.DefaultHilbertSteps) <=
                    HilbertCurve.HilbertDistance(latitude2, longitude2, HilbertExtensions.DefaultHilbertSteps));
            }

            // sort locations.
            locations.Sort((x, y) =>
            {
                return(HilbertCurve.HilbertDistance(x.Latitude, x.Longitude, HilbertExtensions.DefaultHilbertSteps).CompareTo(
                           HilbertCurve.HilbertDistance(y.Latitude, y.Longitude, HilbertExtensions.DefaultHilbertSteps)));
            });

            // confirm sort.
            enumerator = db.GetEnumerator();
            for (var stop = 0; stop < locations.Count; stop++)
            {
                enumerator.MoveTo((uint)stop);
                Assert.AreEqual(enumerator.Latitude, locations[(int)stop].Latitude);
                Assert.AreEqual(enumerator.Longitude, locations[(int)stop].Longitude);
            }
        }
Example #7
0
        public void TestEnumerator()
        {
            var db = new StopsDb();

            db.Add(1.1f, 1.2f, 124);
            db.Add(2.1f, 2.2f, 128);
            db.Add(3.1f, 3.2f, 132);
            db.Add(4.1f, 4.2f, 136);
            db.Add(5.1f, 5.2f, 140);
            db.Add(6.1f, 6.2f, 144);

            var enumerator = db.GetEnumerator();

            enumerator.MoveNext();
            Assert.AreEqual(1.1f, enumerator.Latitude);
            Assert.AreEqual(1.2f, enumerator.Longitude);
            Assert.AreEqual(124, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(2.1f, enumerator.Latitude);
            Assert.AreEqual(2.2f, enumerator.Longitude);
            Assert.AreEqual(128, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(3.1f, enumerator.Latitude);
            Assert.AreEqual(3.2f, enumerator.Longitude);
            Assert.AreEqual(132, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(4.1f, enumerator.Latitude);
            Assert.AreEqual(4.2f, enumerator.Longitude);
            Assert.AreEqual(136, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(5.1f, enumerator.Latitude);
            Assert.AreEqual(5.2f, enumerator.Longitude);
            Assert.AreEqual(140, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(6.1f, enumerator.Latitude);
            Assert.AreEqual(6.2f, enumerator.Longitude);
            Assert.AreEqual(144, enumerator.MetaId);

            Assert.IsFalse(enumerator.MoveNext());

            enumerator.Reset();

            enumerator.MoveNext();
            Assert.AreEqual(1.1f, enumerator.Latitude);
            Assert.AreEqual(1.2f, enumerator.Longitude);
            Assert.AreEqual(124, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(2.1f, enumerator.Latitude);
            Assert.AreEqual(2.2f, enumerator.Longitude);
            Assert.AreEqual(128, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(3.1f, enumerator.Latitude);
            Assert.AreEqual(3.2f, enumerator.Longitude);
            Assert.AreEqual(132, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(4.1f, enumerator.Latitude);
            Assert.AreEqual(4.2f, enumerator.Longitude);
            Assert.AreEqual(136, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(5.1f, enumerator.Latitude);
            Assert.AreEqual(5.2f, enumerator.Longitude);
            Assert.AreEqual(140, enumerator.MetaId);

            enumerator.MoveNext();
            Assert.AreEqual(6.1f, enumerator.Latitude);
            Assert.AreEqual(6.2f, enumerator.Longitude);
            Assert.AreEqual(144, enumerator.MetaId);

            Assert.IsFalse(enumerator.MoveNext());
        }