public void Can_go_next() { IWorkItem item1 = new WorkItemMock(1); IWorkItem item2 = new WorkItemMock(2); IWorkItem item3 = new WorkItemMock(3); IWorkItem item4 = new WorkItemMock(4); var repository = new ItemRepositoryMock(new List <IWorkItem> { item1, item2, item3, item4 }); IWorkList wl = new MemoryQueryWorkList(repository, "work list"); wl.GoNext(); Assert.AreEqual(item1, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item3, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item4, wl.Current); Assert.True(wl.Current?.Visited); // end of work list, current item is the same as before wl.GoNext(); Assert.AreEqual(item4, wl.Current); Assert.True(wl.Current?.Visited); }
public void Cannot_go_first_again_if_first_item_is_set_done() { IWorkItem item1 = new WorkItemMock(1); IWorkItem item2 = new WorkItemMock(2); IWorkItem item3 = new WorkItemMock(3); IWorkItem item4 = new WorkItemMock(4); var repository = new ItemRepositoryMock(new List <IWorkItem> { item1, item2, item3, item4 }); IWorkList wl = new MemoryQueryWorkList(repository, "work list"); wl.GoFirst(); Assert.AreEqual(item1, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); wl.GoFirst(); Assert.AreEqual(item1, wl.Current); Assert.True(wl.Current?.Visited); // set status done and update work list wl.Current.Status = WorkItemStatus.Done; wl.SetStatus(wl.Current, WorkItemStatus.Done); // second item is now the first in work list // because first item is set to done and therefor 'not visible' wl.GoFirst(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); }
public void Measure_performance_query_items_inMemory() { Polygon polygon = PolygonConstruction .StartPolygon(0, 0) .LineTo(0, 20) .LineTo(20, 20) .LineTo(20, 0) .ClosePolygon(); Polygon areaOfInterest = PolygonConstruction .StartPolygon(0, 0) .LineTo(0, 100) .LineTo(100, 100) .LineTo(100, 0) .ClosePolygon(); var rowCount = 10000; TestUtils.InsertRows(_emptyIssuesGdb, _featureClassName, polygon, rowCount); try { var uri = new Uri(_emptyIssuesGdb, UriKind.Absolute); var geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(uri)); var table = geodatabase.OpenDataset <Table>(_featureClassName); Dictionary <Geodatabase, List <Table> > tablesByGeodatabase = new Dictionary <Geodatabase, List <Table> > { { geodatabase, new List <Table> { table } } }; IRepository stateRepository = new XmlWorkItemStateRepository(@"C:\temp\states.xml", null, null); IWorkItemRepository repository = new IssueItemRepository(tablesByGeodatabase, stateRepository); IWorkList workList = new MemoryQueryWorkList(repository, "work list"); workList.AreaOfInterest = areaOfInterest; var filter = GdbQueryUtils.CreateSpatialFilter(areaOfInterest); var watch = new Stopwatch(); watch.Start(); IEnumerable <IWorkItem> items = workList.GetItems(filter); watch.Stop(); Console.WriteLine($"{watch.ElapsedMilliseconds} ms"); Assert.AreEqual(rowCount, items.Count()); } finally { TestUtils.DeleteAllRows(_emptyIssuesGdb, _featureClassName); } }
public void Can_go_nearest() { MapPoint pt7 = PolygonConstruction.CreateMapPoint(7, 0, 0); MapPoint pt10 = PolygonConstruction.CreateMapPoint(10, 0, 0); MapPoint pt15 = PolygonConstruction.CreateMapPoint(15, 0, 0); var item7 = new WorkItemMock(7, pt7); var item10 = new WorkItemMock(10, pt10); var item15 = new WorkItemMock(15, pt15); var repository = new ItemRepositoryMock(new[] { item7, item10, item15 }); IWorkList wl = new MemoryQueryWorkList(repository, nameof(Can_go_nearest)); Geometry reference = PolygonConstruction.CreateMapPoint(11, 0, 0); // go to item10 Assert.True(wl.CanGoNearest()); wl.GoNearest(reference); Assert.AreEqual(item10, wl.Current); Assert.True(wl.Current?.Visited); // go to item7 Assert.True(wl.CanGoNearest()); Assert.NotNull(wl.Current); wl.GoNearest(wl.Current.Extent); Assert.AreEqual(item7, wl.Current); Assert.True(wl.Current?.Visited); // go to item15 Assert.True(wl.CanGoNearest()); Assert.NotNull(wl.Current); wl.GoNearest(wl.Current.Extent); Assert.AreEqual(item15, wl.Current); Assert.True(wl.Current?.Visited); // Now all are visited, what is the next item? None because there is no // more item *after* the last item15. // Now we need to go to item *before* the last one. Assert.False(wl.CanGoNearest()); Assert.True(wl.CanGoPrevious()); wl.GoPrevious(); Assert.AreEqual(item10, wl.Current); // Now we can go nearest again which is item7 (nearst to item10) Assert.True(wl.CanGoNearest()); Assert.NotNull(wl.Current); wl.GoNearest(wl.Current.Extent); Assert.AreEqual(item7, wl.Current); Assert.True(wl.Current?.Visited); }
public void Respect_AreaOfInterest_LearningTest() { Polygon polygon = PolygonConstruction .StartPolygon(0, 0) .LineTo(0, 20) .LineTo(20, 20) .LineTo(20, 0) .ClosePolygon(); Polygon areaOfInterest = PolygonConstruction .StartPolygon(100, 100) .LineTo(100, 120) .LineTo(120, 120) .LineTo(120, 100) .ClosePolygon(); var rowCount = 4; TestUtils.InsertRows(_emptyIssuesGdb, _featureClassName, polygon, rowCount); try { var uri = new Uri(_emptyIssuesGdb, UriKind.Absolute); var geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(uri)); var table = geodatabase.OpenDataset <Table>(_featureClassName); Dictionary <Geodatabase, List <Table> > tablesByGeodatabase = new Dictionary <Geodatabase, List <Table> > { { geodatabase, new List <Table> { table } } }; IRepository stateRepository = new XmlWorkItemStateRepository(@"C:\temp\states.xml", null, null); IWorkItemRepository repository = new IssueItemRepository(tablesByGeodatabase, stateRepository); IWorkList workList = new MemoryQueryWorkList(repository, "work list"); workList.AreaOfInterest = areaOfInterest; IEnumerable <IWorkItem> items = workList.GetItems(); Assert.AreEqual(0, items.Count()); } finally { TestUtils.DeleteAllRows(_emptyIssuesGdb, _featureClassName); } }
public void Can_go_previous() { IWorkItem item1 = new WorkItemMock(1); IWorkItem item2 = new WorkItemMock(2); IWorkItem item3 = new WorkItemMock(3); IWorkItem item4 = new WorkItemMock(4); var repository = new ItemRepositoryMock(new List <IWorkItem> { item1, item2, item3, item4 }); IWorkList wl = new MemoryQueryWorkList(repository, "work list"); wl.GoNext(); Assert.AreEqual(item1, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item3, wl.Current); Assert.True(wl.Current?.Visited); // go previous wl.GoPrevious(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); // go previous again wl.GoPrevious(); Assert.AreEqual(item1, wl.Current); Assert.True(wl.Current?.Visited); wl.GoNext(); Assert.AreEqual(item2, wl.Current); Assert.True(wl.Current?.Visited); }