public void TestFilterSort()
        {
            // execute
            var filter = new OsmStreamFilterSort();

            filter.RegisterSource(new OsmGeo[] {
                Node.Create(1, 0, 0),
                Node.Create(2, 1, 0),
                Node.Create(3, 0, 1),
                Way.Create(1, 1, 2, 3)
            });
            var list = new List <OsmGeo>(
                filter);

            // verify.
            Assert.IsNotNull(list);
            Assert.AreEqual(4, list.Count);
            Assert.AreEqual(1, list[0].Id);
            Assert.AreEqual(2, list[1].Id);
            Assert.AreEqual(3, list[2].Id);
            Assert.AreEqual(1, list[3].Id);

            // reset.
            filter.Reset();
            list = new List <OsmGeo>(
                filter);

            // verify.
            Assert.IsNotNull(list);
            Assert.AreEqual(4, list.Count);
            Assert.AreEqual(1, list[0].Id);
            Assert.AreEqual(2, list[1].Id);
            Assert.AreEqual(3, list[2].Id);
            Assert.AreEqual(1, list[3].Id);

            // execute
            filter = new OsmStreamFilterSort();
            filter.RegisterSource(new OsmGeo[] {
                Node.Create(1, 0, 0),
                Node.Create(2, 1, 0),
                Way.Create(1, 1, 2, 3),
                Node.Create(3, 0, 1)
            });
            list = new List <OsmGeo>(
                filter);

            // verify.
            Assert.IsNotNull(list);
            Assert.AreEqual(4, list.Count);
            Assert.AreEqual(1, list[0].Id);
            Assert.AreEqual(2, list[1].Id);
            Assert.AreEqual(3, list[2].Id);
            Assert.AreEqual(1, list[3].Id);

            // execute
            filter = new OsmStreamFilterSort();
            filter.RegisterSource(new OsmGeo[] {
                Node.Create(1, 0, 0),
                Node.Create(2, 1, 0),
                Way.Create(1, 1, 2, 3),
                Relation.Create(1,
                                new TagsCollection(
                                    Tag.Create("type", "multipolygon")),
                                RelationMember.Create(1, "outer", OsmGeoType.Way)),
                Node.Create(3, 0, 1)
            });
            list = new List <OsmGeo>(
                filter);

            // verify.
            Assert.IsNotNull(list);
            Assert.AreEqual(5, list.Count);
            Assert.AreEqual(1, list[0].Id);
            Assert.AreEqual(2, list[1].Id);
            Assert.AreEqual(3, list[2].Id);
            Assert.AreEqual(1, list[3].Id);
            Assert.AreEqual(1, list[4].Id);

            // reset.
            filter.Reset();
            list = new List <OsmGeo>(
                filter);

            // verify.
            Assert.IsNotNull(list);
            Assert.AreEqual(5, list.Count);
            Assert.AreEqual(1, list[0].Id);
            Assert.AreEqual(2, list[1].Id);
            Assert.AreEqual(3, list[2].Id);
            Assert.AreEqual(1, list[3].Id);
            Assert.AreEqual(1, list[4].Id);
        }