@@ -117,7 +117,7 @@ def test_terminates_shrinks(n, monkeypatch):
117
117
db = InMemoryExampleDatabase ()
118
118
119
119
def generate_new_examples (self ):
120
- self .cached_test_function ([ 255 ] * 1000 )
120
+ self .cached_test_function_ir ( ir ( 255 ) * 1000 )
121
121
122
122
monkeypatch .setattr (
123
123
ConjectureRunner , "generate_new_examples" , generate_new_examples
@@ -514,11 +514,11 @@ def __repr__(self):
514
514
515
515
516
516
def test_debug_data (capsys ):
517
- buf = [ 0 , 1 , 2 ]
517
+ nodes = ir ( 0 , 1 , 2 )
518
518
519
519
def f (data ):
520
- for x in bytes ( buf ) :
521
- if data .draw (st .integers (0 , 100 )) != x :
520
+ for node in nodes :
521
+ if data .draw (st .integers (0 , 100 )) != node . value :
522
522
data .mark_invalid ()
523
523
data .start_example (1 )
524
524
data .stop_example ()
@@ -533,7 +533,7 @@ def f(data):
533
533
verbosity = Verbosity .debug ,
534
534
),
535
535
)
536
- runner .cached_test_function ( buf )
536
+ runner .cached_test_function_ir ( nodes )
537
537
runner .run ()
538
538
539
539
out , _ = capsys .readouterr ()
@@ -569,12 +569,12 @@ def f(data):
569
569
570
570
571
571
@pytest .mark .parametrize ("skip_target" , [False , True ])
572
- @pytest .mark .parametrize ("initial_attempt" , [127 , 128 ])
572
+ @pytest .mark .parametrize ("initial_attempt" , [ir ( 127 , 128 ) ])
573
573
def test_clears_out_its_database_on_shrinking (
574
574
initial_attempt , skip_target , monkeypatch
575
575
):
576
576
def generate_new_examples (self ):
577
- self .cached_test_function (initial_attempt )
577
+ self .cached_test_function_ir (initial_attempt )
578
578
579
579
monkeypatch .setattr (
580
580
ConjectureRunner , "generate_new_examples" , generate_new_examples
@@ -615,16 +615,16 @@ def f(data):
615
615
616
616
runner = ConjectureRunner (f , settings = settings (database = None ))
617
617
r = runner .cached_test_function (bytes (8 ))
618
- assert r .status == Status .INTERESTING
618
+ assert r .status is Status .INTERESTING
619
619
assert call_count == 1
620
620
r2 = runner .cached_test_function (bytes ([255 ] * 7 ))
621
- assert r2 .status == Status .OVERRUN
621
+ assert r2 .status is Status .OVERRUN
622
622
assert call_count == 1
623
623
624
624
625
625
def test_shrinks_both_interesting_examples (monkeypatch ):
626
626
def generate_new_examples (self ):
627
- self .cached_test_function ( bytes ([ 1 ] ))
627
+ self .cached_test_function_ir ( ir ( 1 ))
628
628
629
629
monkeypatch .setattr (
630
630
ConjectureRunner , "generate_new_examples" , generate_new_examples
@@ -636,8 +636,8 @@ def f(data):
636
636
637
637
runner = ConjectureRunner (f , database_key = b"key" )
638
638
runner .run ()
639
- assert runner .interesting_examples [0 ].buffer == bytes ([ 0 ] )
640
- assert runner .interesting_examples [1 ].buffer == bytes ([ 1 ] )
639
+ assert runner .interesting_examples [0 ].choices == ( 0 , )
640
+ assert runner .interesting_examples [1 ].choices == ( 1 , )
641
641
642
642
643
643
def test_discarding (monkeypatch ):
@@ -776,7 +776,7 @@ def f(data):
776
776
for i in range (10 ):
777
777
database .save (runner .secondary_key , bytes ([i ]))
778
778
779
- runner .cached_test_function ([ 10 ] )
779
+ runner .cached_test_function_ir ( ir ( 10 ) )
780
780
assert runner .interesting_examples
781
781
782
782
assert len (set (database .fetch (key ))) == 1
@@ -805,13 +805,11 @@ def f(data):
805
805
),
806
806
database_key = key ,
807
807
)
808
-
809
808
for i in range (10 ):
810
809
database .save (runner .secondary_key , bytes ([i ]))
811
810
812
- runner .cached_test_function ([ 10 ] )
811
+ runner .cached_test_function_ir ( ir ( 10 ) )
813
812
assert runner .interesting_examples
814
-
815
813
assert len (set (database .fetch (key ))) == 1
816
814
assert len (set (database .fetch (runner .secondary_key ))) == 10
817
815
@@ -823,7 +821,6 @@ def f(data):
823
821
)
824
822
825
823
(v ,) = runner .interesting_examples .values ()
826
-
827
824
assert list (v .buffer ) == [5 ]
828
825
829
826
@@ -948,10 +945,10 @@ def tf(data):
948
945
with deterministic_PRNG ():
949
946
runner = ConjectureRunner (tf , settings = TEST_SETTINGS )
950
947
for _ in range (2 ):
951
- for b in (b" \0 " , b" \1 " ):
952
- d = runner .cached_test_function ( b )
948
+ for nodes in (ir ( 0 ), ir ( 1 ) ):
949
+ d = runner .cached_test_function_ir ( nodes )
953
950
assert d .status == Status .INTERESTING
954
- assert d .buffer == b
951
+ assert d .choices == ( nodes [ 0 ]. value ,)
955
952
assert count == 2
956
953
957
954
@@ -968,11 +965,11 @@ def test_function(data):
968
965
with deterministic_PRNG ():
969
966
runner = ConjectureRunner (test_function , settings = TEST_SETTINGS )
970
967
971
- data = runner .cached_test_function ( bytes ( 3 ))
968
+ data = runner .cached_test_function_ir ( ir ( 0 , b" \0 " , 0 ))
972
969
assert data .status == Status .VALID
973
970
for n in [2 , 1 , 0 ]:
974
- prefix_data = runner .cached_test_function ( bytes ( n ) )
975
- assert prefix_data is Overrun
971
+ d = runner .cached_test_function_ir ( data . ir_nodes [: n ] )
972
+ assert d is Overrun
976
973
assert call_count == 1
977
974
978
975
@@ -982,14 +979,14 @@ def test_will_evict_entries_from_the_cache(monkeypatch):
982
979
983
980
def tf (data ):
984
981
nonlocal count
985
- data .draw_bytes ( 1 , 1 )
982
+ data .draw_integer ( 0 , 2 ** 8 - 1 )
986
983
count += 1
987
984
988
985
runner = ConjectureRunner (tf , settings = TEST_SETTINGS )
989
986
990
987
for _ in range (3 ):
991
988
for n in range (10 ):
992
- runner .cached_test_function ([ n ] )
989
+ runner .cached_test_function_ir ( ir ( n ) )
993
990
994
991
# Because we exceeded the cache size, our previous
995
992
# calls will have been evicted, so each call to
@@ -1100,7 +1097,7 @@ def test(data):
1100
1097
runner = ConjectureRunner (
1101
1098
test , settings = settings (TEST_SETTINGS , report_multiple_bugs = False )
1102
1099
)
1103
- runner .cached_test_function ([ 255 , 255 ] )
1100
+ runner .cached_test_function_ir ( ir ( 255 , 255 ) )
1104
1101
runner .shrink_interesting_examples ()
1105
1102
1106
1103
results = {d .buffer for d in runner .interesting_examples .values ()}
@@ -1294,15 +1291,15 @@ def test(data):
1294
1291
database_key = b"stuff" ,
1295
1292
)
1296
1293
1297
- d1 = runner .cached_test_function ([ 0 , 1 ] ).as_result ()
1298
- d2 = runner .cached_test_function ([ 1 , 0 ] ).as_result ()
1294
+ d1 = runner .cached_test_function_ir ( ir ( 0 , 1 ) ).as_result ()
1295
+ d2 = runner .cached_test_function_ir ( ir ( 1 , 0 ) ).as_result ()
1299
1296
1300
1297
assert len (runner .pareto_front ) == 2
1301
1298
1302
1299
assert runner .pareto_front [0 ] == d1
1303
1300
assert runner .pareto_front [1 ] == d2
1304
1301
1305
- d3 = runner .cached_test_function ([ 0 , 0 ] ).as_result ()
1302
+ d3 = runner .cached_test_function_ir ( ir ( 0 , 0 ) ).as_result ()
1306
1303
assert len (runner .pareto_front ) == 1
1307
1304
1308
1305
assert runner .pareto_front [0 ] == d3
@@ -1317,18 +1314,13 @@ def test(data):
1317
1314
settings = settings (TEST_SETTINGS , database = InMemoryExampleDatabase ()),
1318
1315
database_key = b"stuff" ,
1319
1316
)
1320
-
1321
- d1 = runner .cached_test_function ([1 ]).as_result ()
1317
+ d1 = runner .cached_test_function_ir (ir (1 )).as_result ()
1322
1318
1323
1319
assert len (runner .pareto_front ) == 1
1324
-
1325
1320
# This can happen in practice if we e.g. reexecute a test because it has
1326
1321
# expired from the cache. It's easier just to test it directly though
1327
1322
# rather than simulate the failure mode.
1328
- is_pareto = runner .pareto_front .add (d1 )
1329
-
1330
- assert is_pareto
1331
-
1323
+ assert runner .pareto_front .add (d1 )
1332
1324
assert len (runner .pareto_front ) == 1
1333
1325
1334
1326
@@ -1343,8 +1335,8 @@ def test(data):
1343
1335
database_key = b"stuff" ,
1344
1336
)
1345
1337
1346
- d1 = runner .cached_test_function ([ 0 ] ).as_result ()
1347
- d2 = runner .cached_test_function ([ 1 ] ).as_result ()
1338
+ d1 = runner .cached_test_function_ir ( ir ( 0 ) ).as_result ()
1339
+ d2 = runner .cached_test_function_ir ( ir ( 1 ) ).as_result ()
1348
1340
1349
1341
assert dominance (d1 , d2 ) == DominanceRelation .NO_DOMINANCE
1350
1342
@@ -1360,8 +1352,8 @@ def test(data):
1360
1352
database_key = b"stuff" ,
1361
1353
)
1362
1354
1363
- d1 = runner .cached_test_function ([ 0 ] ).as_result ()
1364
- d2 = runner .cached_test_function ([ 1 ] ).as_result ()
1355
+ d1 = runner .cached_test_function_ir ( ir ( 0 ) ).as_result ()
1356
+ d2 = runner .cached_test_function_ir ( ir ( 1 ) ).as_result ()
1365
1357
assert dominance (d1 , d2 ) == DominanceRelation .LEFT_DOMINATES
1366
1358
1367
1359
@@ -1387,9 +1379,7 @@ def test(data):
1387
1379
runner = ConjectureRunner (
1388
1380
test , settings = settings (TEST_SETTINGS , phases = [Phase .target ])
1389
1381
)
1390
-
1391
- runner .cached_test_function (bytes (2 ))
1392
-
1382
+ runner .cached_test_function_ir (ir (0 ))
1393
1383
runner .run ()
1394
1384
1395
1385
assert runner .best_observed_targets ["n" ] == (2 ** 16 ) - 1
@@ -1431,16 +1421,17 @@ def test(data):
1431
1421
1432
1422
def test_does_not_cache_extended_prefix ():
1433
1423
def test (data ):
1434
- data .draw_bytes (8 , 8 )
1424
+ data .draw_integer ()
1425
+ data .draw_integer ()
1435
1426
1436
1427
with deterministic_PRNG ():
1437
1428
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1438
1429
1439
- d1 = runner .cached_test_function ( b"" , extend = 8 )
1440
- d2 = runner .cached_test_function ( b"" , extend = 8 )
1441
- assert d1 . status == d2 . status == Status . VALID
1442
-
1443
- assert d1 .buffer != d2 .buffer
1430
+ d1 = runner .cached_test_function_ir ( ir ( 0 ) , extend = 10 )
1431
+ assert runner .call_count == 1
1432
+ d2 = runner . cached_test_function_ir ( ir ( 0 ), extend = 10 )
1433
+ assert runner . call_count == 2
1434
+ assert d1 .status is d2 .status is Status . VALID
1444
1435
1445
1436
1446
1437
def test_does_cache_if_extend_is_not_used ():
@@ -1454,8 +1445,8 @@ def test(data):
1454
1445
with deterministic_PRNG ():
1455
1446
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1456
1447
1457
- d1 = runner .cached_test_function ( b"\0 " , extend = 8 )
1458
- d2 = runner .cached_test_function ( b"\0 " , extend = 8 )
1448
+ d1 = runner .cached_test_function_ir ( ir ( b"\0 " ) , extend = 8 )
1449
+ d2 = runner .cached_test_function_ir ( ir ( b"\0 " ) , extend = 8 )
1459
1450
assert d1 .status == d2 .status == Status .VALID
1460
1451
assert d1 .buffer == d2 .buffer
1461
1452
assert calls == 1
@@ -1472,10 +1463,10 @@ def test(data):
1472
1463
with deterministic_PRNG ():
1473
1464
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1474
1465
1475
- d1 = runner .cached_test_function ( b"\0 " , extend = 8 )
1476
- d2 = runner .cached_test_function (d1 .buffer )
1466
+ d1 = runner .cached_test_function_ir ( ir ( b"\0 " ) , extend = 8 )
1467
+ d2 = runner .cached_test_function_ir (d1 .ir_nodes )
1477
1468
assert d1 .status == d2 .status == Status .VALID
1478
- assert d1 .buffer == d2 .buffer
1469
+ assert d1 .ir_nodes == d2 .ir_nodes
1479
1470
assert calls == 1
1480
1471
1481
1472
@@ -1486,8 +1477,8 @@ def test(data):
1486
1477
with deterministic_PRNG ():
1487
1478
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1488
1479
1489
- d1 = runner .cached_test_function ( b"" , extend = 4 )
1490
- d2 = runner .cached_test_function ( b"" , extend = 8 )
1480
+ d1 = runner .cached_test_function_ir ( ir ( b"" ) , extend = 4 )
1481
+ d2 = runner .cached_test_function_ir ( ir ( b"" ) , extend = 8 )
1491
1482
assert d1 .status == Status .OVERRUN
1492
1483
assert d2 .status == Status .VALID
1493
1484
@@ -1500,10 +1491,11 @@ def test(data):
1500
1491
with deterministic_PRNG ():
1501
1492
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1502
1493
1503
- d1 = runner .cached_test_function (bytes (8 ), extend = 0 )
1504
- d2 = runner .cached_test_function (bytes (8 ), extend = 8 )
1505
- assert d1 .status == Status .OVERRUN
1506
- assert d2 .status == Status .VALID
1494
+ data = runner .cached_test_function_ir (ir (bytes (8 )), extend = 0 )
1495
+ assert data .status is Status .OVERRUN
1496
+
1497
+ data = runner .cached_test_function_ir (ir (bytes (8 )), extend = 10 )
1498
+ assert data .status is Status .VALID
1507
1499
1508
1500
1509
1501
def test_does_not_cache_extended_prefix_if_overrun ():
@@ -1513,8 +1505,8 @@ def test(data):
1513
1505
with deterministic_PRNG ():
1514
1506
runner = ConjectureRunner (test , settings = TEST_SETTINGS )
1515
1507
1516
- d1 = runner .cached_test_function ( b"" , extend = 4 )
1517
- d2 = runner .cached_test_function ( b"" , extend = 8 )
1508
+ d1 = runner .cached_test_function_ir ( ir ( b"" ) , extend = 4 )
1509
+ d2 = runner .cached_test_function_ir ( ir ( b"" ) , extend = 8 )
1518
1510
assert d1 .status == Status .OVERRUN
1519
1511
assert d2 .status == Status .VALID
1520
1512
@@ -1534,15 +1526,14 @@ def test(data):
1534
1526
1535
1527
def test_can_be_set_to_ignore_limits ():
1536
1528
def test (data ):
1537
- data .draw_bytes ( 1 , 1 )
1529
+ data .draw_integer ( 0 , 2 ** 8 - 1 )
1538
1530
1539
1531
with deterministic_PRNG ():
1540
1532
runner = ConjectureRunner (
1541
1533
test , settings = settings (TEST_SETTINGS , max_examples = 1 ), ignore_limits = True
1542
1534
)
1543
-
1544
1535
for c in range (256 ):
1545
- runner .cached_test_function ([ c ] )
1536
+ runner .cached_test_function_ir ( ir ( c ) )
1546
1537
1547
1538
assert runner .tree .is_exhausted
1548
1539
0 commit comments