Skip to content

Commit f0fad53

Browse files
committed
Add tests
1 parent 4644804 commit f0fad53

File tree

1 file changed

+75
-56
lines changed

1 file changed

+75
-56
lines changed

test/ArrayDiff.jl

Lines changed: 75 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,25 @@ function test_objective_dot_univariate()
4040
return
4141
end
4242

43+
function test_objective_dot_univariate_and_scalar_mult()
44+
model = Nonlinear.Model()
45+
x = MOI.VariableIndex(1)
46+
Nonlinear.set_objective(model, :(2*(dot([$x], [$x]))))
47+
evaluator = Nonlinear.Evaluator(model, ArrayDiff.Mode(), [x])
48+
MOI.initialize(evaluator, [:Grad])
49+
sizes = evaluator.backend.objective.expr.sizes
50+
@test sizes.ndims == [0, 0, 0, 1, 0, 1, 0]
51+
@test sizes.size_offset == [0, 0, 0, 1, 0, 0, 0]
52+
@test sizes.size == [1, 1]
53+
@test sizes.storage_offset == [0, 1, 2, 3, 4, 5, 6, 7]
54+
x = [1.2]
55+
@test MOI.eval_objective(evaluator, x) == 2*x[1]^2
56+
g = ones(1)
57+
MOI.eval_objective_gradient(evaluator, g, x)
58+
@test g[1] == 4x[1]
59+
return
60+
end
61+
4362
function test_objective_dot_bivariate()
4463
model = Nonlinear.Model()
4564
x = MOI.VariableIndex(1)
@@ -280,62 +299,62 @@ function test_objective_norm_of_row()
280299
return
281300
end
282301

