File: test-dispatching.1.R

package info (click to toggle)
r-cran-lambda.r 1.2.4-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 284 kB
  • sloc: sh: 9; makefile: 2
file content (109 lines) | stat: -rw-r--r-- 1,752 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
rm(list=ls())
assert('dispatching_1a', {
  fib(0) %as% 1
  fib(1) %as% 1
  fib(n) %when% {
    abs(n - round(n)) < .Machine$double.eps^0.5
  } %as% {
    fib(n-1) + fib(n-2)
  }
  seal(fib)

  fib(5) == 8
})

rm(list=ls())
assert('dispatching_1b', {
  fib(n) %::% numeric : numeric
  fib(0) %as% 1
  fib(1) %as% 1
  fib(n) %as% { fib(n-1) + fib(n-2) }
  seal(fib)

  act.1 <- fib(5)
  act.2 <- tryCatch(fib("a"), error=function(x) 'error')

  (act.1 == 8)
  (act.2 == 'error')
})

rm(list=ls())
assert('dispatching_1c', {
  Integer(x) %as% x

  fib(n) %::% Integer : Integer
  fib(0) %as% Integer(1)
  fib(1) %as% Integer(1)
  fib(n) %as% { Integer(fib(n-1) + fib(n-2)) }
  seal(Integer)
  seal(fib)

  act <- tryCatch(fib(5), error=function(x) 'error')

  (fib(Integer(5)) == Integer(8))
  (act == 'error')
})

rm(list=ls())
assert('dispatching_1d', {
  abs_max(a,b) %::% numeric : numeric : numeric
  abs_max(a,b) %when% {
    a != b
  } %as% {
    pmax(abs(a), abs(b))
  }

  abs_max(a,b) %::% character : character : numeric
  abs_max(a,b) %as%
  {
    abs_max(as.numeric(a), as.numeric(b))
  }

  abs_max(a) %as% { max(abs(a)) }
  seal(abs_max)

  a <- c(1,2,5,6,3,2,1,3)

  (abs_max(2,-3) == 3)
  (abs_max("3","-4") == 4)
  (abs_max(a) == 6)
})


rm(list=ls())
assert('different_names', {
  A(a) %as% { list(a=a) }
  A(b) %as% { list(b=b) }
  seal(A)

  (A(5)$a == 5)
  (A(a=5)$a == 5)
  (A(b=5)$b == 5)
})

rm(list=ls())
assert('empty_function', {
  a() %as% {  }
  seal(a)

  b(a) %as% {  }
  seal(b)

  # Empty functions will fail
  has_error(a())
  has_error(b(1))
})

rm(list=ls())
assert('empty_type_constructor', {
  A() %as% {  }
  seal(A)

  B(a) %as% {  }
  seal(B)

  # Empty functions will fail
  has_error(A())
  has_error(B(1))
})