context("test-g01-constraints")
TOL <- 1e-6
a <- Variable(name = "a")
b <- Variable(name = "b")
x <- Variable(2, name = "x")
y <- Variable(3, name = "y")
z <- Variable(2, name = "z")
A <- Variable(2, 2, name = "A")
B <- Variable(2, 2, name = "B")
C <- Variable(3, 2, name = "C")
SOC <- CVXR:::SOC
save_value <- CVXR:::save_value
test_that("test the EqConstraint class", {
skip_on_cran()
constr <- x == z
expect_equal(name(constr), "x == z")
expect_equal(dim(constr), c(2,1))
# Test value and dual_value
expect_true(is.na(dual_value(constr)))
expect_error(constr_value(constr))
x <- save_value(x, 2)
z <- save_value(z, 2)
constr <- x == z
expect_true(constr_value(constr))
x <- save_value(x, 3)
constr <- x == z
expect_false(constr_value(constr))
value(x) <- c(2,1)
value(z) <- c(2,2)
constr <- x == z
expect_false(constr_value(constr))
expect_equal(violation(constr), matrix(c(0,1)), tolerance = TOL)
expect_equal(residual(constr), matrix(c(0,1)), tolerance = TOL)
value(z) <- c(2,1)
constr <- x == z
expect_true(constr_value(constr))
expect_equal(violation(constr), matrix(c(0,0)))
expect_equal(residual(constr), matrix(c(0,0)))
expect_error(x == y)
})
test_that("test the LeqConstraint class", {
skip_on_cran()
constr <- x <= z
expect_equal(name(constr), "x <= z")
expect_equal(dim(constr), c(2,1))
# Test value and dual_value
expect_true(is.na(dual_value(constr)))
expect_error(constr_value(constr))
x <- save_value(x, 1)
z <- save_value(z, 2)
constr <- x <= z
expect_true(constr_value(constr))
x <- save_value(x, 3)
constr <- x <= z
expect_false(constr_value(constr))
value(x) <- c(2,1)
value(z) <- c(2,0)
constr <- x <= z
expect_false(constr_value(constr))
expect_equal(violation(constr), matrix(c(0,1)), tolerance = TOL)
expect_equal(residual(constr), matrix(c(0,1)), tolerance = TOL)
value(z) <- c(2,2)
constr <- x <= z
expect_true(constr_value(constr))
expect_equal(violation(constr), matrix(c(0,0)), tolerance = TOL)
expect_equal(residual(constr), matrix(c(0,0)), tolerance = TOL)
expect_error(x <= y)
})
test_that("Test the PSD constraint %>>%", {
skip_on_cran()
constr <- A %>>% B
expect_equal(name(constr), "A + -B >> 0")
expect_equal(dim(constr), c(2,2))
# Test value and dual_value
expect_true(is.na(dual_value(constr)))
expect_error(constr_value(constr))
A <- save_value(A, rbind(c(2,-1), c(1,2)))
B <- save_value(B, rbind(c(1,0), c(0,1)))
constr <- A %>>% B
expect_true(constr_value(constr))
expect_equal(violation(constr), 0, tolerance = TOL)
expect_equal(residual(constr), 0, tolerance = TOL)
B <- save_value(B, rbind(c(3,0), c(0,3)))
constr <- A %>>% B
expect_false(constr_value(constr))
expect_equal(violation(constr), 1, tolerance = TOL)
expect_equal(residual(constr), 1, tolerance = TOL)
expect_error(x %>>% 0, "Non-square matrix in positive definite constraint.")
})
test_that("Test the PSD constraint %<<%", {
skip_on_cran()
constr <- A %<<% B
expect_equal(name(constr), "B + -A >> 0")
expect_equal(dim(constr), c(2,2))
# Test value and dual_value
expect_true(is.na(dual_value(constr)))
expect_error(constr_value(constr))
B <- save_value(B, rbind(c(2,-1), c(1,2)))
A <- save_value(A, rbind(c(1,0), c(0,1)))
constr <- A %<<% B
expect_true(constr_value(constr))
A <- save_value(A, rbind(c(3,0), c(0,3)))
constr <- A %<<% B
expect_false(constr_value(constr))
expect_error(x %<<% 0, "Non-square matrix in positive definite constraint.")
})
test_that("test the >= operator", {
skip_on_cran()
constr <- z >= x
expect_equal(name(constr), "x <= z")
expect_equal(dim(constr), c(2,1))
expect_error(y >= x)
})
test_that("test the SOC class", {
skip_on_cran()
exp <- x + z
scalar_exp <- a + b
constr <- SOC(scalar_exp, exp)
expect_equal(size(constr), 3)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.