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); } } }
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); } }
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); }
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)); }
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)); } }
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); } }
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()); }