testgenie-py 0.2.1__py3-none-any.whl → 0.2.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- testgen/analyzer/random_feedback_analyzer.py +344 -114
- testgen/controller/cli_controller.py +5 -10
- testgen/generated_samplecodebin.py +545 -0
- testgen/generator/code_generator.py +36 -18
- testgen/reinforcement/environment.py +1 -1
- testgen/service/generator_service.py +16 -1
- testgen/service/service.py +124 -32
- testgen/sqlite/db_service.py +22 -2
- testgen/util/coverage_utils.py +35 -0
- testgen/util/randomizer.py +29 -12
- testgenie_py-0.2.3.dist-info/METADATA +139 -0
- {testgenie_py-0.2.1.dist-info → testgenie_py-0.2.3.dist-info}/RECORD +14 -28
- testgen/.coverage +0 -0
- testgen/code_to_test/__init__.py +0 -0
- testgen/code_to_test/boolean.py +0 -146
- testgen/code_to_test/calculator.py +0 -29
- testgen/code_to_test/code_to_fuzz.py +0 -234
- testgen/code_to_test/code_to_fuzz_lite.py +0 -397
- testgen/code_to_test/decisions.py +0 -57
- testgen/code_to_test/math_utils.py +0 -47
- testgen/code_to_test/no_types.py +0 -35
- testgen/code_to_test/sample_code_bin.py +0 -141
- testgen/q_table/global_q_table.json +0 -1
- testgen/testgen.db +0 -0
- testgen/tests/__init__.py +0 -0
- testgen/tests/test_boolean.py +0 -69
- testgen/tests/test_decisions.py +0 -195
- testgenie_py-0.2.1.dist-info/METADATA +0 -26
- {testgenie_py-0.2.1.dist-info → testgenie_py-0.2.3.dist-info}/WHEEL +0 -0
- {testgenie_py-0.2.1.dist-info → testgenie_py-0.2.3.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,545 @@
|
|
1
|
+
class GeneratedSampleCodeBin:
|
2
|
+
def bin_and(self, a: bool, b: bool):
|
3
|
+
"""
|
4
|
+
>>> GeneratedSampleCodeBin().bin_and(True, True)
|
5
|
+
True
|
6
|
+
|
7
|
+
>>> GeneratedSampleCodeBin().bin_and(True, False)
|
8
|
+
False
|
9
|
+
|
10
|
+
>>> GeneratedSampleCodeBin().bin_and(False, True)
|
11
|
+
False
|
12
|
+
"""
|
13
|
+
if a == True:
|
14
|
+
if b == True:
|
15
|
+
return True
|
16
|
+
else:
|
17
|
+
return False
|
18
|
+
else:
|
19
|
+
if b == True:
|
20
|
+
return False
|
21
|
+
else:
|
22
|
+
return False
|
23
|
+
|
24
|
+
|
25
|
+
def bin_and_bad(self, a: bool, b: bool):
|
26
|
+
"""
|
27
|
+
>>> GeneratedSampleCodeBin().bin_and_bad(True, True)
|
28
|
+
True
|
29
|
+
|
30
|
+
>>> GeneratedSampleCodeBin().bin_and_bad(True, False)
|
31
|
+
True
|
32
|
+
|
33
|
+
>>> GeneratedSampleCodeBin().bin_and_bad(False, True)
|
34
|
+
True
|
35
|
+
"""
|
36
|
+
if a == True:
|
37
|
+
if b == True:
|
38
|
+
return True
|
39
|
+
else:
|
40
|
+
return True
|
41
|
+
else:
|
42
|
+
if b == True:
|
43
|
+
return True
|
44
|
+
else:
|
45
|
+
return False
|
46
|
+
|
47
|
+
|
48
|
+
def bin_nand(self, a: bool, b: bool):
|
49
|
+
"""
|
50
|
+
>>> GeneratedSampleCodeBin().bin_nand(True, True)
|
51
|
+
False
|
52
|
+
|
53
|
+
>>> GeneratedSampleCodeBin().bin_nand(True, False)
|
54
|
+
True
|
55
|
+
|
56
|
+
>>> GeneratedSampleCodeBin().bin_nand(False, True)
|
57
|
+
True
|
58
|
+
"""
|
59
|
+
if a == True:
|
60
|
+
if b == True:
|
61
|
+
return False
|
62
|
+
else:
|
63
|
+
return True
|
64
|
+
else:
|
65
|
+
if b == True:
|
66
|
+
return True
|
67
|
+
else:
|
68
|
+
return True
|
69
|
+
|
70
|
+
|
71
|
+
def bin_nor(self, a: bool, b: bool):
|
72
|
+
"""
|
73
|
+
>>> GeneratedSampleCodeBin().bin_nor(True, True)
|
74
|
+
False
|
75
|
+
|
76
|
+
>>> GeneratedSampleCodeBin().bin_nor(True, False)
|
77
|
+
False
|
78
|
+
|
79
|
+
>>> GeneratedSampleCodeBin().bin_nor(False, True)
|
80
|
+
False
|
81
|
+
"""
|
82
|
+
if a == True:
|
83
|
+
if b == True:
|
84
|
+
return False
|
85
|
+
else:
|
86
|
+
return False
|
87
|
+
else:
|
88
|
+
if b == True:
|
89
|
+
return False
|
90
|
+
else:
|
91
|
+
return True
|
92
|
+
|
93
|
+
|
94
|
+
def bin_or(self, a: bool, b: bool):
|
95
|
+
"""
|
96
|
+
>>> GeneratedSampleCodeBin().bin_or(True, True)
|
97
|
+
True
|
98
|
+
|
99
|
+
>>> GeneratedSampleCodeBin().bin_or(True, False)
|
100
|
+
True
|
101
|
+
|
102
|
+
>>> GeneratedSampleCodeBin().bin_or(False, True)
|
103
|
+
True
|
104
|
+
"""
|
105
|
+
if a == True:
|
106
|
+
if b == True:
|
107
|
+
return True
|
108
|
+
else:
|
109
|
+
return True
|
110
|
+
else:
|
111
|
+
if b == True:
|
112
|
+
return True
|
113
|
+
else:
|
114
|
+
return False
|
115
|
+
|
116
|
+
|
117
|
+
def bin_or_bad(self, a: bool, b: bool):
|
118
|
+
"""
|
119
|
+
>>> GeneratedSampleCodeBin().bin_or_bad(True, True)
|
120
|
+
False
|
121
|
+
|
122
|
+
>>> GeneratedSampleCodeBin().bin_or_bad(True, False)
|
123
|
+
False
|
124
|
+
|
125
|
+
>>> GeneratedSampleCodeBin().bin_or_bad(False, True)
|
126
|
+
False
|
127
|
+
"""
|
128
|
+
if a == True:
|
129
|
+
if b == True:
|
130
|
+
return False
|
131
|
+
else:
|
132
|
+
return False
|
133
|
+
else:
|
134
|
+
if b == True:
|
135
|
+
return False
|
136
|
+
else:
|
137
|
+
return True
|
138
|
+
|
139
|
+
|
140
|
+
def bin_xor(self, a: bool, b: bool):
|
141
|
+
"""
|
142
|
+
>>> GeneratedSampleCodeBin().bin_xor(True, True)
|
143
|
+
False
|
144
|
+
|
145
|
+
>>> GeneratedSampleCodeBin().bin_xor(True, False)
|
146
|
+
True
|
147
|
+
|
148
|
+
>>> GeneratedSampleCodeBin().bin_xor(False, True)
|
149
|
+
True
|
150
|
+
"""
|
151
|
+
if a == True:
|
152
|
+
if b == True:
|
153
|
+
return False
|
154
|
+
else:
|
155
|
+
return True
|
156
|
+
else:
|
157
|
+
if b == True:
|
158
|
+
return True
|
159
|
+
else:
|
160
|
+
return False
|
161
|
+
|
162
|
+
|
163
|
+
def mux(self, c1: bool, c2: bool, x0: bool, x1: bool, x2: bool, x3: bool):
|
164
|
+
"""
|
165
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, True, True, True)
|
166
|
+
True
|
167
|
+
|
168
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, True, True, False)
|
169
|
+
True
|
170
|
+
|
171
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, True, False, True)
|
172
|
+
True
|
173
|
+
|
174
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, True, False, False)
|
175
|
+
True
|
176
|
+
|
177
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, False, True, True)
|
178
|
+
True
|
179
|
+
|
180
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, False, True, False)
|
181
|
+
True
|
182
|
+
|
183
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, False, False, True)
|
184
|
+
True
|
185
|
+
|
186
|
+
>>> GeneratedSampleCodeBin().mux(True, True, True, False, False, False)
|
187
|
+
True
|
188
|
+
|
189
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, True, True, True)
|
190
|
+
False
|
191
|
+
|
192
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, True, True, False)
|
193
|
+
False
|
194
|
+
|
195
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, True, False, True)
|
196
|
+
False
|
197
|
+
|
198
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, True, False, False)
|
199
|
+
False
|
200
|
+
|
201
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, False, True, True)
|
202
|
+
False
|
203
|
+
|
204
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, False, True, False)
|
205
|
+
False
|
206
|
+
|
207
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, False, False, True)
|
208
|
+
False
|
209
|
+
|
210
|
+
>>> GeneratedSampleCodeBin().mux(True, True, False, False, False, False)
|
211
|
+
False
|
212
|
+
|
213
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, True, True, True)
|
214
|
+
True
|
215
|
+
|
216
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, True, True, False)
|
217
|
+
True
|
218
|
+
|
219
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, True, False, True)
|
220
|
+
True
|
221
|
+
|
222
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, True, False, False)
|
223
|
+
True
|
224
|
+
|
225
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, False, True, True)
|
226
|
+
False
|
227
|
+
|
228
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, False, True, False)
|
229
|
+
False
|
230
|
+
|
231
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, False, False, True)
|
232
|
+
False
|
233
|
+
|
234
|
+
>>> GeneratedSampleCodeBin().mux(True, False, True, False, False, False)
|
235
|
+
False
|
236
|
+
|
237
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, True, True, True)
|
238
|
+
True
|
239
|
+
|
240
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, True, True, False)
|
241
|
+
True
|
242
|
+
|
243
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, True, False, True)
|
244
|
+
True
|
245
|
+
|
246
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, True, False, False)
|
247
|
+
True
|
248
|
+
|
249
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, False, True, True)
|
250
|
+
False
|
251
|
+
|
252
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, False, True, False)
|
253
|
+
False
|
254
|
+
|
255
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, False, False, True)
|
256
|
+
False
|
257
|
+
|
258
|
+
>>> GeneratedSampleCodeBin().mux(True, False, False, False, False, False)
|
259
|
+
False
|
260
|
+
|
261
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, True, True, True)
|
262
|
+
True
|
263
|
+
|
264
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, True, True, False)
|
265
|
+
True
|
266
|
+
|
267
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, True, False, True)
|
268
|
+
False
|
269
|
+
|
270
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, True, False, False)
|
271
|
+
False
|
272
|
+
|
273
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, False, True, True)
|
274
|
+
True
|
275
|
+
|
276
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, False, True, False)
|
277
|
+
True
|
278
|
+
|
279
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, False, False, True)
|
280
|
+
False
|
281
|
+
|
282
|
+
>>> GeneratedSampleCodeBin().mux(False, True, True, False, False, False)
|
283
|
+
False
|
284
|
+
|
285
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, True, True, True)
|
286
|
+
True
|
287
|
+
|
288
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, True, True, False)
|
289
|
+
True
|
290
|
+
|
291
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, True, False, True)
|
292
|
+
False
|
293
|
+
|
294
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, True, False, False)
|
295
|
+
False
|
296
|
+
|
297
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, False, True, True)
|
298
|
+
True
|
299
|
+
|
300
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, False, True, False)
|
301
|
+
True
|
302
|
+
|
303
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, False, False, True)
|
304
|
+
False
|
305
|
+
|
306
|
+
>>> GeneratedSampleCodeBin().mux(False, True, False, False, False, False)
|
307
|
+
False
|
308
|
+
|
309
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, True, True, True)
|
310
|
+
True
|
311
|
+
|
312
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, True, True, False)
|
313
|
+
False
|
314
|
+
|
315
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, True, False, True)
|
316
|
+
True
|
317
|
+
|
318
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, True, False, False)
|
319
|
+
False
|
320
|
+
|
321
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, False, True, True)
|
322
|
+
True
|
323
|
+
|
324
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, False, True, False)
|
325
|
+
False
|
326
|
+
|
327
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, False, False, True)
|
328
|
+
True
|
329
|
+
|
330
|
+
>>> GeneratedSampleCodeBin().mux(False, False, True, False, False, False)
|
331
|
+
False
|
332
|
+
|
333
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, True, True, True)
|
334
|
+
True
|
335
|
+
|
336
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, True, True, False)
|
337
|
+
False
|
338
|
+
|
339
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, True, False, True)
|
340
|
+
True
|
341
|
+
|
342
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, True, False, False)
|
343
|
+
False
|
344
|
+
|
345
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, False, True, True)
|
346
|
+
True
|
347
|
+
|
348
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, False, True, False)
|
349
|
+
False
|
350
|
+
|
351
|
+
>>> GeneratedSampleCodeBin().mux(False, False, False, False, False, True)
|
352
|
+
True
|
353
|
+
"""
|
354
|
+
if c1 == True:
|
355
|
+
if c2 == True:
|
356
|
+
if x0 == True:
|
357
|
+
if x1 == True:
|
358
|
+
if x2 == True:
|
359
|
+
if x3 == True:
|
360
|
+
return True
|
361
|
+
else:
|
362
|
+
return True
|
363
|
+
else:
|
364
|
+
if x3 == True:
|
365
|
+
return True
|
366
|
+
else:
|
367
|
+
return True
|
368
|
+
else:
|
369
|
+
if x2 == True:
|
370
|
+
if x3 == True:
|
371
|
+
return True
|
372
|
+
else:
|
373
|
+
return True
|
374
|
+
else:
|
375
|
+
if x3 == True:
|
376
|
+
return True
|
377
|
+
else:
|
378
|
+
return True
|
379
|
+
else:
|
380
|
+
if x1 == True:
|
381
|
+
if x2 == True:
|
382
|
+
if x3 == True:
|
383
|
+
return False
|
384
|
+
else:
|
385
|
+
return False
|
386
|
+
else:
|
387
|
+
if x3 == True:
|
388
|
+
return False
|
389
|
+
else:
|
390
|
+
return False
|
391
|
+
else:
|
392
|
+
if x2 == True:
|
393
|
+
if x3 == True:
|
394
|
+
return False
|
395
|
+
else:
|
396
|
+
return False
|
397
|
+
else:
|
398
|
+
if x3 == True:
|
399
|
+
return False
|
400
|
+
else:
|
401
|
+
return False
|
402
|
+
else:
|
403
|
+
if x0 == True:
|
404
|
+
if x1 == True:
|
405
|
+
if x2 == True:
|
406
|
+
if x3 == True:
|
407
|
+
return True
|
408
|
+
else:
|
409
|
+
return True
|
410
|
+
else:
|
411
|
+
if x3 == True:
|
412
|
+
return True
|
413
|
+
else:
|
414
|
+
return True
|
415
|
+
else:
|
416
|
+
if x2 == True:
|
417
|
+
if x3 == True:
|
418
|
+
return False
|
419
|
+
else:
|
420
|
+
return False
|
421
|
+
else:
|
422
|
+
if x3 == True:
|
423
|
+
return False
|
424
|
+
else:
|
425
|
+
return False
|
426
|
+
else:
|
427
|
+
if x1 == True:
|
428
|
+
if x2 == True:
|
429
|
+
if x3 == True:
|
430
|
+
return True
|
431
|
+
else:
|
432
|
+
return True
|
433
|
+
else:
|
434
|
+
if x3 == True:
|
435
|
+
return True
|
436
|
+
else:
|
437
|
+
return True
|
438
|
+
else:
|
439
|
+
if x2 == True:
|
440
|
+
if x3 == True:
|
441
|
+
return False
|
442
|
+
else:
|
443
|
+
return False
|
444
|
+
else:
|
445
|
+
if x3 == True:
|
446
|
+
return False
|
447
|
+
else:
|
448
|
+
return False
|
449
|
+
else:
|
450
|
+
if c2 == True:
|
451
|
+
if x0 == True:
|
452
|
+
if x1 == True:
|
453
|
+
if x2 == True:
|
454
|
+
if x3 == True:
|
455
|
+
return True
|
456
|
+
else:
|
457
|
+
return True
|
458
|
+
else:
|
459
|
+
if x3 == True:
|
460
|
+
return False
|
461
|
+
else:
|
462
|
+
return False
|
463
|
+
else:
|
464
|
+
if x2 == True:
|
465
|
+
if x3 == True:
|
466
|
+
return True
|
467
|
+
else:
|
468
|
+
return True
|
469
|
+
else:
|
470
|
+
if x3 == True:
|
471
|
+
return False
|
472
|
+
else:
|
473
|
+
return False
|
474
|
+
else:
|
475
|
+
if x1 == True:
|
476
|
+
if x2 == True:
|
477
|
+
if x3 == True:
|
478
|
+
return True
|
479
|
+
else:
|
480
|
+
return True
|
481
|
+
else:
|
482
|
+
if x3 == True:
|
483
|
+
return False
|
484
|
+
else:
|
485
|
+
return False
|
486
|
+
else:
|
487
|
+
if x2 == True:
|
488
|
+
if x3 == True:
|
489
|
+
return True
|
490
|
+
else:
|
491
|
+
return True
|
492
|
+
else:
|
493
|
+
if x3 == True:
|
494
|
+
return False
|
495
|
+
else:
|
496
|
+
return False
|
497
|
+
else:
|
498
|
+
if x0 == True:
|
499
|
+
if x1 == True:
|
500
|
+
if x2 == True:
|
501
|
+
if x3 == True:
|
502
|
+
return True
|
503
|
+
else:
|
504
|
+
return False
|
505
|
+
else:
|
506
|
+
if x3 == True:
|
507
|
+
return True
|
508
|
+
else:
|
509
|
+
return False
|
510
|
+
else:
|
511
|
+
if x2 == True:
|
512
|
+
if x3 == True:
|
513
|
+
return True
|
514
|
+
else:
|
515
|
+
return False
|
516
|
+
else:
|
517
|
+
if x3 == True:
|
518
|
+
return True
|
519
|
+
else:
|
520
|
+
return False
|
521
|
+
else:
|
522
|
+
if x1 == True:
|
523
|
+
if x2 == True:
|
524
|
+
if x3 == True:
|
525
|
+
return True
|
526
|
+
else:
|
527
|
+
return False
|
528
|
+
else:
|
529
|
+
if x3 == True:
|
530
|
+
return True
|
531
|
+
else:
|
532
|
+
return False
|
533
|
+
else:
|
534
|
+
if x2 == True:
|
535
|
+
if x3 == True:
|
536
|
+
return True
|
537
|
+
else:
|
538
|
+
return False
|
539
|
+
else:
|
540
|
+
if x3 == True:
|
541
|
+
return True
|
542
|
+
else:
|
543
|
+
return False
|
544
|
+
|
545
|
+
|
@@ -1,11 +1,41 @@
|
|
1
|
-
from typing import List
|
1
|
+
from typing import List, Dict
|
2
|
+
import inspect
|
3
|
+
import ast
|
4
|
+
import astor
|
2
5
|
from testgen.tree.node import Node
|
3
6
|
|
4
7
|
class CodeGenerator:
|
5
8
|
def __init__(self):
|
6
9
|
pass
|
7
|
-
|
8
|
-
def
|
10
|
+
|
11
|
+
def is_all_boolean_params(self, param_types: Dict[str, str]) -> bool:
|
12
|
+
"""Check if all parameters are boolean type."""
|
13
|
+
if not param_types:
|
14
|
+
return False
|
15
|
+
|
16
|
+
for param_type in param_types.values():
|
17
|
+
if param_type != 'bool':
|
18
|
+
return False
|
19
|
+
return True
|
20
|
+
|
21
|
+
def get_original_function_source(self, func_obj) -> str:
|
22
|
+
"""Extract the original source code of the function."""
|
23
|
+
try:
|
24
|
+
# Get the source code as a string
|
25
|
+
source = inspect.getsource(func_obj)
|
26
|
+
return source
|
27
|
+
except (IOError, TypeError) as e:
|
28
|
+
print(f"Error getting source: {e}")
|
29
|
+
return None
|
30
|
+
|
31
|
+
def generate_code_from_tree(self, func_name: str, root: Node, params: List[str], operation, is_class_method: bool, param_types: Dict[str, str] = None) -> str:
|
32
|
+
# If we have param types and not all are boolean, extract the original source
|
33
|
+
if param_types and not self.is_all_boolean_params(param_types):
|
34
|
+
original_source = self.get_original_function_source(operation)
|
35
|
+
if original_source:
|
36
|
+
return original_source
|
37
|
+
|
38
|
+
# The existing tree-based generation for boolean params
|
9
39
|
def traverse(node, depth, path=[], indent_level=1):
|
10
40
|
base_indent = " " * indent_level
|
11
41
|
|
@@ -38,9 +68,9 @@ class CodeGenerator:
|
|
38
68
|
typed_param_list.append("self")
|
39
69
|
|
40
70
|
for param in params:
|
41
|
-
|
71
|
+
param_type = param_types.get(param, 'bool') if param_types else 'bool'
|
72
|
+
typed_param_list.append(f"{param}: {param_type}")
|
42
73
|
|
43
|
-
#TODO: Change this so it only adds self to classes rather than scripts
|
44
74
|
function_code = f"def {func_name}({', '.join(typed_param_list)}):\n"
|
45
75
|
body_code = traverse(root, 0)
|
46
76
|
|
@@ -51,16 +81,4 @@ class CodeGenerator:
|
|
51
81
|
file_path = f"generated_{class_name.lower()}.py"
|
52
82
|
class_file = open(f"{file_path}", "w")
|
53
83
|
class_file.write(f"class {branched_class_name}:\n")
|
54
|
-
return class_file
|
55
|
-
|
56
|
-
"""def generate_all_functions_code(self, class_name, operation):
|
57
|
-
functions = self.inspect_class(class_name)
|
58
|
-
trees = self.build_func_trees(functions)
|
59
|
-
all_functions_code = {}
|
60
|
-
|
61
|
-
for func, root, params in trees:
|
62
|
-
code = self.generate_code_from_tree(root, params, operation)
|
63
|
-
all_functions_code[func.__name__] = code
|
64
|
-
print(f"Generated code for function '{func.__name__}':\n{code}\n")
|
65
|
-
|
66
|
-
return all_functions_code"""
|
84
|
+
return class_file
|
@@ -35,7 +35,7 @@ class ReinforcementEnvironment:
|
|
35
35
|
if action == "add":
|
36
36
|
self.test_cases.append(randomizer.new_random_test_case(self.file_name, self.class_name, self.fut))
|
37
37
|
elif action == "merge" and len(self.test_cases) > 1:
|
38
|
-
self.test_cases.append(randomizer.combine_cases(self.test_cases))
|
38
|
+
self.test_cases.append(randomizer.combine_cases(self.module, self.test_cases))
|
39
39
|
elif action == "remove" and len(self.test_cases) > 1:
|
40
40
|
self.test_cases = randomizer.remove_case(self.test_cases)
|
41
41
|
elif action == "z3":
|
@@ -150,7 +150,22 @@ class GeneratorService:
|
|
150
150
|
with open(self.generated_file_path, "a") as file:
|
151
151
|
for func, root, params in trees:
|
152
152
|
is_class_method = True if class_name else False
|
153
|
-
|
153
|
+
|
154
|
+
# Get parameter types
|
155
|
+
param_types = {}
|
156
|
+
sig = inspect.signature(func)
|
157
|
+
for param_name, param in sig.parameters.items():
|
158
|
+
if param_name != 'self': # Skip self for class methods
|
159
|
+
# Extract type annotation if available
|
160
|
+
if param.annotation != inspect.Parameter.empty:
|
161
|
+
param_types[param_name] = param.annotation.__name__
|
162
|
+
else:
|
163
|
+
param_types[param_name] = 'object' # Default to object if no annotation
|
164
|
+
|
165
|
+
code = self.code_generator.generate_code_from_tree(
|
166
|
+
func.__name__, root, params, func, is_class_method, param_types
|
167
|
+
)
|
168
|
+
|
154
169
|
if class_name:
|
155
170
|
for line in code.split("\n"):
|
156
171
|
file.write(f" {line}\n")
|