testgenie-py 0.2.9__tar.gz → 0.3.1__tar.gz

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.
Files changed (68) hide show
  1. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/PKG-INFO +1 -1
  2. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/pyproject.toml +1 -1
  3. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/ast_analyzer.py +0 -1
  4. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/controller/cli_controller.py +9 -0
  5. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/controller/docker_controller.py +9 -1
  6. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/doctest_generator.py +0 -1
  7. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/service.py +41 -1
  8. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/testgen.db +0 -0
  9. testgenie_py-0.2.9/testgen/generated_boolean.py +0 -48
  10. testgenie_py-0.2.9/testgen/generated_samplecodebin.py +0 -545
  11. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/README.md +0 -0
  12. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/__init__.py +0 -0
  13. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/__init__.py +0 -0
  14. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/contracts/__init__.py +0 -0
  15. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/contracts/contract.py +0 -0
  16. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/contracts/no_exception_contract.py +0 -0
  17. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/contracts/nonnull_contract.py +0 -0
  18. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/fuzz_analyzer.py +0 -0
  19. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/random_feedback_analyzer.py +0 -0
  20. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/reinforcement_analyzer.py +0 -0
  21. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/test_case_analyzer.py +0 -0
  22. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/analyzer/test_case_analyzer_context.py +0 -0
  23. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/controller/__init__.py +0 -0
  24. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/docker/Dockerfile +0 -0
  25. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/__init__.py +0 -0
  26. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/code_generator.py +0 -0
  27. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/generator.py +0 -0
  28. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/pytest_generator.py +0 -0
  29. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/test_generator.py +0 -0
  30. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/generator/unit_test_generator.py +0 -0
  31. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/inspector/__init__.py +0 -0
  32. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/inspector/inspector.py +0 -0
  33. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/main.py +0 -0
  34. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/models/__init__.py +0 -0
  35. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/models/analysis_context.py +0 -0
  36. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/models/function_metadata.py +0 -0
  37. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/models/generator_context.py +0 -0
  38. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/models/test_case.py +0 -0
  39. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/presentation/__init__.py +0 -0
  40. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/presentation/cli_view.py +0 -0
  41. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/reinforcement/__init__.py +0 -0
  42. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/reinforcement/abstract_state.py +0 -0
  43. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/reinforcement/agent.py +0 -0
  44. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/reinforcement/environment.py +0 -0
  45. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/reinforcement/statement_coverage_state.py +0 -0
  46. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/__init__.py +0 -0
  47. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/analysis_service.py +0 -0
  48. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/cfg_service.py +0 -0
  49. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/generator_service.py +0 -0
  50. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/service/logging_service.py +0 -0
  51. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/sqlite/__init__.py +0 -0
  52. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/sqlite/db.py +0 -0
  53. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/sqlite/db_service.py +0 -0
  54. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/tree/__init__.py +0 -0
  55. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/tree/node.py +0 -0
  56. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/tree/tree_utils.py +0 -0
  57. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/__init__.py +0 -0
  58. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/coverage_utils.py +0 -0
  59. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/coverage_visualizer.py +0 -0
  60. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/file_utils.py +0 -0
  61. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/randomizer.py +0 -0
  62. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/utils.py +0 -0
  63. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/__init__.py +0 -0
  64. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/ast_to_z3.py +0 -0
  65. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/branch_condition.py +0 -0
  66. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/constraint_extractor.py +0 -0
  67. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/variable_finder.py +0 -0
  68. {testgenie_py-0.2.9 → testgenie_py-0.3.1}/testgen/util/z3_utils/z3_test_case.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: testgenie-py
3
- Version: 0.2.9
3
+ Version: 0.3.1
4
4
  Summary: Automated unit test generation tool for Python.
5
5
  Author: cjseitz
6
6
  Author-email: charlesjseitz@gmail.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "testgenie-py"
3
- version = "0.2.9"
3
+ version = "0.3.1"
4
4
  description = "Automated unit test generation tool for Python."
5
5
  authors = ["cjseitz <charlesjseitz@gmail.com>"]
6
6
  readme = "README.md"
@@ -56,7 +56,6 @@ class ASTAnalyzer(TestCaseAnalyzerStrategy, ABC):
56
56
  generated_file = function_metadata.filename
57
57
  module = testgen.util.file_utils.load_module(generated_file)
58
58
 
59
- # Check if we're dealing with a class
60
59
  if function_metadata.class_name:
61
60
  cls = getattr(module, function_metadata.class_name)
62
61
  instance = cls()
@@ -46,6 +46,10 @@ class CLIController:
46
46
  print(f"Querying database for file: {args.file_path}")
47
47
  self.service.query_test_file_data(args.file_path)
48
48
  return
49
+
50
+ if args.coverage:
51
+ self.service.get_coverage(args.file_path)
52
+ return
49
53
 
50
54
  running_in_docker = os.environ.get("RUNNING_IN_DOCKER") is not None
51
55
  if running_in_docker:
@@ -159,6 +163,11 @@ class CLIController:
159
163
  type=str,
160
164
  help="Path to log file (if not specified, logs will only go to console)"
161
165
  )
166
+ parser.add_argument(
167
+ "-c", "--coverage",
168
+ action="store_true",
169
+ help="Run coverage analysis on the generated tests"
170
+ )
162
171
  return parser