283-
#function test_objective_norm_of_matrix()
284-
# model = Nonlinear.Model()
285-
# x1 = MOI.VariableIndex(1)
286-
# x2 = MOI.VariableIndex(2)
287-
# x3 = MOI.VariableIndex(3)
288-
# x4 = MOI.VariableIndex(4)
289-
# Nonlinear.set_objective(model, :(norm([$x1 $x2; $x3 $x4])))
290-
# evaluator = Nonlinear.Evaluator(model, ArrayDiff.Mode(), [x1, x2, x3, x4])
291-
# MOI.initialize(evaluator, [:Grad])
292-
# sizes = evaluator.backend.objective.expr.sizes
293-
# @test sizes.ndims == [0, 2, 2, 0, 0, 2, 0, 0]
294-
# @test sizes.size_offset == [0, 4, 2, 0, 0, 0, 0, 0]
295-
# @test sizes.size == [1, 2, 1, 2, 2, 2]
296-
# @test sizes.storage_offset == [0, 1, 5, 7, 8, 9, 11, 12, 13]
297-
# x1 = 1.0
298-
# x2 = 2.0
299-
# x3 = 3.0
300-
# x4 = 4.0
301-
# @test MOI.eval_objective(evaluator, [x1, x2, x3, x4]) == sqrt(30.0)
302-
# g = ones(4)
303-
# MOI.eval_objective_gradient(evaluator, g, [x1, x2, x3, x4])
304-
# @test g == [
305-
# 1.0 / sqrt(30.0),
306-
# 2.0 / sqrt(30.0),
307-
# 3.0 / sqrt(30.0),
308-
# 4.0 / sqrt(30.0),
309-
# ]
310-
# return
311-
#end
312-
#
313-
#function test_objective_norm_of_matrix_with_sum()
314-
# model = Nonlinear.Model()
315-
# x1 = MOI.VariableIndex(1)
316-
# x2 = MOI.VariableIndex(2)
317-
# x3 = MOI.VariableIndex(3)
318-
# x4 = MOI.VariableIndex(4)
319-
# Nonlinear.set_objective(model, :(norm([$x1 $x2; $x3 $x4] - [1 1; 1 1])))
320-
# evaluator = Nonlinear.Evaluator(model, ArrayDiff.Mode(), [x1, x2, x3, x4])
321-
# MOI.initialize(evaluator, [:Grad])
322-
# sizes = evaluator.backend.objective.expr.sizes
323-
# @test sizes.ndims == [0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0]
324-
# @test sizes.size_offset ==
325-
# [0, 12, 10, 8, 0, 0, 6, 0, 0, 4, 2, 0, 0, 0, 0, 0]
326-
# @test sizes.size == [1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2]
327-
# @test sizes.storage_offset ==
328-
# [0, 1, 5, 9, 11, 12, 13, 15, 16, 17, 21, 23, 24, 25, 27, 28, 29]
329-
# x1 = 1.0
330-
# x2 = 2.0
331-
# x3 = 3.0
332-
# x4 = 4.0
333-
# @test MOI.eval_objective(evaluator, [x1, x2, x3, x4]) == sqrt(14.0)
334-
# g = ones(4)
335-
# MOI.eval_objective_gradient(evaluator, g, [x1, x2, x3, x4])
336-
# @test g == [0.0, 1.0 / sqrt(14.0), 2.0 / sqrt(14.0), 3.0 / sqrt(14.0)]
337-
# return
338-
#end
302+
function test_objective_norm_of_matrix()
303+
model = Nonlinear.Model()
304+
x1 = MOI.VariableIndex(1)
305+
x2 = MOI.VariableIndex(2)
306+
x3 = MOI.VariableIndex(3)
307+
x4 = MOI.VariableIndex(4)
308+
Nonlinear.set_objective(model, :(norm([$x1 $x2; $x3 $x4])))
309+
evaluator = Nonlinear.Evaluator(model, ArrayDiff.Mode(), [x1, x2, x3, x4])
310+
MOI.initialize(evaluator, [:Grad])
311+
sizes = evaluator.backend.objective.expr.sizes
312+
@test sizes.ndims == [0, 2, 2, 0, 0, 2, 0, 0]
313+
@test sizes.size_offset == [0, 4, 2, 0, 0, 0, 0, 0]
314+
@test sizes.size == [1, 2, 1, 2, 2, 2]
315+
@test sizes.storage_offset == [0, 1, 5, 7, 8, 9, 11, 12, 13]
316+
x1 = 1.0
317+
x2 = 2.0
318+
x3 = 3.0
319+
x4 = 4.0
320+
@test MOI.eval_objective(evaluator, [x1, x2, x3, x4]) == sqrt(30.0)
321+
g = ones(4)
322+
MOI.eval_objective_gradient(evaluator, g, [x1, x2, x3, x4])
323+
@test g == [
324+
1.0 / sqrt(30.0),
325+
2.0 / sqrt(30.0),
326+
3.0 / sqrt(30.0),
327+
4.0 / sqrt(30.0),
328+
]
329+
return
330+
end
331+
332+
function test_objective_norm_of_matrix_with_sum()
333+
model = Nonlinear.Model()
334+
x1 = MOI.VariableIndex(1)
335+
x2 = MOI.VariableIndex(2)
336+
x3 = MOI.VariableIndex(3)
337+
x4 = MOI.VariableIndex(4)
338+
Nonlinear.set_objective(model, :(norm([$x1 $x2; $x3 $x4] - [1 1; 1 1])))
339+
evaluator = Nonlinear.Evaluator(model, ArrayDiff.Mode(), [x1, x2, x3, x4])
340+
MOI.initialize(evaluator, [:Grad])
341+
sizes = evaluator.backend.objective.expr.sizes
342+
@test sizes.ndims == [0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0]
343+
@test sizes.size_offset ==
344+
[0, 12, 10, 8, 0, 0, 6, 0, 0, 4, 2, 0, 0, 0, 0, 0]
345+
@test sizes.size == [1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2]
346+
@test sizes.storage_offset ==
347+
[0, 1, 5, 9, 11, 12, 13, 15, 16, 17, 21, 23, 24, 25, 27, 28, 29]
348+
x1 = 1.0
349+
x2 = 2.0
350+
x3 = 3.0
351+
x4 = 4.0
352+
@test MOI.eval_objective(evaluator, [x1, x2, x3, x4]) == sqrt(14.0)
353+
g = ones(4)
354+
MOI.eval_objective_gradient(evaluator, g, [x1, x2, x3, x4])
355+
@test g == [0.0, 1.0 / sqrt(14.0), 2.0 / sqrt(14.0), 3.0 / sqrt(14.0)]
356+
return
357+
end
339358

340359
end # module
341360

0 commit comments

Comments
 (0)