tests/testthat/test-circle-layout.R

test_that("circle layout places nodes on a unit-radius circle around (0.5, 0.5)", {
  cg <- caugi(A %-->% B, B %-->% C, C %-->% D, D %-->% A)
  layout <- caugi_layout_circle(cg)

  expect_equal(nrow(layout), 4)
  expect_setequal(layout$name, c("A", "B", "C", "D"))

  radii <- sqrt((layout$x - 0.5)^2 + (layout$y - 0.5)^2)
  expect_equal(radii, rep(0.5, 4), tolerance = 1e-9)
})

test_that("circle layout first node is at the top", {
  cg <- caugi(A %-->% B, B %-->% C, C %-->% A)
  layout <- caugi_layout_circle(cg)

  expect_equal(layout$x[1], 0.5, tolerance = 1e-9)
  expect_equal(layout$y[1], 1.0, tolerance = 1e-9)
})

test_that("circle layout via caugi_layout dispatches to circle method", {
  cg <- caugi(A %-->% B, B %-->% C, C %-->% D)
  layout <- caugi_layout(cg, method = "circle")

  expect_equal(nrow(layout), 4)
  radii <- sqrt((layout$x - 0.5)^2 + (layout$y - 0.5)^2)
  expect_equal(radii, rep(0.5, 4), tolerance = 1e-9)
})

test_that("circle layout works with mixed edge types", {
  cg <- caugi(A %-->% B, B %<->% C, C %---% D)
  layout <- caugi_layout_circle(cg)

  expect_equal(nrow(layout), 4)
  expect_true(all(layout$x >= 0 & layout$x <= 1))
  expect_true(all(layout$y >= 0 & layout$y <= 1))
})

test_that("circle layout is deterministic", {
  cg <- caugi(A %-->% B, B %-->% C, C %-->% D, D %-->% A)
  l1 <- caugi_layout_circle(cg)
  l2 <- caugi_layout_circle(cg)
  expect_equal(l1, l2)
})

test_that("circle layout single node is centered", {
  cg <- caugi(A, class = "DAG")
  layout <- caugi_layout_circle(cg)

  expect_equal(nrow(layout), 1)
  expect_equal(layout$x, 0.5)
  expect_equal(layout$y, 0.5)
})

Try the caugi package in your browser

Any scripts or data that you put into this service are public.

caugi documentation built on Oct. 28, 2026, 1:07 a.m.