Menu

[r1]: / test.py  Maximize  Restore  History

Download this file

233 lines (205 with data), 6.1 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
import unittest
import embedc
import ctypes
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
pass
def test_embed_return(self):
r = embedc.inline_c_precompile("""
return 15;
""")
self.assertEqual(r, 15)
r = embedc.inline_c_precompile("""
return -10;
""")
self.assertEqual(r, -10)
def test_embed_integers(self):
test1=9
global test2
test2=11
r = embedc.inline_c_precompile("""
IMPORT int test1
IMPORT int &test2
if (test1 != 9) {
return 1;
}
if (test2 != 11) {
return 2;
}
test2 = 99;
return 0;
""")
self.assertEqual(r, 0)
self.assertEqual(test2, 99)
def test_embed_local(self):
test1=9
a=[2,4,6]
b=(9,10,11)
r = embedc.inline_c_precompile("""
IMPORT int &test1
IMPORT int* a
IMPORT int* b
if (test1 != 9) {
return 1;
}
test1 = 99;
a[0] = 10;
b[0]=50;
return 0;
""")
self.assertEqual(r, 0)
self.assertEqual(test1, 9)
self.assertEqual(a[0], 2)
def test_embed_tuple(self):
global arrayb
arrayb=(9,10,11)
r = embedc.inline_c_precompile("""
IMPORT int* arrayb
arrayb[0]=15;
""")
self.assertEqual(arrayb[0], 9)
def test_embed_doubles(self):
test1=9.9
global test2
test2=11.1
r = embedc.inline_c_precompile("""
IMPORT double test1
IMPORT double &test2
if (test1 != 9.9) {
return 1;
}
if (test2 != 11.1) {
return 2;
}
test2 = 99.9;
return 0;
""")
self.assertEqual(r, 0)
self.assertEqual(test2, 99.9)
def test_embed_array(self):
global test1
test1=[5,10,15]
r = embedc.inline_c_precompile("""
IMPORT int* test1
if (test1[0] != 5) return 1;
if (test1[1] != 10) return 2;
if (test1[2] != 15) return 3;
test1[0]=4;
test1[1]=6;
test1[2]=8;
return 0;
""")
self.assertEqual(r, 0)
self.assertEqual(test1[0], 4)
self.assertEqual(test1[1], 6)
self.assertEqual(test1[2], 8)
def test_embed_string(self):
strtest1="x"
global strtest2
strtest2="one two"
r = embedc.inline_c_precompile("""
GLOBAL char *savstr;
IMPORT string strtest1;
IMPORT string &strtest2;
if (strcmp(strtest1, "x")!=0) return 1;
if (strcmp(strtest2, "one two")!=0) return 2;
strtest1 = "junk";
savstr=strdup("five six");
strtest2 = savstr;
return 0;
""")
self.assertEqual(r, 0)
self.assertEqual(strtest1, "x")
self.assertEqual(strtest2, "five six")
def test_embed_ex_embed(self):
fxlib = embedc.embed_c("""
int val() { return %d; }
""" % 8)
r = fxlib.val()
self.assertEqual(r, 8)
def test_embed_directives(self):
r = embedc.inline_c_precompile("""
GLOBAL int globalx;
CC --version
#include <math.h>
return 4;
POST globalx=3;
""")
self.assertEqual(r, 4)
r = embedc.inline_c_precompile("""
return globalx;
""")
self.assertEqual(r, 3)
def test_embed_return(self):
r = embedc.inline_c_precompile("""
RETURN double 4.5;
""")
self.assertEqual(r, 4.5)
def test_embed_failcc(self):
try:
fxlib = embedc.embed_c("""
xxxint val() { return 1; }
""")
ok = 0
except:
ok = 1
self.assertEqual(ok, 1)
def test_embed_xgcc1(self):
try:
r = embedc.EmbedCompile().testgcc()
except:
r = False
self.assertEqual(r, True)
def test_embed_xgcc2(self):
try:
ret = 1
ret = embedc.EmbedCompile().testgcc("cat", "no-file-here")
r = True
except:
r = False
self.assertNotEqual(ret, 0)
self.assertEqual(r, False)
def test_embed_xgcc3(self):
try:
embedc.EmbedCompile().testgcc("xxgcc")
ok = 0
except:
ok = 1
self.assertEqual(ok, 1)
def test_embed_ex_inline(self):
r = embedc.inline_c("""
return %d;
""" % 4)
self.assertEqual(r, 4)
def test_embed_ex(self):
fxlib = embedc.embed_c_precompile("""
int multval(int x1, int y1) {
return x1*y1;
}
char* myval2(char *x) {
return "Ho ho ho";
}
int alterint(int &x) {
x = 7;
return 3;
}
int chgval(int *x) {
x[0] = 10;
x[1] = 15;
x[2] = 20;
return 10;
}
""")
self.assertEqual(fxlib.multval(5,6), 30)
fxlib.myval2.restype = ctypes.c_char_p
self.assertEqual(fxlib.myval2("test nothing"), "Ho ho ho")
cy=ctypes.c_int(5)
fxlib.alterint(ctypes.byref(cy))
self.assertEqual(cy.value, 7)
cx=(ctypes.c_int * 3)()
fxlib.chgval(cx)
self.assertEqual(cx[0], 10)
self.assertEqual(cx[1], 15)
self.assertEqual(cx[2], 20)
if __name__ == '__main__':
unittest.main()