tests/testthat/test-parser.R

test_that("parse", {
  expect_equal(parse(tokenize("1")), list(node_num(1)))
  expect_equal(parse(tokenize("1+2")), list(node("+", node_num(1), node_num(2))))
  expect_equal(parse(tokenize("1+2*3")), list(node("+", node_num(1), node("*", node_num(2), node_num(3)))))
  expect_equal(parse(tokenize("1*2+3")), list(node("+", node("*", node_num(1), node_num(2)), node_num(3))))
  expect_equal(parse(tokenize("1*(2+3)")), list(node("*", node_num(1), node("+", node_num(2), node_num(3)))))
  expect_equal(parse(tokenize("(1+2)*3")), list(node("*", node("+", node_num(1), node_num(2)), node_num(3))))
  expect_equal(parse(tokenize("a=1")), list(node("=", node_ident("a"), node_num(1))))
  expect_equal(parse(tokenize("a=b=1")), list(node("=", node_ident("a"), node("=", node_ident("b"), node_num(1)))))
  expect_equal(parse(tokenize("a=1+2")), list(node("=", node_ident("a"), node("+", node_num(1), node_num(2)))))
  expect_equal(parse(tokenize("a=1;")), list(node("=", node_ident("a"), node_num(1))))
  expect_equal(parse(tokenize("a=1;a+2")), list(node("=", node_ident("a"), node_num(1)),
                                                node("+", node_ident("a"), node_num(2))))
  expect_equal(parse(tokenize("a <- 1;")), list(node("=", node_ident("a"), node_num(1))))
  expect_equal(parse(tokenize("a==2+3")), list(node("==", node_ident("a"), node("+", node_num(2), node_num(3)))))
  expect_equal(parse(tokenize("a-1!=2")), list(node("!=", node("-", node_ident("a"), node_num(1)), node_num(2))))
  expect_equal(parse(tokenize("var_name1=2")), list(node("=", node_ident("var_name1"), node_num(2))))
  expect_equal(parse(tokenize("foo()")), list(node_call(node_ident("foo"), list())))
  expect_equal(parse(tokenize("foo(1)")), list(node_call(node_ident("foo"), list(node_num(1)))))
  expect_equal(parse(tokenize("foo(1, 2)")), list(node_call(node_ident("foo"), list(node_num(1), node_num(2)))))
  expect_equal(parse(tokenize("function() 1")), list(node_function(list(), node_num(1))))
  expect_equal(parse(tokenize("function(a, b) a + b")), list(node_function(list(node_ident("a"), node_ident("b")),
                                                                           node("+", node_ident("a"), node_ident("b")))))
  expect_equal(parse(tokenize("function() 1; 2")), list(node_function(list(), node_num(1)), node_num(2)))
  expect_equal(parse(tokenize("add2 <- function(x) x + 2")),
               list(node("=", node_ident("add2"), node_function(list(node_ident("x")), node("+", node_ident("x"), node_num(2))))))
})
igjit/nrc documentation built on Jan. 10, 2020, 1:42 p.m.