Skip to content

Commit

Permalink
Merge branch 'master' of ssh://github.com/OneBusAway/onebusaway-appli…
Browse files Browse the repository at this point in the history
…cation-modules
  • Loading branch information
bdferris committed Apr 27, 2012
2 parents a83b395 + 79f3fa8 commit de487cb
Show file tree
Hide file tree
Showing 2 changed files with 253 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,48 @@ public List<StopTimeEntryImpl> processStopTimes(TransitGraphImpl graph,
stopTime.setTrip(tripEntry);

ensureStopTimesHaveShapeDistanceTraveledSet(stopTimeEntries, shapePoints);

removeDuplicateStopTimes(stopTimes);
ensureStopTimesHaveTimesSet(stopTimes, stopTimeEntries);

return stopTimeEntries;
}

private void removeDuplicateStopTimes(List<StopTime> stopTimes) {
Collections.sort(stopTimes, new StopTimeComparator());

boolean stopTimeWasModified = false;
StopTime lastUnmodifiedStopTime = null;

for(StopTime stopTime : stopTimes) {
stopTimeWasModified = false;

if(lastUnmodifiedStopTime == null) {
lastUnmodifiedStopTime = stopTime;
continue;
}

if(lastUnmodifiedStopTime.isArrivalTimeSet() && stopTime.isArrivalTimeSet()) {
if(stopTime.getArrivalTime() == lastUnmodifiedStopTime.getArrivalTime()) {
stopTime.clearArrivalTime();
stopTimeWasModified = true;
}
}

if(lastUnmodifiedStopTime.isDepartureTimeSet() && stopTime.isDepartureTimeSet()) {
if(stopTime.getDepartureTime() == lastUnmodifiedStopTime.getDepartureTime()) {
stopTime.clearDepartureTime();
stopTimeWasModified = true;
}
}

// always compare to the last stop time we didn't change
if(!stopTimeWasModified) {
lastUnmodifiedStopTime = stopTime;
}
}
}

private List<StopTimeEntryImpl> createInitialStopTimeEntries(
TransitGraphImpl graph, List<StopTime> stopTimes) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,222 @@

public class StopTimeEntriesFactoryTest {

@Test
public void testDuplicateRemoval() {

TransitGraphImpl graph = new TransitGraphImpl();

Stop stopA = new Stop();
stopA.setId(aid("stopA"));
graph.putStopEntry(stop("stopA", 47.672207391799056, -122.387855896286));

Stop stopB = new Stop();
stopB.setId(aid("stopB"));
graph.putStopEntry(stop("stopB", 47.66852277218285, -122.3853882639923));

Stop stopC = new Stop();
stopC.setId(aid("stopC"));
graph.putStopEntry(stop("stopC", 47.66847942216854, -122.37545336180114));

graph.refreshStopMapping();

Agency agency = new Agency();
agency.setId("1");
agency.setTimezone("America/Los_Angeles");

Route route = new Route();
route.setAgency(agency);

Trip trip = new Trip();
trip.setRoute(route);
trip.setServiceId(aid("serviceId"));

TripEntryImpl tripEntry = trip("trip");

StopTime stA = new StopTime();
stA.setId(100);
stA.setArrivalTime(time(9, 00));
stA.setDepartureTime(time(9, 05));
stA.setStopSequence(100);
stA.setStop(stopA);
stA.setTrip(trip);

StopTime stB = new StopTime();
stB.setId(101);
stB.setArrivalTime(time(9, 00));
stB.setDepartureTime(time(9, 05));
stB.setStopSequence(101);
stB.setStop(stopB);
stB.setTrip(trip);

StopTime stC = new StopTime();
stC.setId(102);
stC.setArrivalTime(time(10, 00));
stC.setDepartureTime(time(10, 05));
stC.setStopSequence(102);
stC.setStop(stopC);
stC.setTrip(trip);

StopTimeEntriesFactory factory = new StopTimeEntriesFactory();
factory.setDistanceAlongShapeLibrary(new DistanceAlongShapeLibrary());

List<StopTime> stopTimes = Arrays.asList(stA, stB, stC);

ShapePointsFactory shapePointsFactory = new ShapePointsFactory();
shapePointsFactory.addPoint(47.673840100841396, -122.38756621771239);
shapePointsFactory.addPoint(47.668667271970484, -122.38756621771239);
shapePointsFactory.addPoint(47.66868172192725, -122.3661729186096);
ShapePoints shapePoints = shapePointsFactory.create();

List<StopTimeEntryImpl> entries = factory.processStopTimes(graph,
stopTimes, tripEntry, shapePoints);

assertEquals(stopTimes.size(), entries.size());

StopTimeEntryImpl entry = entries.get(0);
assertEquals(0, entry.getAccumulatedSlackTime());
assertEquals(time(9, 00), entry.getArrivalTime());
assertEquals(time(9, 05), entry.getDepartureTime());
assertEquals(0, entry.getSequence());
assertEquals(181.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());

entry = entries.get(1);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(9, 28, 31), entry.getArrivalTime());
assertEquals(time(9, 28, 31), entry.getDepartureTime());
assertEquals(1, entry.getSequence());
assertEquals(738.7, entry.getShapeDistTraveled(), 0.1);
assertEquals(0, entry.getSlackTime());

entry = entries.get(2);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(10, 00), entry.getArrivalTime());
assertEquals(time(10, 05), entry.getDepartureTime());
assertEquals(2, entry.getSequence());
assertEquals(1484.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());
}