163
172
 
164
173
  def set_test_format(self, args: argparse.Namespace):
@@ -35,12 +35,20 @@ class DockerController:
35
35
 
36
36
  # Check if Docker image exists, build it if not
37
37
  image_name = "testgen-runner"
38
- # If args.safe is set to false it means the image was not found and the system will try to run_locally
39
38
  self.get_image(docker_client, image_name, project_root)
40
39
  if not self.args.safe:
41
40
  self.logger.info("Docker image not found. Running locally...")
42
41
  return False
43
42
 
43
+ src_path = os.path.abspath(args.file_path)
44
+ dest_path = os.path.join(project_root, os.path.basename(src_path))
45
+ try:
46
+ shutil.copy(src_path, dest_path)
47
+ self.logger.debug(f"Copied file from {src_path} to {dest_path}")
48
+ except Exception as e:
49
+ self.logger.error(f"Failed to copy file: {e}")
50
+ sys.exit(1)
51
+
44
52
  docker_args = [args.file_path] + [arg for arg in sys.argv[2:] if arg != "--safe"]
45
53
  docker_args[0] = f"/controller/testgen/code_to_test/{os.path.basename(docker_args[0])}"
46
54
 
@@ -9,7 +9,6 @@ class DocTestGenerator(TestGenerator):
9
9
  def __init__(self, generator_context: GeneratorContext):
10
10
  super().__init__(generator_context)
11
11
 
12
- # Implementing abstract methods from TestGenerator
13
12
  def generate_test_header(self):
14
13
  pass
15
14
 
@@ -8,6 +8,8 @@ import sqlite3
8
8
  import sys
9
9
  import time
10
10
  import subprocess
11
+
12
+ import coverage
11
13
  import testgen.util.coverage_utils as coverage_utils
12
14
  from types import ModuleType
13
15
  from typing import List
@@ -155,7 +157,15 @@ class Service:
155
157
 
156
158
  try:
157
159
  if self.test_format == UNITTEST_FORMAT:
158
- self.execute_and_store_unittest(file_path_to_use, test_file)
160
+ subprocess.run(["python", "-m", "coverage", "run", "--source=.", "-m", "unittest", test_file], check=True)
161
+ result = subprocess.run(
162
+ ["python", "-m", "coverage", "report", file_path_to_use],
163
+ check=True,
164
+ capture_output=True,
165
+ text=True
166
+ )
167
+ coverage_output = result.stdout
168
+ print(coverage_output)
159
169
  elif self.test_format == PYTEST_FORMAT:
160
170
  self.execute_and_store_pytest(test_file)
161
171
  elif self.test_format == DOCTEST_FORMAT:
@@ -305,6 +315,36 @@ class Service:
305
315
  """Create an analysis context for the given file."""
306
316
  return self.analysis_service.create_analysis_context(filepath)
307
317
 
318
+ def get_coverage(self, file_path: str):
319
+ """
320
+ Use the coverage library to calculate and print the coverage for the specified Python file.
321
+ Dynamically determine the source directory based on the file being tested.
322
+ """
323
+ # Dynamically determine the source directory
324
+ source_dir = os.path.dirname(file_path)
325
+ cov = coverage.Coverage(source=[source_dir]) # Use the directory of the file as the source
326
+ cov.start()
327
+
328
+ try:
329
+ # Dynamically import and execute the specified file
330
+ file_name = os.path.basename(file_path)
331
+ module_name = file_name.rstrip(".py")
332
+ spec = importlib.util.spec_from_file_location(module_name, file_path)
333
+ module = importlib.util.module_from_spec(spec)
334
+ spec.loader.exec_module(module)
335
+
336
+ except Exception as e:
337
+ print(f"Error while executing the file: {e}")
338
+ return
339
+
340
+ finally:
341
+ cov.stop()
342
+ cov.save()
343
+
344
+ # Report the coverage
345
+ print(f"Coverage report for {file_path}:")
346
+ cov.report(file=sys.stdout)
347
+
308
348
  @staticmethod
309
349
  def wait_for_file(file_path, retries=5, delay=1):
310
350
  """Wait for the generated file to appear."""
@@ -1,48 +0,0 @@
1
- def bin_and(a: bool, b: bool):
2
- if a == True:
3
- if b == True:
4
- return True
5
- else:
6
- return False
7
- else:
8
- if b == True:
9
- return False
10
- else:
11
- return False
12
-
13
- def bin_xor(a: bool, b: bool):
14
- if a == True:
15
- if b == True:
16
- return False
17
- else:
18
- return True
19
- else:
20
- if b == True:
21
- return True
22
- else:
23
- return False
24
-
25
- def status_flags(active: bool, verified: bool, admin: bool):
26
- if active == True:
27
- if verified == True:
28
- if admin == True:
29
- return 'admin-verified'
30
- else:
31
- return 'user-verified'
32
- else:
33
- if admin == True:
34
- return 'admin-unverified'
35
- else:
36
- return 'user-unverified'
37
- else:
38
- if verified == True:
39
- if admin == True:
40
- return 'admin-verified'
41
- else:
42
- return 'inactive'
43
- else:
44
- if admin == True:
45
- return 'admin-unverified'
46
- else:
47
- return 'inactive'
48
-
@@ -1,545 +0,0 @@
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
-
File without changes