source: trunk/test/pyomo/unit/test_modeldata.py @ 1448

Last change on this file since 1448 was 1448, checked in by wehart, 11 years ago

Resolving an issue loading boolean data from a *.dat file.
Now, all true/false strings are changed to True/False? values.

Updated related test cases.

File size: 8.0 KB
Line 
1#
2# Unit Tests for ModelData objects
3#
4
5import unittest
6import os
7import sys
8from os.path import abspath, dirname
9coopr_dir=dirname(dirname(abspath(__file__)))+os.sep+".."+os.sep+".."
10sys.path.insert(0, coopr_dir)
11from coopr.pyomo import *
12import coopr
13
14currdir=dirname(abspath(__file__))+os.sep
15example_dir=coopr_dir+os.sep+"example"+os.sep+"pyomo"+os.sep+"tutorials"+os.sep+"tab"+os.sep
16
17try:
18  from win32com.client.dynamic import Dispatch
19  _win32com=True
20except:
21  _win32com=False #pragma:nocover
22
23
24class PyomoTableData(unittest.TestCase):
25
26    def run(self, result=None):
27        """ Disable the tests if win32com is not available """
28        if not _win32com:
29           return
30        unittest.TestCase.run(self,result)
31
32    def setUp(self):
33        pass
34
35    def construct(self,filename):
36        pass
37
38    def test_read_set(self):
39        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",set="X")
40        try:
41           td.open()
42           td.read()
43           td.close()
44           self.failUnlessEqual( td.data(), ['set', 'X', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
45        except coopr.ApplicationError:
46           pass
47
48    def test_read_set2(self):
49        td = TableData(range="TheRange",set="X")
50        try:
51           td.open(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls")
52           td.read()
53           td.close()
54           self.failUnlessEqual( td.data(), ['set', 'X', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
55        except coopr.ApplicationError:
56           pass
57
58    def test_read_param1(self):
59        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange")
60        try:
61          td.open()
62          td.read()
63          td.close()
64          self.failUnlessEqual( td.data(), ['param', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
65        except coopr.ApplicationError:
66          pass
67
68    def test_read_param2(self):
69        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X")
70        try:
71          td.open()
72          td.read()
73          td.close()
74          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
75        except coopr.ApplicationError:
76          pass
77
78    def test_read_param3(self):
79        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X", param="a")
80        try:
81          td.open()
82          td.read()
83          td.close()
84          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'a', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
85        except coopr.ApplicationError:
86          pass
87
88    def test_read_param4(self):
89        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X", param=("a","b"))
90        try:
91          td.open()
92          td.read()
93          td.close()
94          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'a', 'b', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
95        except coopr.ApplicationError:
96          pass
97
98    def test_read_array1(self):
99        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",param="X", format="array")
100        try:
101          td.open()
102          td.read()
103          td.close()
104          self.failUnlessEqual( td.data(), ['param', 'X', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
105        except coopr.ApplicationError:
106          pass
107
108    def test_read_array2(self):
109        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",param="X",format="transposed_array")
110        try:
111          td.open()
112          td.read()
113          td.close()
114          self.failUnlessEqual( td.data(), ['param', 'X', '(tr)',':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
115        except coopr.ApplicationError:
116          pass
117
118    def test_error1(self):
119        td = TableData(filename="bad")
120        try:
121            td.open()
122            self.fail("Expected IOError because of bad file")
123        except IOError:
124            pass
125
126    def test_error2(self):
127        td = TableData()
128        try:
129            td.open()
130            self.fail("Expected IOError because no file specified")
131        except IOError:
132            pass
133
134    def test_error3(self):
135        td = TableData(filename=currdir+"display.txt")
136        try:
137            td.open()
138            self.fail("Expected IOError because of bad file type")
139        except IOError:
140            pass
141
142    def test_error4(self):
143        td = TableData(filename=currdir+"dummy")
144        try:
145            td.open()
146            self.fail("Expected IOError because of bad file type")
147        except IOError:
148            pass
149
150    def test_error5(self):
151        td = TableData(filename=example_dir+"D.tab", param="D", format="foo")
152        td.open()
153        try:
154            td.read()
155            self.fail("Expected IOError because of bad format")
156        except ValueError:
157            pass
158
159    def test_error7(self):
160        td = TableData(filename=example_dir+"D.tab", set="D", format="foo")
161        td.open()
162        try:
163            td.read()
164            self.fail("Expected IOError because of bad format")
165        except ValueError:
166            pass
167
168
169
170class PyomoModelData(unittest.TestCase):
171
172    def test_md1(self):
173        md = ModelData()
174        md.add_table(example_dir+"A.tab")
175        try:
176            md.read()
177            self.fail("Must specify a model")
178        except ValueError:
179            pass
180        model=Model()
181        try:
182            md.read(model)
183            self.fail("Expected IOError")
184        except IOError:
185            pass
186        model.A=Set()
187
188    def test_md2(self):
189        md = ModelData()
190        md.add_data_file(currdir+"data1.dat")
191        model=Model()
192        model.A=Set()
193        md.read(model)
194
195    def test_md3(self):
196        md = ModelData()
197        md.add_data_file(currdir+"data2.dat")
198        model=Model()
199        model.A=Set()
200        try:
201            md.read(model)
202            self.fail("Expected error because of extraneous text")
203        except IOError:
204            pass
205
206    def test_md4(self):
207        md = ModelData()
208        md.add_data_file(currdir+"data3.dat")
209        model=Model()
210        model.A=Set()
211        model.B=Set()
212        model.C=Set()
213        md.read(model)
214
215    def test_md5(self):
216        md = ModelData()
217        md.add_data_file(currdir+"data4.dat")
218        model=Model()
219        model.A=Set()
220        try:
221            md.read(model)
222        except ValueError:
223            pass
224
225    def test_md6(self):
226        md = ModelData()
227        md.add_data_file(currdir+"data5.dat")
228        model=Model()
229        model.A=Set()
230        try:
231            md.read(model)
232        except ValueError:
233            pass
234
235    def test_md7(self):
236        md = ModelData()
237        md.add_table(currdir+"data1.tab")
238        model=Model()
239        try:
240            md.read(model)
241            self.fail("Expected IOError")
242        except IOError:
243            pass
244
245    def test_md8(self):
246        md = ModelData()
247        md.add_data_file(currdir+"data6.dat")
248        model=Model()
249        model.A=Set()
250        try:
251            md.read(model)
252            self.fail("Expected IOError")
253        except IOError:
254            pass
255
256    def test_md9(self):
257        md = ModelData()
258        md.add_data_file(currdir+"data7.dat")
259        model=Model()
260        model.A=Set()
261        model.B=Param(model.A)
262        md.read(model)
263
264    def test_md10(self):
265        md = ModelData()
266        md.add_data_file(currdir+"data8.dat")
267        model=Model()
268        model.A=Param(within=Boolean)
269        model.B=Param(within=Boolean)
270        md.read(model)
271
272
273if __name__ == "__main__":
274   unittest.main()
275
Note: See TracBrowser for help on using the repository browser.