context("binary streams")
test_that("copy a binary image", {
is_windows <- identical("windows", tolower(Sys.info()[["sysname"]]))
olddir <- getwd()
on.exit(setwd(olddir))
setwd(tempdir())
buf <- serialize(rnorm(1e6), NULL)
writeBin(buf, "input.bin")
if(is_windows){
res1 <- exec_wait("cmd", c("/C", "type", "input.bin"), std_out = "out1.bin")
res2 <- exec_wait("cmd", c("/C", "type", "input.bin", ">&2"), std_err = "out2.bin")
pid1 <- exec_background("cmd", c("/C", "type", "input.bin"), std_out = "out3.bin")
pid2 <- exec_background("cmd", c("/C", "type", "input.bin", ">&2"), std_err = "out4.bin")
data1 <- exec_internal("cmd", c("/C", "type", "input.bin"))
data2 <- exec_internal("cmd", c("/C", "type", "input.bin", ">&2"))
writeBin(data1$stdout, "out5.bin")
writeBin(data2$stderr, "out6.bin")
} else {
res1 <- exec_wait("cat", "input.bin", std_out = "out1.bin")
res2 <- exec_wait("sh", c("-c", "cat input.bin >&2"), std_err = "out2.bin")
pid1 <- exec_background("cat", "input.bin", std_out = "out3.bin")
pid2 <- exec_background("sh", c("-c", "cat input.bin >&2"), std_err = "out4.bin")
data1 <- exec_internal("cat", "input.bin")
data2 <- exec_internal("sh", c("-c", "cat input.bin >&2"))
writeBin(data1$stdout, "out5.bin")
writeBin(data2$stderr, "out6.bin")
}
on.exit(tools::pskill(pid1), add = TRUE)
on.exit(tools::pskill(pid2), add = TRUE)
on.exit(unlink(sprintf("out%d.bin", 1:6)), add = TRUE)
expect_equal(res1, 0)
expect_equal(res2, 0)
expect_equal(data1$status, 0)
expect_equal(data2$status, 0)
expect_is(pid1, "integer")
expect_is(pid2, "integer")
Sys.sleep(1)
hash <- unname(tools::md5sum("input.bin"))
expect_equal(hash, unname(tools::md5sum("out1.bin")))
expect_equal(hash, unname(tools::md5sum("out2.bin")))
expect_equal(hash, unname(tools::md5sum("out3.bin")))
expect_equal(hash, unname(tools::md5sum("out4.bin")))
expect_equal(hash, unname(tools::md5sum("out5.bin")))
expect_equal(hash, unname(tools::md5sum("out6.bin")))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.