local_gtfs_path <- system.file("extdata", "routing.zip", package = "tidytransit")
gtfs_routing <- read_gtfs(local_gtfs_path)
test_from_stop_ids <- c("stop1a", "stop1b")
stop_times = gtfs_routing$stop_times
stop_times_0710 = dplyr::filter(gtfs_routing$stop_times, departure_time >= 7*3600+10*60)
stop_times_0711 = dplyr::filter(gtfs_routing$stop_times, departure_time >= 7*3600+11*60)
stop_times_0715 = dplyr::filter(gtfs_routing$stop_times, departure_time >= 7*3600+15*60)
transfers = gtfs_routing$transfers
test_that("travel times wrapper function", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
tt = travel_times(
filtered_stop_times = fst,
stop_name = "One",
time_range = 3600)
expect_equal(nrow(tt), length(unique(gtfs_routing$stops$stop_name)))
expect_equal(tt %>% dplyr::filter(to_stop_name == "One") %>% dplyr::pull(travel_time), 0)
expect_equal(tt$travel_time[which(tt$to_stop_name == "One")], 0)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Two")], 4*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Three")], (18-12)*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Four")], (37-17)*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Five")], (15-10)*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Six")], (20-10)*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Seven")], (25-10)*60)
expect_equal(tt$travel_time[which(tt$to_stop_name == "Eight")], (24-12)*60)
tt2 = travel_times(filtered_stop_times = fst, stop_name = "One",
time_range = 3600, return_coords = TRUE)
expect_equal(
setdiff(colnames(tt2), colnames(tt)),
c("from_stop_lon", "from_stop_lat", "to_stop_lon", "to_stop_lat"))
})
test_that("stop_dist warning", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
expect_error(travel_times(filtered_stop_times = fst, stop_name = "One",
time_range = 3600, stop_dist_check = 30))
})
test_that("stop times are filtered correctly", {
expect_error(filter_stop_times(gtfs_routing, "2018-09-28", "07:00:00", "08:00:00"))
expect_error(filter_stop_times(gtfs_routing, "2018-10-01", "07:00:00", "06:00:00"))
expect_error(filter_stop_times(gtfs_routing, "2018-10-01", "08:00:00", "09:00:00"))
fst = filter_stop_times(gtfs_routing, "2018-10-01", "07:00:00", "08:00:00")
expect_true(all(c("transfers", "stops") %in% names(attributes(fst))))
expect_error(travel_times(gtfs_routing$stop_times, "One"))
})
test_that("travel_time works with different params", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
expect_warning(travel_times(fst, "One", max_departure_time = 7*3600+5*60), "max_departure_time is deprecated, use time_range")
expect_warning(travel_times(fst, "One", max_departure_time = "07:05:00"), "max_departure_time is deprecated, use time_range")
expect_warning(
expect_error(travel_times(fst, "One", time_range = 1800, max_departure_time = "07:45:00")),
"max_departure_time is deprecated, use time_range")
expect_error(travel_times(fst, "unknown stop"))
expect_warning(
expect_error(travel_times(fst, "One", max_departure_time = "06:45:00")),
"max_departure_time is deprecated, use time_range")
expect_warning(
expect_error(travel_times(fst, "One", max_departure_time = "07:50:00", arrival = TRUE), "cannot set max_departure_time and arrival=TRUE"))
})
test_that("transfers for travel_times", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
tt = travel_times(
filtered_stop_times = fst,
stop_name = "One",
time_range = 3600) %>%
arrange(to_stop_id)
expect_equal(tt$transfers,
c(0, 0, 0, 1, 0, 0, 1, 0))
})
test_that("travel_times return type", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
expect_s3_class(travel_times(fst, "One", return_DT = TRUE), "data.frame")
expect_s3_class(travel_times(fst, "One", return_DT = FALSE), "data.frame")
expect_s3_class(travel_times(fst, "One"), "tbl_df")
expect_s3_class(travel_times(fst, "One", return_DT = FALSE), "tbl_df")
expect_s3_class(travel_times(fst, "One", return_DT = TRUE), "data.table")
})
test_that("travel_times from stop with departures from transfer stops", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 9*3600)
g2 = gtfs_routing
g2$stops[nrow(g2$stops)+1,] <- list("stop0", "Zero", 46.9596, 7.39071, "", 0)
g2$transfers[nrow(g2$transfers)+1,] <- list("stop0", "stop1a", 2, 1)
fst2 = filter_stop_times(g2, "2018-10-01", 7*3600, 24*3600)
expect_equal(nrow(travel_times(fst2, "Zero")), 9)
})
test_that("travel_times with arrival=TRUE stop_name", {
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, hhmmss_to_seconds("08:00:00"))
tt_to = travel_times(fst, stop_name = "Four", arrival = TRUE)
tt_to <- tt_to[order(tt_to$from_stop_id),]
expect_equal(tt_to$journey_arrival_time, hms::hms(c(37,37,37,0,37,37,41,41)*60+7*3600))
})
test_that("catch invalid params", {
expect_error(travel_times(gtfs_routing, stop_name = "One"), "Travel times cannot be calculated with an unfiltered tidygtfs object. Use filter_feed_by_date().")
fst = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
expect_error(raptor(fst, attributes(fst)$transfers, stop_ids = "stop1a", max_transfers = -1), "max_transfers is less than 0")
expect_error(travel_times(fst, stop_name = "One", max_transfers = -1), "max_transfers is less than 0")
})
test_that("travel_times with filtered feed", {
x1 = filter_stop_times(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
g2 = filter_feed_by_date(gtfs_routing, "2018-10-01", 7*3600, 24*3600)
tt1 = travel_times(filtered_stop_times = x1,
stop_name = "One", time_range = 3600)
tt2 = travel_times(filtered_stop_times = g2,
stop_name = "One", time_range = 3600)
expect_equal(tt1, tt2)
})
test_that("time_range param", {
st = filter_feed_by_date(gtfs_routing, "2018-10-01")
tt1 = travel_times(st, stop_name = "One", time_range = c("07:09:00", "07:59:00"))
expect_equal((as.numeric(unique(tt1$journey_departure_time))-7*3600)/60,
c(9,10,12,17))
tt2 = travel_times(st, stop_name = "Three", time_range = c("07:20:00", "07:20:00"), arrival = TRUE)
expect_equal(as.numeric(tt2$journey_departure_time), 7*3600+20*60)
tt3 = travel_times(st, stop_name = "Three", time_range = c("07:20:00", "07:23:00"), arrival = TRUE)
expect_equal(tt3$journey_departure_time[2], hhmmss_to_hms("07:17:00"))
})
test_that("example pipe", {
pipe1 = gtfs_routing %>%
filter_feed_by_date("2018-10-01") %>%
travel_times("One", time_range = c("07:09:00", "07:19:00"))
pipe2 = gtfs_routing %>%
filter_stop_times("2018-10-01", "07:09:00") %>%
travel_times("One", time_range = 600)
expect_equal(pipe1, pipe2)
})
test_that("feed without transfers", {
g_no_transfers = gtfs_routing
g_no_transfers$transfers <- NULL
expect_warning(fst <- filter_stop_times(g_no_transfers, "2018-10-01", 7*3600, 24*3600),
"No transfers found in feed")
tts = travel_times(filtered_stop_times = fst,
stop_name = "Two", time_range = 3600)
expect_equal(tts$to_stop_name, c("Two", "Three", "Four"))
expect_equal(tts$to_stop_id, c("stop2", "stop3a", "stop4"))
})
test_that("nyc feed", {
skip_on_cran()
nyc_path <- system.file("extdata", "nyc_subway.zip", package = "tidytransit")
nyc <- read_gtfs(nyc_path)
.child_index = which(nyc$stops$location_type == 0)
.parent_index = which(nyc$stops$location_type == 1)
nyc$stops$stop_name[.child_index] <- paste0(nyc$stops$stop_name[.child_index], " (", nyc$stops$parent_station[.child_index], ")")
nyc$stops$stop_name[.parent_index] <- paste0(nyc$stops$stop_name[.parent_index], " (", nyc$stops$stop_id[.parent_index], ")")
length(unique(nyc$stops$stop_name))
x2 = cluster_stops(nyc$stops)
length(unique(x2$stop_name_cluster))
nyc_st <- filter_stop_times(nyc, "2018-06-26", 7*3600, 9*3600)
tts <- travel_times(nyc_st, "34 St - Herald Sq (D17)", return_coords = TRUE, stop_dist_check = FALSE)
expect_s3_class(tts, "data.frame")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.