Nothing
## ----setup, echo = FALSE, message = FALSE--------------------------------
library(hedgehog)
set.seed(1014)
snoc <- function (xs, x) {
unlist ( list ( xs, list( x)) , recursive = F )
}
## ----echo = T, message = F-----------------------------------------------
refs <- setRefClass("Refs",
fields = list(
num = "numeric"
, refs = "list"
)
, methods = list(
initialize = function() .self$reset()
, newRef = function() {
.self$num <- .self$num + 1
.self$refs[[.self$num]] <- 0
return ( .self$num )
}
, readRef = function(i) {
return ( .self$refs[[i]] )
}
, writeRef = function(i, a) {
.self$refs[[i]] <- a
invisible(NULL)
}
, reset = function() {
.self$num = 0
.self$refs = list()
invisible(NULL)
}
)
)
grefs <- refs$new()
## ----echo = T, message = F-----------------------------------------------
list(key = 2, val = 0)
## ----echo = T, message = F-----------------------------------------------
new <- command ( "New",
generator = function( state ) list()
, execute = function() grefs$newRef()
, update = function( state, output )
snoc( state, list(key = output, val = 0))
)
## ----echo = T, message = F-----------------------------------------------
initialmodel <- list()
## ----echo = T, message = F-----------------------------------------------
test_that( "Registry State Machine Model",
forall( gen.actions ( initialmodel, list(new) ), function( actions ) {
grefs$reset()
expect_sequential( initialmodel, actions )
})
)
## ----echo = T, message = F-----------------------------------------------
read <- command ( "Read",
generator = function( state ) {
if ( length(state) == 0 )
return(NULL)
list(
key = gen.with(gen.element( state ), function(i) i$key )
)}
, require = function( state, key )
!is.null ( Find( function( proc ) { proc$key == key } , state ) )
, execute = function( key ) grefs$readRef(key)
, ensure = function( state, output, key ) {
expected <- Find( function( proc ) { proc$key == key } , state )$val
expect_equal( expected, output)
}
)
## ----echo = T, message = F-----------------------------------------------
write <- command ( "Write",
generator = function( state ) {
if ( length(state) == 0 )
return(NULL)
list (
key = gen.map( function(i) i$key, gen.element( state ))
, val = gen.int(10)
)}
, require = function( state, key, val )
!is.null ( Find( function( proc ) { proc$key == key } , state ) )
, execute = function( key, val ) grefs$writeRef( key, val )
, update = function( state, output, key, val )
lapply( state, function(proc)
if (proc$key == key) list(key = proc$key, val = val) else proc
)
)
## ----echo = T, message = F-----------------------------------------------
test_that( "Registry State Machine Model",
forall( gen.actions ( initialmodel, list(new, read, write) ), function( actions ) {
grefs$reset()
expect_sequential( initialmodel, actions )
})
)
## ----echo = T, message = F-----------------------------------------------
writeIncorrect <- command ( "Write (Broken)",
generator = function( state ) {
if ( length(state) == 0 )
return(NULL)
list (
key = gen.with( gen.element( state ), function(i) i$key)
, val = gen.int(10)
)}
, require = function( state, key, val )
!is.null ( Find( function( proc ) { proc$key == key } , state ) )
, execute = function( key, val ) grefs$writeRef( key, val + 1)
, update = function( state, output, key, val )
lapply( state, function(proc)
if (proc$key == key) list(key = proc$key, val = val) else proc
)
)
## ----echo = T, message = F, error=TRUE-----------------------------------
test_that( "Registry State Machine Model",
forall( gen.actions ( initialmodel, list(new, read, write, writeIncorrect) ), function( actions ) {
grefs$reset()
expect_sequential( initialmodel, actions )
})
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.