Add dMget
[Rpkg-dict.git] / inst / UnitTests / Dict_test.R
blob86ec29a860e6c1953f7c2b7d538570e4df2ed47a
1 testBasicGetSet_0 <- function() {
2     h <- newDict(size=32L, hash.alg=0L)
3     keys <- paste("a", 1:32)
4     for (k in keys)
5       h[[k]] <- k
6     
7     for (k in keys)
8       checkEquals(k, h[[k]])
11 testBasicGetSet_1 <- function() {
12     h <- newDict(size=32L, hash.alg=1L)
13     keys <- paste("a", 1:32)
14     for (k in keys)
15       h[[k]] <- k
16     
17     for (k in keys)
18       checkEquals(k, h[[k]])
21 testBasicGetSet_2 <- function() {
22     h <- newDict(size=32L, hash.alg=2L)
23     keys <- paste("a", 1:32)
24     for (k in keys)
25       h[[k]] <- k
26     
27     for (k in keys)
28       checkEquals(k, h[[k]])
31 test_dictInfo <- function() {
32     h <- newDict(64L)
33     info <- dictInfo(h)
34     checkEquals(c("size", "nitems", "type", "alg"), names(info))
35     checkEquals(0L, info$nitems)
36     checkEquals(64L, info$size)
39 testBasicGetSet_3 <- function() {
40     h <- newDict(size=32L, hash.alg=3L)
41     keys <- paste("a", 1:32)
42     for (k in keys)
43       h[[k]] <- k
44     
45     for (k in keys)
46       checkEquals(k, h[[k]])
49 testDollar <- function() {
50     h <- newDict(size=32L, hash.alg=3L)
51     h$foo <- 1
52     h$bar <- 2
53     h$baz <- 3
54     checkEquals(1, h$foo)
55     checkEquals(2, h$bar)
56     checkEquals(3, h$baz)
59 test_listHashFunctions <- function() {
60     funs <- listHashFunctions()
61     expect <- c(0L, 1L, 2L, 3L)
62     names(expect) <- c("PJW", "DJB2", "JOAAT", "LOOKUP3")
63     checkEquals(expect, funs)
66 test_del <- function() {
67     kk <- paste("a", 1:100, sep="")
68     d <- newDict(256L)
69     for (k in kk)
70       d[[k]] = k
71     checkEquals(100L, length(d))
72     for (k in kk[1:50])
73       del(d, k)
74     checkEquals(50L, length(d))
75     for (k in kk[51:100])
76       del(d, k)
77     checkEquals(0L, length(d))
79     d <- newDict(32L)
80     for (k in kk)
81       d[[k]] = k
82     checkEquals(100L, length(d))
84     checkEquals(FALSE, del(d, "FOOBAR"))
86     set.seed(0x123a)
87     for (k in sample(kk))
88       checkEquals(TRUE, del(d, k))
89     checkEquals(0L, length(d))
92 test_keys <- function() {
93     d <- newDict(64L, hash.alg=0L)
94     kk <- paste("abc", 1:30, sep="")
95     for (k in kk)
96       d[[k]] <- 1L
97     dkeys <- keys(d)
98     checkEquals(sort(kk), sort(dkeys))
99     dnames <- names(d)
100     checkEquals(sort(kk), sort(dnames))
103 test_as.list <- function() {
104     d <- newDict(64L, hash.alg=0L)
105     kk <- paste("abc", 1:30, sep="")
106     for (i in seq(along=kk))
107       d[[kk[i]]] <- i
108     expect <- structure(as.list(1:length(kk)), names=kk)
109     nms <- sort(kk)
110     ans1 <- as(d, "list")
111     ans2 <- as.list(d)
112     checkEquals(ans1, ans2)
113     checkEquals(expect[nms], ans1[nms])
115     
116 test_hashCodes <- function() {
117     s <- 32L
118     algs <- listHashFunctions()
119     keys <- paste(1:20, "abc", sep="*")
120     ## just test length and type for now
121     for (a in algs) {
122         codes <- hashCodes(keys, s, a)
123         checkEquals(length(keys), length(codes))
124         checkEquals("integer", typeof(codes))
125         checkEquals(keys, names(codes))
126     }
129 test_copyDict <- function() {
130     keys <- paste("abc", 1:10, sep="")
131     orig <- newDict(32L)
132     shallow <- orig
133     for (k in keys)
134       orig[[k]] <- k
135     deep <- copyDict(orig)
136     ## was the copy successful?
137     checkEquals(as.list(orig), as.list(deep))
138     ## is it really deep?
139     for (k in keys)
140       orig[[k]] <- paste(k, "FOO")
141     for (k in keys)
142       checkEquals(k, deep[[k]])
145 test_ElementDuplication <- function() {
146     d <- newDict()
147     d[["a"]] <- list(foo=1)             # an un-NAMED value!
148     d[["b"]] <- 1:4
149     v <- d[["a"]]
150     v[["foo"]] <- 2
151     checkEquals(1, d[["a"]][["foo"]])
152     v <- d[["b"]]
153     v[1] <- 100L
154     checkEquals(1:4, d[["b"]])
156     v <- list(list(foo=1))
157     d[["b"]] <- v
158     d[["b"]][[1]][["foo"]] <- 100
159     checkEquals(1, v[[1]][["foo"]])
160     checkEquals(100, d[["b"]][[1]][["foo"]])
163 testAllKeys <- function() {
164     h <- newDict(32L)
165     for (i in 1:26)
166       h[[LETTERS[i]]] <- letters[i]
167     checkEquals(LETTERS, names(h))
168     checkEquals(LETTERS, ls(h))
169     checkEquals(LETTERS, keys(h, sort=TRUE))
172 test_mget <- function() {
173     h <- newDict(32L)
174     for (i in 1:26) h[[LETTERS[i]]] <- letters[i]
176     z1 <- mget(LETTERS[1:5], h)
177     z2 <- mget(LETTERS[1:5], envir=h)
178     checkEquals(z1, z2)
179     checkEquals(5, length(z1))
180     checkEquals(LETTERS[1:5], names(z1))
181     checkEquals(letters[1:5], unlist(z1, use.names=FALSE))
183     z3 <- mget(c(LETTERS[1:3], "xxx", "yyy"), h, ifnotfound=NULL)
184     checkEquals(3, length(z3))
185     checkEquals(LETTERS[1:3], names(z3))
186     checkEquals(letters[1:3], unlist(z3, use.names=FALSE))
187     
188     z4 <- mget(c(LETTERS[1:3], "xxx", "yyy"), h, ifnotfound=0L)
189     checkEquals(5, length(z4))
190     checkEquals(c(letters[1:3], 0, 0), unlist(z4, use.names=FALSE))
193 test_dMget <- function() {
194     h <- newDict(32L)
195     for (i in 1:26) h[[LETTERS[i]]] <- letters[i]
197     z1 <- dMget(h, LETTERS[1:5])
198     checkEquals(5, length(z1))
199     checkEquals(LETTERS[1:5], sort(names(z1)))
200     checkEquals(letters[1:5], sort(unlist(z1, use.names=FALSE)))
202     z3 <- dMget(h, c(LETTERS[1:3], "xxx", "yyy"), ifnotfound=NULL)
203     checkEquals(3, length(z3))
204     checkEquals(LETTERS[1:3], sort(names(z3)))
205     checkEquals(letters[1:3], sort(unlist(z3, use.names=FALSE)))
206     
207     z4 <- dMget(h, c(LETTERS[1:3], "xxx", "yyy"), ifnotfound=0L)
208     checkEquals(5, length(z4))
209     checkEquals(2, sum(z4 == "0"))