@Test
public void testThreeInARowDuplicateRemoval() {

TransitGraphImpl graph = new TransitGraphImpl();

Stop stopA = new Stop();
stopA.setId(aid("stopA"));
graph.putStopEntry(stop("stopA", 47.672207391799056, -122.387855896286));

Stop stopB = new Stop();
stopB.setId(aid("stopB"));
graph.putStopEntry(stop("stopB", 47.66852277218285, -122.3853882639923));

Stop stopC = new Stop();
stopC.setId(aid("stopC"));
graph.putStopEntry(stop("stopC", 47.66847942216854, -122.37545336180114));

Stop stopD = new Stop();
stopD.setId(aid("stopD"));
graph.putStopEntry(stop("stopD", 47.66947942216854, -122.37545336180114));

graph.refreshStopMapping();

Agency agency = new Agency();
agency.setId("1");
agency.setTimezone("America/Los_Angeles");

Route route = new Route();
route.setAgency(agency);

Trip trip = new Trip();
trip.setRoute(route);
trip.setServiceId(aid("serviceId"));

TripEntryImpl tripEntry = trip("trip");

StopTime stA = new StopTime();
stA.setId(100);
stA.setArrivalTime(time(9, 00));
stA.setDepartureTime(time(9, 05));
stA.setStopSequence(100);
stA.setStop(stopA);
stA.setTrip(trip);

StopTime stB = new StopTime();
stB.setId(101);
stB.setArrivalTime(time(9, 00));
stB.setDepartureTime(time(9, 05));
stB.setStopSequence(101);
stB.setStop(stopB);
stB.setTrip(trip);

StopTime stC = new StopTime();
stC.setId(102);
stC.setArrivalTime(time(9, 00));
stC.setDepartureTime(time(9, 05));
stC.setStopSequence(102);
stC.setStop(stopC);
stC.setTrip(trip);

StopTime stD = new StopTime();
stD.setId(103);
stD.setArrivalTime(time(11, 00));
stD.setDepartureTime(time(11, 05));
stD.setStopSequence(103);
stD.setStop(stopD);
stD.setTrip(trip);

StopTimeEntriesFactory factory = new StopTimeEntriesFactory();
factory.setDistanceAlongShapeLibrary(new DistanceAlongShapeLibrary());

List<StopTime> stopTimes = Arrays.asList(stA, stB, stC, stD);

ShapePointsFactory shapePointsFactory = new ShapePointsFactory();
shapePointsFactory.addPoint(47.673840100841396, -122.38756621771239);
shapePointsFactory.addPoint(47.668667271970484, -122.38756621771239);
shapePointsFactory.addPoint(47.66868172192725, -122.3661729186096);
shapePointsFactory.addPoint(47.66947942216854, -122.37545336180114);
ShapePoints shapePoints = shapePointsFactory.create();

List<StopTimeEntryImpl> entries = factory.processStopTimes(graph,
stopTimes, tripEntry, shapePoints);

assertEquals(stopTimes.size(), entries.size());

StopTimeEntryImpl entry = entries.get(0);
assertEquals(0, entry.getAccumulatedSlackTime());
assertEquals(time(9, 00), entry.getArrivalTime());
assertEquals(time(9, 05), entry.getDepartureTime());
assertEquals(0, entry.getSequence());
assertEquals(181.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(5 * 60, entry.getSlackTime());

entry = entries.get(1);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(9, 28, 45), entry.getArrivalTime());
assertEquals(time(9, 28, 45), entry.getDepartureTime());
assertEquals(1, entry.getSequence());
assertEquals(738.7, entry.getShapeDistTraveled(), 0.1);
assertEquals(0, entry.getSlackTime());

entry = entries.get(2);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(10, 00, 34), entry.getArrivalTime());
assertEquals(time(10, 00, 34), entry.getDepartureTime());
assertEquals(2, entry.getSequence());
assertEquals(1484.5, entry.getShapeDistTraveled(), 0.1);
assertEquals(0, entry.getSlackTime());

entry = entries.get(3);
assertEquals(5 * 60, entry.getAccumulatedSlackTime());
assertEquals(time(11, 00), entry.getArrivalTime());
assertEquals(time(11, 05), entry.getDepartureTime());
assertEquals(3, entry.getSequence());
assertEquals(2877.69, entry.getShapeDistTraveled(), 0.1);
assertEquals(60 * 5, entry.getSlackTime());

}

@Test
public void test() {

Expand Down

0 comments on commit de487cb

Please sign in to comment.