File: test-weakref.R

package info (click to toggle)
r-cran-igraph 2.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 27,772 kB
  • sloc: ansic: 206,420; cpp: 21,827; fortran: 4,090; yacc: 1,229; lex: 518; sh: 52; makefile: 8
file content (94 lines) | stat: -rw-r--r-- 2,077 bytes parent folder | download
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
test_that("we can create weak references", {
  g <- new.env()
  g$foo <- "bar"
  value <- "foobar"
  vs <- make_weak_ref(key = g, value = value)

  expect_identical(typeof(vs), "weakref")
  expect_identical(weak_ref_key(vs), g)
  expect_identical(weak_ref_value(vs), value)
})

test_that("weak references are weak", {
  g <- new.env()
  g$foo <- "bar"
  value <- "foobar"
  vs <- make_weak_ref(key = g, value = value)

  rm(g)
  gc()
  expect_null(weak_ref_key(vs))
  expect_null(weak_ref_value(vs))
})

test_that("weak reference finalizer is called", {
  g <- new.env()
  g$foo <- "bar"
  value <- "foobar"
  hello <- ""
  fin <- function(env) hello <<- "world"
  vs <- make_weak_ref(key = g, value = value, finalizer = fin)

  rm(g)
  gc()

  expect_equal(hello, "world")
})

test_that("weak reference on an embedded env", {
  g <- list(yes = new.env())
  g[[1]]$foo <- "bar"
  value <- "foobar"
  vs <- make_weak_ref(key = g[[1]], value = value)

  rm(g)
  gc()
  expect_null(weak_ref_key(vs))
  expect_null(weak_ref_value(vs))
})

test_that("embed myself, and weak ref", {
  g <- list(yes = new.env())
  assign("foo", g, envir = g[[1]])
  value <- "foobar"
  hello <- ""
  fin <- function(env) hello <<- "world"
  vs <- make_weak_ref(key = g[[1]], value = value, finalizer = fin)

  rm(g)
  gc()
  expect_null(weak_ref_key(vs))
  expect_null(weak_ref_value(vs))
  expect_equal(hello, "world")
})

test_that("embed myself, and weak ref as attribute", {
  g <- list(yes = new.env())
  assign("foo", g, envir = g[[1]])
  value <- "foobar"
  hello <- ""
  fin <- function(env) hello <<- "world"
  z <- "footoo"
  attr(z, "env") <- make_weak_ref(
    key = g[[1]],
    value = value,
    finalizer = fin
  )

  rm(g)
  gc()
  expect_null(weak_ref_key(attr(z, "env")))
  expect_null(weak_ref_value(attr(z, "env")))
  expect_equal(hello, "world")
})

test_that("weak refs work for vs", {
  g <- make_ring(10)
  vs <- V(g)
  expect_true(!is.null(get_vs_ref(g)))
  expect_true(!is.null(weak_ref_key(attr(vs, "env"))))

  rm(g)
  gc()
  expect_null(weak_ref_key(attr(vs, "env")))
})