Source code for tests.abstract.statement.test_assignment
#!/usr/bin/env python
# encoding: utf-8
#
# Copyright SAS Institute
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
Unit test for abstract assignments.
"""
import os
import sys
import unittest
import warnings
import sasoptpy as so
from inspect import cleandoc
from sasoptpy.actions import read_data
from tests.swat_config import create_cas_connection
[docs]class TestAssignment(unittest.TestCase):
"""
Unit tests for assignment statements
"""
@classmethod
def setUpClass(cls):
so.reset()
cls.conn = None
from swat import CAS, SWATError
try:
cls.conn = create_cas_connection()
except SWATError:
warnings.warn('CAS connection is not available', RuntimeWarning)
except TypeError:
warnings.warn('CAS variables are not available', RuntimeWarning)
@classmethod
def tearDownClass(cls):
if cls.conn is not None:
cls.conn.close()
def test_bound_assignment(self):
with so.Workspace('test_regular_assignment') as w:
p = so.Parameter(name='p', init=2)
x = so.VariableGroup(5, lb=1, name='x')
x[0].set_bounds(lb=3)
x[1].set_bounds(lb=p)
p.set_value(4)
x[2].set_bounds(lb=p, ub=p)
x[3].set_bounds(ub=5)
x[4].set_bounds(lb=1, ub=4)
self.assertEqual(so.to_optmodel(w), cleandoc("""
proc optmodel;
num p init 2;
var x {{0,1,2,3,4}} >= 1;
x[0].lb = 3;
x[1].lb = p;
p = 4;
fix x[2]=p;
x[3].ub = 5;
x[4].lb = 1;
x[4].ub = 4;
quit;
"""))
def test_assignment_append(self):
x = so.Variable(name='x')
r = so.abstract.Assignment(x, 5)
self.assertEqual(so.to_definition(r), 'x = 5;')
y = so.Variable(name='y')
r.append(identifier=y)
self.assertEqual(so.to_definition(r), 'y = 5;')
r.append(expression=10)
self.assertEqual(so.to_definition(r), 'y = 10;')
r.append(keyword='fix')
self.assertEqual(so.to_definition(r), 'fix y = 10;')
def test_fix_value(self):
from sasoptpy.actions import fix
with so.Workspace('w') as w:
e = so.Parameter(name='e', value=4)
x = so.VariableGroup(5, name='x')
fix(x[0], 0)
fix(x[1], e*2)
self.assertEqual(so.to_optmodel(w), cleandoc('''
proc optmodel;
num e = 4;
var x {{0,1,2,3,4}};
fix x[0]=0;
fix x[1]=2 * e;
quit;'''))