├── VERSION ├── test ├── tests │ ├── empty.in │ ├── empty.out │ ├── nlnlnl.out │ ├── space.out │ ├── aa.in │ ├── ii.in │ ├── ll.in │ ├── mm.in │ ├── nn.in │ ├── oo.in │ ├── ss.in │ ├── uu.in │ ├── vv.in │ ├── xx.in │ ├── zeroid.in │ ├── zz.in │ ├── .gitignore │ ├── emptytag.in │ ├── invalidtag.in │ ├── nondigitid.in │ ├── maxid.in │ ├── nondigitlen.in │ ├── samearg.in │ ├── sortnotag.in │ ├── tagnospace.in │ ├── nlnlnl.in │ ├── nospaceafterid.in │ ├── sortbvnobw.in │ ├── zerolen.in │ ├── invalidid0.in │ ├── sortarrayargs1.in │ ├── sortarrayargs3.in │ ├── gap.in │ ├── gap.out │ ├── input.in │ ├── maxlen.in │ ├── sortarrayargs4.in │ ├── zero1.in │ ├── zero1.out │ ├── input.out │ ├── invalidid.in │ ├── nonewlinecomment.in │ ├── zero32.in │ ├── zero32.out │ ├── argidlarger.in │ ├── inputemptysym.in │ ├── invalidargid.in │ ├── sortasarg.in │ ├── space.in │ ├── zerowitharg.in │ ├── inputeofinsym.in │ ├── inputeofinsym.out │ ├── onesnospace.in │ ├── sortarrayargs2.in │ ├── statenospace.in │ ├── undefinedargid.in │ ├── inputsymspace.in │ ├── andlenospace.in │ ├── andtrailspace.in │ ├── state.in │ ├── state.out │ ├── aa.out │ ├── addnlafterfirstarg.in │ ├── ii.out │ ├── ll.out │ ├── mm.out │ ├── nn.out │ ├── oo.out │ ├── ss.out │ ├── uu.out │ ├── vv.out │ ├── xx.out │ ├── zz.out │ ├── andonesone.in │ ├── andonesone.out │ ├── implies2ndargundef.in │ ├── nor2ndargnospace.in │ ├── sortbitvec.in │ ├── sortbitvec.out │ ├── addnospaceafterfirstarg.in │ ├── array.out │ ├── emptytag.out │ ├── maxid.out │ ├── samearg.out │ ├── sortnotag.out │ ├── unordered.in │ ├── arraynospaceaftersort.in │ ├── invalidid.out │ ├── invalidtag.out │ ├── sortarraywarrayarg.in │ ├── sortarraywarrayarg.out │ ├── unordered.out │ ├── andtrailspace.out │ ├── inputemptysym.out │ ├── nondigitid.out │ ├── sortarrayargs2.out │ ├── sortarrayargs3.out │ ├── sortarrayargs4.out │ ├── sortbvnobw.out │ ├── tagnospace.out │ ├── zerolen.out │ ├── andoutmismatch.in │ ├── nondigitlen.out │ ├── nospaceafterid.out │ ├── sortasarg.out │ ├── tab.out │ ├── undefinedargid.out │ ├── zeroid.out │ ├── andlenospace.out │ ├── argidlarger.out │ ├── invalidid0.out │ ├── sortarrayargs1.out │ ├── zerowitharg.out │ ├── implies2ndargundef.out │ ├── inputsymspace.out │ ├── invalidargid.out │ ├── maxlen.out │ ├── arrayasbv.out │ ├── nonewlinecomment.out │ ├── nor2ndargnospace.out │ ├── sortarray.in │ ├── sortarray.out │ ├── andargmismatch.in │ ├── onesnospace.out │ ├── arrayasbv.in │ ├── statenospace.out │ ├── array.in │ ├── tab.in │ ├── addnlafterfirstarg.out │ ├── andargmismatch.out │ ├── andoutmismatch.out │ ├── arraynospaceaftersort.out │ ├── addnospaceafterfirstarg.out │ ├── allop2s.in │ └── allop2s.out ├── run-coverage-tests.sh └── runtests.sh ├── .gitignore ├── examples ├── .gitignore └── btorsim │ ├── count2.btor2 │ ├── count4.btor2 │ ├── recount4.btor2 │ ├── noninitstate.btor2 │ ├── twocount2.btor2 │ ├── twocount32.btor2 │ ├── twocount2c.btor2 │ ├── factorial4even.btor2 │ └── run-examples.sh ├── AUTHORS ├── setup-deps.sh ├── .github └── workflows │ └── ci.yml ├── .clang-format ├── src ├── btorsim │ ├── btorsimrng.h │ ├── btorsimhelpers.h │ ├── btorsimstate.h │ ├── btorsimrng.c │ ├── btorsimstate.cpp │ ├── btorsimhelpers.cpp │ ├── btorsimvcd.h │ ├── btorsimam.h │ ├── btorsimam.cpp │ ├── btorsimbv.h │ └── btorsimvcd.cpp ├── CMakeLists.txt ├── util │ ├── btor2mem.h │ └── btor2stack.h ├── catbtor.c ├── btorsplit.cpp ├── btor2parser │ ├── btor2parser.h │ └── btor2parser.c └── btor2aiger.cpp ├── LICENSE.txt ├── mksrcrelease.sh ├── configure.sh ├── CMakeLists.txt └── README.md /VERSION: -------------------------------------------------------------------------------- 1 | 1.0.2 2 | -------------------------------------------------------------------------------- /test/tests/empty.in: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/tests/empty.out: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/tests/nlnlnl.out: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/tests/space.out: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/tests/aa.in: -------------------------------------------------------------------------------- 1 | 1 aa 1 2 | -------------------------------------------------------------------------------- /test/tests/ii.in: -------------------------------------------------------------------------------- 1 | 1 ii 1 2 | -------------------------------------------------------------------------------- /test/tests/ll.in: -------------------------------------------------------------------------------- 1 | 1 ll 1 2 | -------------------------------------------------------------------------------- /test/tests/mm.in: -------------------------------------------------------------------------------- 1 | 1 mm 1 2 | -------------------------------------------------------------------------------- /test/tests/nn.in: -------------------------------------------------------------------------------- 1 | 1 nn 1 2 | -------------------------------------------------------------------------------- /test/tests/oo.in: -------------------------------------------------------------------------------- 1 | 1 oo 1 2 | -------------------------------------------------------------------------------- /test/tests/ss.in: -------------------------------------------------------------------------------- 1 | 1 ss 1 2 | -------------------------------------------------------------------------------- /test/tests/uu.in: -------------------------------------------------------------------------------- 1 | 1 uu 1 2 | -------------------------------------------------------------------------------- /test/tests/vv.in: -------------------------------------------------------------------------------- 1 | 1 vv 1 2 | -------------------------------------------------------------------------------- /test/tests/xx.in: -------------------------------------------------------------------------------- 1 | 1 xx 1 2 | -------------------------------------------------------------------------------- /test/tests/zeroid.in: -------------------------------------------------------------------------------- 1 | 0 2 | -------------------------------------------------------------------------------- /test/tests/zz.in: -------------------------------------------------------------------------------- 1 | 1 zz 1 2 | -------------------------------------------------------------------------------- /test/tests/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | -------------------------------------------------------------------------------- /test/tests/emptytag.in: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /test/tests/invalidtag.in: -------------------------------------------------------------------------------- 1 | 1 0 2 | -------------------------------------------------------------------------------- /test/tests/nondigitid.in: -------------------------------------------------------------------------------- 1 | a 2 | -------------------------------------------------------------------------------- /test/tests/maxid.in: -------------------------------------------------------------------------------- 1 | 10000000000000 2 | -------------------------------------------------------------------------------- /test/tests/nondigitlen.in: -------------------------------------------------------------------------------- 1 | 1 and a 2 | -------------------------------------------------------------------------------- /test/tests/samearg.in: -------------------------------------------------------------------------------- 1 | 1 and 1 1 2 | -------------------------------------------------------------------------------- /test/tests/sortnotag.in: -------------------------------------------------------------------------------- 1 | 1 sort 1 2 | -------------------------------------------------------------------------------- /test/tests/tagnospace.in: -------------------------------------------------------------------------------- 1 | 1 tag0 2 | -------------------------------------------------------------------------------- /test/tests/nlnlnl.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/tests/nospaceafterid.in: -------------------------------------------------------------------------------- 1 | 1nospace 2 | -------------------------------------------------------------------------------- /test/tests/sortbvnobw.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 2 | -------------------------------------------------------------------------------- /test/tests/zerolen.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 0 2 | -------------------------------------------------------------------------------- /test/tests/invalidid0.in: -------------------------------------------------------------------------------- 1 | 0 sort bitvec 1 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs1.in: -------------------------------------------------------------------------------- 1 | 1 sort array 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs3.in: -------------------------------------------------------------------------------- 1 | 1 sort array 1 2 | -------------------------------------------------------------------------------- /test/tests/gap.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 3 input 1 3 | -------------------------------------------------------------------------------- /test/tests/gap.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 3 input 1 3 | -------------------------------------------------------------------------------- /test/tests/input.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 input 1 3 | -------------------------------------------------------------------------------- /test/tests/maxlen.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 2147483648 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs4.in: -------------------------------------------------------------------------------- 1 | 1 sort array 1 1 2 | -------------------------------------------------------------------------------- /test/tests/zero1.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 zero 1 3 | -------------------------------------------------------------------------------- /test/tests/zero1.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 zero 1 3 | -------------------------------------------------------------------------------- /test/tests/input.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 input 1 3 | -------------------------------------------------------------------------------- /test/tests/invalidid.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 1 input 1 3 | -------------------------------------------------------------------------------- /test/tests/nonewlinecomment.in: -------------------------------------------------------------------------------- 1 | ; no new line in comment -------------------------------------------------------------------------------- /test/tests/zero32.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | -------------------------------------------------------------------------------- /test/tests/zero32.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | -------------------------------------------------------------------------------- /test/tests/argidlarger.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 and 1 3 3 | -------------------------------------------------------------------------------- /test/tests/inputemptysym.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 input 1 3 | -------------------------------------------------------------------------------- /test/tests/invalidargid.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 and 1 3 3 | -------------------------------------------------------------------------------- /test/tests/sortasarg.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 and 1 1 1 3 | -------------------------------------------------------------------------------- /test/tests/space.in: -------------------------------------------------------------------------------- 1 | ; next line has an empty space 2 | 3 | -------------------------------------------------------------------------------- /test/tests/zerowitharg.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 zero 1 1 1 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | makefile 3 | catbtor 4 | deps/ 5 | build/ 6 | -------------------------------------------------------------------------------- /test/tests/inputeofinsym.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 input 1 sym 3 | -------------------------------------------------------------------------------- /test/tests/inputeofinsym.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 input 1 sym 3 | -------------------------------------------------------------------------------- /test/tests/onesnospace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 ones 1nospace 3 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs2.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort array 1 3 | -------------------------------------------------------------------------------- /test/tests/statenospace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 state 1nospace 3 | -------------------------------------------------------------------------------- /test/tests/undefinedargid.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 3 and 1 2 2 3 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | *.witnessmc 2 | *.witnesssim 3 | *.nowitnesssim 4 | -------------------------------------------------------------------------------- /test/tests/inputsymspace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 input 1 sym bol 3 | -------------------------------------------------------------------------------- /test/tests/andlenospace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 ones 1 3 | 3 add 1-2 -2 4 | -------------------------------------------------------------------------------- /test/tests/andtrailspace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | 3 and 1 2 2 4 | -------------------------------------------------------------------------------- /test/tests/state.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1024 2 | 2 state 1 a_really_big_state 3 | -------------------------------------------------------------------------------- /test/tests/state.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1024 2 | 2 state 1 a_really_big_state 3 | -------------------------------------------------------------------------------- /test/tests/aa.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'aa.in' line 1: invalid tag 'aa' 2 | -------------------------------------------------------------------------------- /test/tests/addnlafterfirstarg.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | 3 add 1 2 4 | -------------------------------------------------------------------------------- /test/tests/ii.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'ii.in' line 1: invalid tag 'ii' 2 | -------------------------------------------------------------------------------- /test/tests/ll.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'll.in' line 1: invalid tag 'll' 2 | -------------------------------------------------------------------------------- /test/tests/mm.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'mm.in' line 1: invalid tag 'mm' 2 | -------------------------------------------------------------------------------- /test/tests/nn.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nn.in' line 1: invalid tag 'nn' 2 | -------------------------------------------------------------------------------- /test/tests/oo.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'oo.in' line 1: invalid tag 'oo' 2 | -------------------------------------------------------------------------------- /test/tests/ss.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'ss.in' line 1: invalid tag 'ss' 2 | -------------------------------------------------------------------------------- /test/tests/uu.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'uu.in' line 1: invalid tag 'uu' 2 | -------------------------------------------------------------------------------- /test/tests/vv.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'vv.in' line 1: invalid tag 'vv' 2 | -------------------------------------------------------------------------------- /test/tests/xx.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'xx.in' line 1: invalid tag 'xx' 2 | -------------------------------------------------------------------------------- /test/tests/zz.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'zz.in' line 1: invalid tag 'zz' 2 | -------------------------------------------------------------------------------- /test/tests/andonesone.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 one 1 3 | 3 ones 1 4 | 4 and 1 -2 3 5 | -------------------------------------------------------------------------------- /test/tests/andonesone.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 one 1 3 | 3 ones 1 4 | 4 and 1 -2 3 5 | -------------------------------------------------------------------------------- /test/tests/implies2ndargundef.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | 4 implies 1 2 3 4 | -------------------------------------------------------------------------------- /test/tests/nor2ndargnospace.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | 3 nor 1 3 3nospace 4 | -------------------------------------------------------------------------------- /test/tests/sortbitvec.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 32 3 | 3 sort bitvec 23 4 | -------------------------------------------------------------------------------- /test/tests/sortbitvec.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 32 3 | 3 sort bitvec 23 4 | -------------------------------------------------------------------------------- /test/tests/addnospaceafterfirstarg.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 zero 1 3 | 3 add 1 2nospace 4 | -------------------------------------------------------------------------------- /test/tests/array.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'array.in' line 4: invalid tag 'array' 2 | -------------------------------------------------------------------------------- /test/tests/emptytag.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'emptytag.in' line 2: expected tag 2 | -------------------------------------------------------------------------------- /test/tests/maxid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'maxid.in' line 1: id exceeds maximum 2 | -------------------------------------------------------------------------------- /test/tests/samearg.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'samearg.in' line 1: undefined sort id 2 | -------------------------------------------------------------------------------- /test/tests/sortnotag.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortnotag.in' line 1: expected tag 2 | -------------------------------------------------------------------------------- /test/tests/unordered.in: -------------------------------------------------------------------------------- 1 | 4 sort bitvec 32 2 | 7 sort bitvec 1 3 | 2 zero 4 4 | 1 zero 7 5 | -------------------------------------------------------------------------------- /test/tests/arraynospaceaftersort.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 sort array 1 1 3 | 3 input 2nospace 4 | -------------------------------------------------------------------------------- /test/tests/invalidid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'invalidid.in' line 2: id already defined 2 | -------------------------------------------------------------------------------- /test/tests/invalidtag.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'invalidtag.in' line 1: expected tag 2 | -------------------------------------------------------------------------------- /test/tests/sortarraywarrayarg.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 2 2 | 2 sort array 1 1 3 | 3 sort array 1 2 4 | -------------------------------------------------------------------------------- /test/tests/sortarraywarrayarg.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 2 2 | 2 sort array 1 1 3 | 3 sort array 1 2 4 | -------------------------------------------------------------------------------- /test/tests/unordered.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'unordered.in' line 3: id out-of-order 2 | -------------------------------------------------------------------------------- /test/tests/andtrailspace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'andtrailspace.in' line 3: empty symbol 2 | -------------------------------------------------------------------------------- /test/tests/inputemptysym.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'inputemptysym.in' line 2: empty symbol 2 | -------------------------------------------------------------------------------- /test/tests/nondigitid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nondigitid.in' line 1: id should start with digit 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs2.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortarrayargs2.in' line 3: expected space 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs3.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortarrayargs3.in' line 1: undefined sort id 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs4.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortarrayargs4.in' line 1: undefined sort id 2 | -------------------------------------------------------------------------------- /test/tests/sortbvnobw.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortbvnobw.in' line 2: expected space after tag 2 | -------------------------------------------------------------------------------- /test/tests/tagnospace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'tagnospace.in' line 1: expected space after tag 2 | -------------------------------------------------------------------------------- /test/tests/zerolen.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'zerolen.in' line 1: bit width must be greater than 0 2 | -------------------------------------------------------------------------------- /test/tests/andoutmismatch.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 sort bitvec 1 3 | 3 zero 1 4 | 4 zero 1 5 | 5 and 2 3 4 6 | -------------------------------------------------------------------------------- /test/tests/nondigitlen.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nondigitlen.in' line 1: id should start with digit 2 | -------------------------------------------------------------------------------- /test/tests/nospaceafterid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nospaceafterid.in' line 1: expected space after id 2 | -------------------------------------------------------------------------------- /test/tests/sortasarg.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortasarg.in' line 2: 'sort' cannot be used as argument 2 | -------------------------------------------------------------------------------- /test/tests/tab.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'tab.in' line 8: unexpected tab character at start of line 2 | -------------------------------------------------------------------------------- /test/tests/undefinedargid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'undefinedargid.in' line 2: undefined argument id 2 | -------------------------------------------------------------------------------- /test/tests/zeroid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'zeroid.in' line 1: id should start with non-zero digit 2 | -------------------------------------------------------------------------------- /test/tests/andlenospace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'andlenospace.in' line 3: expected space after sort id 2 | -------------------------------------------------------------------------------- /test/tests/argidlarger.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'argidlarger.in' line 2: argument id too large (undefined) 2 | -------------------------------------------------------------------------------- /test/tests/invalidid0.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'invalidid0.in' line 1: id should start with non-zero digit 2 | -------------------------------------------------------------------------------- /test/tests/sortarrayargs1.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'sortarrayargs1.in' line 2: expected space after tag 2 | -------------------------------------------------------------------------------- /test/tests/zerowitharg.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'zerowitharg.in' line 2: unexpected white-space in symbol 2 | -------------------------------------------------------------------------------- /test/tests/implies2ndargundef.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'implies2ndargundef.in' line 3: undefined argument id 2 | -------------------------------------------------------------------------------- /test/tests/inputsymspace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'inputsymspace.in' line 2: unexpected white-space in symbol 2 | -------------------------------------------------------------------------------- /test/tests/invalidargid.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'invalidargid.in' line 2: argument id too large (undefined) 2 | -------------------------------------------------------------------------------- /test/tests/maxlen.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'maxlen.in' line 1: number exceeds maximum bit width of 2147483647 2 | -------------------------------------------------------------------------------- /test/tests/arrayasbv.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'arrayasbv.in' line 6: expected bitvec sort for first argument of add 2 | -------------------------------------------------------------------------------- /test/tests/nonewlinecomment.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nonewlinecomment.in' line 1: unexpected end-of-file in comment 2 | -------------------------------------------------------------------------------- /test/tests/nor2ndargnospace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'nor2ndargnospace.in' line 3: argument id too large (undefined) 2 | -------------------------------------------------------------------------------- /test/tests/sortarray.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 3 2 | 2 sort bitvec 4 3 | 3 sort array 1 2 4 | 4 sort array 1 1 5 | 5 sort array 2 2 6 | -------------------------------------------------------------------------------- /test/tests/sortarray.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 3 2 | 2 sort bitvec 4 3 | 3 sort array 1 2 4 | 4 sort array 1 1 5 | 5 sort array 2 2 6 | -------------------------------------------------------------------------------- /test/tests/andargmismatch.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 2 3 | 3 sort bitvec 3 4 | 4 zero 1 5 | 5 ones 2 6 | 6 and 3 4 5 7 | -------------------------------------------------------------------------------- /test/tests/onesnospace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'onesnospace.in' line 2: expected new-line at the end of the line got 'n' 2 | -------------------------------------------------------------------------------- /test/tests/arrayasbv.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 8 2 | 2 sort bitvec 32 3 | 3 sort array 1 2 4 | 4 input 3 mem 5 | 5 input 1 x 6 | 6 add 1 4 5 7 | -------------------------------------------------------------------------------- /test/tests/statenospace.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'statenospace.in' line 2: expected new-line at the end of the line got 'n' 2 | -------------------------------------------------------------------------------- /test/tests/array.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 8 2 | 2 sort bitvec 32 3 | 3 sort array 1 2 4 | 4 array 2 5 | 5 array 2 another-thirty-two-bit-memory 6 | -------------------------------------------------------------------------------- /test/tests/tab.in: -------------------------------------------------------------------------------- 1 | 2 | ; comment followed by new line 3 | 4 | 1 sort bitvec 2 5 | 2 zero 1 6 | 7 | ; next line starts with a tab 8 | 9 | -------------------------------------------------------------------------------- /test/tests/addnlafterfirstarg.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'addnlafterfirstarg.in' line 4: expected space after argument (argument missing) 2 | -------------------------------------------------------------------------------- /test/tests/andargmismatch.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'andargmismatch.in' line 6: expected bitvec of size 3 for first argument but got 1 2 | -------------------------------------------------------------------------------- /test/tests/andoutmismatch.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'andoutmismatch.in' line 5: expected bitvec of size 1 for first argument but got 32 2 | -------------------------------------------------------------------------------- /test/tests/arraynospaceaftersort.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'arraynospaceaftersort.in' line 3: expected new-line at the end of the line got 'n' 2 | -------------------------------------------------------------------------------- /test/tests/addnospaceafterfirstarg.out: -------------------------------------------------------------------------------- 1 | *** catbtor: parse error in 'addnospaceafterfirstarg.in' line 3: expected space after argument (argument missing) 2 | -------------------------------------------------------------------------------- /examples/btorsim/count2.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 3 2 | 2 zero 1 3 | 3 state 1 4 | 4 init 1 3 2 5 | 5 one 1 6 | 6 add 1 3 5 7 | 7 next 1 3 6 8 | 8 ones 1 9 | 9 sort bitvec 1 10 | 10 eq 9 3 8 11 | 11 bad 10 12 | -------------------------------------------------------------------------------- /examples/btorsim/count4.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 4 2 | 2 zero 1 3 | 3 state 1 4 | 4 init 1 3 2 5 | 5 one 1 6 | 6 add 1 3 5 7 | 7 next 1 3 6 8 | 8 ones 1 9 | 9 sort bitvec 1 10 | 10 eq 9 3 8 11 | 11 bad 10 12 | -------------------------------------------------------------------------------- /examples/btorsim/recount4.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 input 1 enable 3 | 3 input 1 reset 4 | 4 sort bitvec 4 5 | 5 zero 4 6 | 6 state 4 counter 7 | 7 init 4 6 5 8 | 8 one 4 9 | 9 add 4 6 8 10 | 10 ite 4 2 9 6 11 | 11 ite 4 3 5 10 12 | 12 next 4 6 11 13 | 13 ones 4 14 | 14 eq 1 6 13 15 | 15 bad 14 16 | -------------------------------------------------------------------------------- /examples/btorsim/noninitstate.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 input 1 turn 3 | 3 state 1 state0 4 | 4 state 1 state1 5 | 5 ite 1 -2 -3 3 6 | 6 ite 1 2 -4 4 7 | 7 next 1 3 5 8 | 8 next 1 4 6 9 | 9 eq 1 3 4 10 | 10 one 1 11 | 11 state 1 initially 12 | 12 init 1 11 10 13 | 13 zero 1 14 | 14 next 1 11 13 15 | 15 implies 1 11 -9 16 | 16 constraint 15 17 | 17 bad 9 18 | -------------------------------------------------------------------------------- /examples/btorsim/twocount2.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 2 3 | 3 input 1 turn 4 | 4 zero 2 5 | 5 state 2 a 6 | 6 state 2 b 7 | 7 init 2 5 4 8 | 8 init 2 6 4 9 | 9 one 2 10 | 10 add 2 5 9 11 | 11 add 2 6 9 12 | 12 ite 2 3 5 10 13 | 13 ite 2 -3 6 11 14 | 14 next 2 5 12 15 | 15 next 2 6 13 16 | 16 ones 2 17 | 17 eq 1 5 16 18 | 18 eq 1 6 16 19 | 19 and 1 17 18 20 | 20 bad 19 21 | -------------------------------------------------------------------------------- /examples/btorsim/twocount32.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 32 3 | 3 input 1 turn 4 | 4 zero 2 5 | 5 state 2 a 6 | 6 state 2 b 7 | 7 init 2 5 4 8 | 8 init 2 6 4 9 | 9 one 2 10 | 10 add 2 5 9 11 | 11 add 2 6 9 12 | 12 ite 2 3 5 10 13 | 13 ite 2 -3 6 11 14 | 14 next 2 5 12 15 | 15 next 2 6 13 16 | 16 constd 2 3 17 | 17 eq 1 5 16 18 | 18 eq 1 6 16 19 | 19 and 1 17 18 20 | 20 bad 19 21 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | The main authors and developers of the Btor2Tools package are: 2 | 3 | Armin Biere, Johannes Kepler University Linz 4 | Aina Niemetz, Johannes Kepler University Linz, Stanford University 5 | Mathias Preiner, Johannes Kepler University Linz, Stanford University 6 | 7 | The Btor2Tools package's copyright is held by these individuals and the 8 | affiliated institutions at the time of their contributions. 9 | -------------------------------------------------------------------------------- /test/tests/allop2s.in: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 sort bitvec 1 3 | 3 zero 1 4 | 4 ones 1 5 | 5 one 1 6 | 6 add 1 -3 -5 7 | 7 and 1 6 4 8 | 8 eq 2 7 6 9 | 9 mul 1 -7 5 10 | 10 nand 1 9 -7 11 | 11 nor 1 6 9 12 | 12 or 1 11 -7 13 | 13 sdiv 1 9 10 14 | 14 srem 1 -11 12 15 | 15 smod 1 13 14 16 | 16 sub 1 -15 7 17 | 17 udiv 1 7 11 18 | 18 urem 1 16 -17 19 | 19 xnor 1 -18 15 20 | 20 xor 1 19 -11 21 | 21 implies 2 8 8 22 | -------------------------------------------------------------------------------- /test/tests/allop2s.out: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 32 2 | 2 sort bitvec 1 3 | 3 zero 1 4 | 4 ones 1 5 | 5 one 1 6 | 6 add 1 -3 -5 7 | 7 and 1 6 4 8 | 8 eq 2 7 6 9 | 9 mul 1 -7 5 10 | 10 nand 1 9 -7 11 | 11 nor 1 6 9 12 | 12 or 1 11 -7 13 | 13 sdiv 1 9 10 14 | 14 srem 1 -11 12 15 | 15 smod 1 13 14 16 | 16 sub 1 -15 7 17 | 17 udiv 1 7 11 18 | 18 urem 1 16 -17 19 | 19 xnor 1 -18 15 20 | 20 xor 1 19 -11 21 | 21 implies 2 8 8 22 | -------------------------------------------------------------------------------- /examples/btorsim/twocount2c.btor2: -------------------------------------------------------------------------------- 1 | 1 sort bitvec 1 2 | 2 sort bitvec 2 3 | 3 input 1 s 4 | 4 input 1 t 5 | 5 zero 2 6 | 6 state 2 a 7 | 7 state 2 b 8 | 8 init 2 6 5 9 | 9 init 2 7 5 10 | 10 one 2 11 | 11 add 2 6 10 12 | 12 add 2 7 10 13 | 13 ite 2 3 11 6 14 | 14 ite 2 4 12 7 15 | 15 next 2 6 13 16 | 16 next 2 7 14 17 | 17 ones 2 18 | 18 eq 1 6 17 19 | 19 eq 1 7 17 20 | 20 and 1 18 19 21 | 21 bad 20 22 | 22 nand 1 3 4 23 | 23 constraint 22 24 | -------------------------------------------------------------------------------- /examples/btorsim/factorial4even.btor2: -------------------------------------------------------------------------------- 1 | ; int i = 1, factorial = 1; 2 | ; assert (i <= 2 || !(factorial & 1)); 3 | ; for (;;) { 4 | ; factorial *= i; 5 | ; i++; 6 | ; assert (i <= 2 || !(factorial & 1)); 7 | ; } 8 | 1 sort bitvec 4 9 | 2 one 1 10 | 3 state 1 factorial 11 | 4 state 1 i 12 | 5 init 1 3 2 13 | 6 init 1 4 2 14 | 7 add 1 4 2 15 | 8 mul 1 3 4 16 | 9 next 1 4 7 17 | 10 next 1 3 8 18 | 11 ones 1 19 | 12 sort bitvec 1 20 | 13 eq 12 4 11 21 | 14 bad 13 22 | 15 slice 12 3 0 0 23 | 16 constd 1 3 24 | 17 ugt 12 4 16 25 | 18 and 12 17 15 26 | 19 bad 18 27 | -------------------------------------------------------------------------------- /setup-deps.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e -o pipefail 4 | 5 | rm -rf deps 6 | mkdir -p deps 7 | 8 | # Setup AIGER 9 | rm -rf aiger-1.9.4.tar.gz 10 | wget http://fmv.jku.at/aiger/aiger-1.9.4.tar.gz 11 | tar xf aiger-1.9.4.tar.gz 12 | mv aiger-1.9.4 deps/aiger 13 | 14 | 15 | # Setup Boolector 16 | git clone https://github.com/boolector/boolector deps/boolector 17 | 18 | cd deps/boolector 19 | git checkout bitblast-api 20 | 21 | ./contrib/setup-btor2tools.sh 22 | ./contrib/setup-lingeling.sh 23 | ./configure.sh --prefix $(pwd)/../install 24 | cd build 25 | 26 | make -j$(nproc) install 27 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | name: CI 3 | 4 | jobs: 5 | build: 6 | strategy: 7 | matrix: 8 | os: [ubuntu-latest, macos-latest] 9 | 10 | runs-on: ${{ matrix.os }} 11 | 12 | steps: 13 | 14 | - uses: actions/checkout@v2 15 | 16 | - name: Configure 17 | run: | 18 | mkdir build 19 | cd build 20 | cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)/install 21 | 22 | - name: Build 23 | working-directory: build 24 | run: make -j2 25 | 26 | - name: Install 27 | working-directory: build 28 | run: make install 29 | -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: Google 4 | SpaceAfterCStyleCast: true 5 | AlignConsecutiveAssignments: true 6 | AllowShortCaseLabelsOnASingleLine: true 7 | AlwaysBreakAfterReturnType: TopLevelDefinitions 8 | BinPackArguments: false 9 | BinPackParameters: false 10 | BreakBeforeBinaryOperators: NonAssignment 11 | BraceWrapping: 12 | AfterClass: true 13 | AfterControlStatement: true 14 | AfterEnum: true 15 | AfterFunction: true 16 | AfterStruct: true 17 | AfterUnion: true 18 | BeforeCatch: true 19 | BeforeElse: true 20 | BreakBeforeBraces: Custom 21 | CommentPragmas: '^\w*(:param|:return|\.\. note)' 22 | SpaceBeforeParens: Always 23 | ... 24 | -------------------------------------------------------------------------------- /test/run-coverage-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | readonly SCRIPTDIR=$(dirname "$(readlink -f $0)") 3 | readonly ROOTDIR=$SCRIPTDIR/.. 4 | readonly BUILDDIR=$ROOTDIR/build 5 | readonly PARSERDIR=$ROOTDIR/src/btor2parser 6 | HTMPFILE=/tmp/btor2parser-run-coverage-tags-in-header 7 | PTMPFILE=/tmp/btor2parser-run-coverage-tags-in-parsed 8 | grep BTOR2_FORMAT_TAG_ $PARSERDIR/btor2parser.h | \ 9 | sed -e 's,.*TAG_,,' -e 's/,.*$//g' | \ 10 | sort > $HTMPFILE 11 | grep 'PARSE (' $PARSERDIR/btor2parser.c | \ 12 | sed -e 's,.*PARSE (,,' -e 's/,.*//g' | \ 13 | sort > $PTMPFILE 14 | diff $HTMPFILE $PTMPFILE | sed -e '/^[0-9]/d' 15 | cd $SCRIPTDIR/../ 16 | make clean 17 | $ROOTDIR/configure.sh -g -c -gcov 18 | make 19 | cd - 20 | $SCRIPTDIR/runtests.sh 21 | gcov -o $BUILDDIR $PARSERDIR/btor2parser.c 22 | echo "vi btor2parser.c.gcov" 23 | -------------------------------------------------------------------------------- /src/btorsim/btorsimrng.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Btor2Tools: A tool package for the BTOR format. 3 | * 4 | * Copyright (c) 2015-2018 Aina Niemetz. 5 | * 6 | * All rights reserved. 7 | * 8 | * This file is part of the Btor2Tools package. 9 | * See LICENSE.txt for more information on using this software. 10 | */ 11 | 12 | #ifndef BTOR2RNG_H_INCLUDED 13 | #define BTOR2RNG_H_INCLUDED 14 | 15 | #include 16 | #include 17 | 18 | #if __cplusplus 19 | extern "C" { 20 | #endif 21 | 22 | struct BtorSimRNG 23 | { 24 | uint32_t z, w; 25 | }; 26 | typedef struct BtorSimRNG BtorSimRNG; 27 | 28 | void btorsim_rng_init (BtorSimRNG* rng, uint32_t seed); 29 | 30 | uint32_t btorsim_rng_rand (BtorSimRNG* rng); 31 | uint32_t btorsim_rng_pick_rand (BtorSimRNG* rng, uint32_t from, uint32_t to); 32 | 33 | #if __cplusplus 34 | } 35 | #endif 36 | #endif 37 | -------------------------------------------------------------------------------- /test/runtests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | readonly SCRIPTDIR=$(dirname "$(readlink -f $0)") 4 | readonly BINDIR=$SCRIPTDIR/../bin 5 | 6 | readonly GREEN='\033[0;32m' 7 | readonly RED='\033[0;31m' 8 | readonly NOCOLOR='\033[0m' 9 | 10 | ok=0 11 | failed=0 12 | total=0 13 | 14 | erase () 15 | { 16 | echo -en "\r \r" 17 | } 18 | 19 | runtest () 20 | { 21 | echo -n "$1 ..." 22 | rm -f $1.log 23 | $BINDIR/catbtor $1.in 1>$1.log 2>&1 24 | if diff $1.log $1.out 1>/dev/null 2>/dev/null 25 | then 26 | echo -en "${GREEN} ok${NOCOLOR}\r" 27 | ok=`expr $ok + 1` 28 | erase 29 | else 30 | echo -e "${RED} failed${NOCOLOR}" 31 | failed=`expr $failed + 1` 32 | fi 33 | total=`expr $total + 1` 34 | } 35 | 36 | cd $SCRIPTDIR/tests || exit 1 37 | 38 | for i in *.in 39 | do 40 | name=`basename $i .in` 41 | runtest $name 42 | done 43 | 44 | echo 45 | if [ $ok -ne 0 ] 46 | then 47 | echo -e "${GREEN}$ok ok ${NOCOLOR}" 48 | fi 49 | if [ $failed -ne 0 ] 50 | then 51 | echo -e "${RED}$failed failed${NOCOLOR}" 52 | fi 53 | echo "$total total" 54 | 55 | -------------------------------------------------------------------------------- /src/btorsim/btorsimhelpers.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Btor2Tools: A tool package for the BTOR format. 3 | * 4 | * Copyright (c) 2013-2016 Mathias Preiner. 5 | * Copyright (c) 2015-2018 Aina Niemetz. 6 | * Copyright (c) 2018 Armin Biere. 7 | * Copyright (c) 2020 Nina Engelhardt. 8 | * 9 | * All rights reserved. 10 | * 11 | * This file is part of the Btor2Tools package. 12 | * See LICENSE.txt for more information on using this software. 13 | */ 14 | 15 | #ifndef BTOR2HELP_H_INCLUDED 16 | #define BTOR2HELP_H_INCLUDED 17 | 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | #include "btor2parser/btor2parser.h" 24 | #include "btorsimbv.h" 25 | 26 | extern int32_t verbosity; 27 | 28 | void die (const char *m, ...); 29 | void msg (int32_t level, const char *m, ...); 30 | 31 | // get the sort for a line (have to go through argument for some operators) 32 | Btor2Sort *get_sort (Btor2Line *l, Btor2Parser *model); 33 | 34 | // same as btorsim_bv_to_char and btorsim_bv_to_hex_char but return value is 35 | // std::string 36 | std::string btorsim_bv_to_string (const BtorSimBitVector *bv); 37 | std::string btorsim_bv_to_hex_string (const BtorSimBitVector *bv); 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The Btor2Tools package provides a generic parser and tools for the BTOR2 format. 2 | 3 | Copyright (c) 2012-2018 Armin Biere. 4 | Copyright (c) 2013-2018 Mathias Preiner. 5 | Copyright (c) 2015-2018 Aina Niemetz. 6 | 7 | MIT License 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a 10 | copy of this software and associated documentation files (the "Software"), 11 | to deal in the Software without restriction, including without limitation 12 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 13 | and/or sell copies of the Software, and to permit persons to whom the 14 | Software is furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included 17 | in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 23 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /src/btorsim/btorsimstate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Btor2Tools: A tool package for the BTOR format. 3 | * 4 | * Copyright (c) 2020 Nina Engelhardt. 5 | * 6 | * All rights reserved. 7 | * 8 | * This file is part of the Btor2Tools package. 9 | * See LICENSE.txt for more information on using this software. 10 | */ 11 | 12 | #ifndef BTOR2STATE_H_INCLUDED 13 | #define BTOR2STATE_H_INCLUDED 14 | 15 | #include "btorsimam.h" 16 | #include "btorsimbv.h" 17 | 18 | /* Typed union container class for state values, can point to either a BitVector 19 | * or an ArrayModel. */ 20 | struct BtorSimState 21 | { 22 | enum Type 23 | { 24 | INVALID, 25 | BITVEC, 26 | ARRAY 27 | }; 28 | Type type; 29 | union 30 | { 31 | BtorSimBitVector *bv_state; 32 | BtorSimArrayModel *array_state; 33 | }; 34 | 35 | BtorSimState () : type (INVALID), bv_state (nullptr){}; 36 | 37 | /* change the pointed-to value, frees memory of old value 38 | * does not make a copy of the argument! the input pointer becomes owned by 39 | * the state 40 | */ 41 | void update (BtorSimBitVector *bv); 42 | void update (BtorSimArrayModel *am); 43 | void update (BtorSimState &s); 44 | 45 | // free memory of value, replace with nullptr 46 | void remove (); 47 | 48 | // state is not null 49 | bool is_set (); 50 | }; 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /src/btorsim/btorsimrng.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Btor2Tools: A tool package for the BTOR format. 3 | * 4 | * Copyright (c) 2015-2018 Aina Niemetz. 5 | * 6 | * All rights reserved. 7 | * 8 | * This file is part of the Btor2Tools package. 9 | * See LICENSE.txt for more information on using this software. 10 | */ 11 | 12 | #include "btorsimrng.h" 13 | 14 | #include 15 | #include 16 | 17 | void 18 | btorsim_rng_init (BtorSimRNG* rng, uint32_t seed) 19 | { 20 | assert (rng); 21 | 22 | rng->w = seed; 23 | rng->z = ~rng->w; 24 | rng->w <<= 1; 25 | rng->z <<= 1; 26 | rng->w += 1; 27 | rng->z += 1; 28 | rng->w *= 2019164533u; 29 | rng->z *= 1000632769u; 30 | } 31 | 32 | uint32_t 33 | btorsim_rng_rand (BtorSimRNG* rng) 34 | { 35 | assert (rng); 36 | rng->z = 36969 * (rng->z & 65535) + (rng->z >> 16); 37 | rng->w = 18000 * (rng->w & 65535) + (rng->w >> 16); 38 | return (rng->z << 16) + rng->w; /* 32-bit result */ 39 | } 40 | 41 | uint32_t 42 | btorsim_rng_pick_rand (BtorSimRNG* rng, uint32_t from, uint32_t to) 43 | { 44 | assert (rng); 45 | assert (from <= to); 46 | 47 | uint32_t res; 48 | 49 | from = from == UINT_MAX ? UINT_MAX - 1 : from; 50 | to = to == UINT_MAX ? UINT_MAX - 1 : to; 51 | res = btorsim_rng_rand (rng); 52 | res %= to - from + 1; 53 | res += from; 54 | return res; 55 | } 56 | -------------------------------------------------------------------------------- /mksrcrelease.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | force=no 4 | 5 | die () { 6 | echo "*** mksrcrelease.sh: $*" 1>&2 7 | exit 1 8 | } 9 | 10 | [ -e src ] || die "can not find 'src', call from btor2tools base directory" 11 | 12 | while [ $# -gt 0 ] 13 | do 14 | case $1 in 15 | -h) echo "usage: mksrcrelease.sh [-h][-f]";exit 0;; 16 | -f) force=yes;; 17 | *) die "invalid command line option '$1'";; 18 | esac 19 | shift 20 | done 21 | 22 | LC_TIME="en_US.UTF-8" 23 | export LC_TIME 24 | 25 | date=`date +%y%m%d` 26 | version=`cat VERSION` 27 | gitid=`git rev-parse HEAD` 28 | gitid_short=`git rev-parse --short=7 HEAD` 29 | 30 | id="$version-$gitid_short-$date" 31 | name=btor2tools-$id 32 | dir="/tmp/$name" 33 | 34 | if [ -d $dir ] 35 | then 36 | [ $force = no ] && die "$dir already exists, use '-f'" 37 | fi 38 | 39 | rm -rf $dir 40 | mkdir $dir || exit 1 41 | 42 | mkdir $dir/src || exit 1 43 | 44 | cp -p \ 45 | AUTHORS \ 46 | VERSION \ 47 | LICENSE.txt \ 48 | README.md \ 49 | configure.sh \ 50 | makefile.in \ 51 | $dir/ 52 | 53 | cp -p --parents \ 54 | src/btor2parser/btor2parser.[ch] \ 55 | src/btorsim/btorsim.c \ 56 | src/btorsim/btorsimbv.[ch] \ 57 | src/btorsim/btorsimrng.[ch] \ 58 | src/util/btor2mem.h \ 59 | src/util/btor2stack.h \ 60 | src/catbtor.c \ 61 | $dir 62 | 63 | cp -p -r --parents \ 64 | examples/btorsim/*.btor2 \ 65 | examples/btorsim/mc-witnesses \ 66 | examples/btorsim/run-examples.sh \ 67 | $dir 68 | 69 | cd /tmp/ 70 | rm -f $name.tar.xz 71 | tar Jcf $name.tar.xz $name 72 | ls -l /tmp/$name.tar.xz | awk '{print $5, $NF}' 73 | rm -rf $dir 74 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(btor2parser 2 | btor2parser/btor2parser.c 3 | ) 4 | target_include_directories(btor2parser PRIVATE .) 5 | set_target_properties(btor2parser PROPERTIES PUBLIC_HEADER btor2parser/btor2parser.h) 6 | install( 7 | TARGETS btor2parser 8 | LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 9 | ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 10 | PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 11 | ) 12 | 13 | if (BUILD_TOOLS) 14 | add_executable(btorsim 15 | btorsim/btorsimam.cpp 16 | btorsim/btorsimstate.cpp 17 | btorsim/btorsimvcd.cpp 18 | btorsim/btorsimhelpers.cpp 19 | btorsim/btorsim.cpp 20 | btorsim/btorsimbv.c 21 | btorsim/btorsimrng.c 22 | ) 23 | target_include_directories(btorsim PRIVATE .) 24 | target_link_libraries(btorsim btor2parser) 25 | target_compile_options(btorsim PRIVATE -Wall -Wfatal-errors) 26 | install(TARGETS btorsim DESTINATION ${CMAKE_INSTALL_BINDIR}) 27 | 28 | add_executable(catbtor catbtor.c) 29 | target_link_libraries(catbtor btor2parser) 30 | install(TARGETS catbtor DESTINATION ${CMAKE_INSTALL_BINDIR}) 31 | 32 | add_executable(btorsplit btorsplit.cpp) 33 | install(TARGETS btorsplit DESTINATION ${CMAKE_INSTALL_BINDIR}) 34 | endif() 35 | 36 | if(BUILD_BTOR2AIGER) 37 | add_executable(btor2aiger 38 | btor2aiger.cpp 39 | ${CMAKE_SOURCE_DIR}/deps/aiger/aiger.c 40 | ) 41 | target_include_directories(btor2aiger PRIVATE . ${CMAKE_SOURCE_DIR}/deps/aiger) 42 | target_compile_options(btor2aiger PRIVATE -std=c++11 -Wall -g -g3 -ggdb) 43 | target_link_libraries(btor2aiger btor2parser Boolector::boolector) 44 | install(TARGETS btor2aiger DESTINATION ${CMAKE_INSTALL_BINDIR}) 45 | endif() 46 | -------------------------------------------------------------------------------- /src/btorsim/btorsimstate.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * Btor2Tools: A tool package for the BTOR format. 3 | * 4 | * Copyright (c) 2020 Nina Engelhardt. 5 | * 6 | * All rights reserved. 7 | * 8 | * This file is part of the Btor2Tools package. 9 | * See LICENSE.txt for more information on using this software. 10 | */ 11 | 12 | #include "btorsimstate.h" 13 | 14 | #include 15 | 16 | #include "btorsimhelpers.h" 17 | 18 | void 19 | BtorSimState::update (BtorSimBitVector *bv) 20 | { 21 | assert (type == BtorSimState::Type::BITVEC); 22 | if (bv_state) btorsim_bv_free (bv_state); 23 | bv_state = bv; 24 | } 25 | 26 | void 27 | BtorSimState::update (BtorSimArrayModel *am) 28 | { 29 | assert (type == ARRAY); 30 | if (array_state) delete array_state; 31 | array_state = am; 32 | } 33 | 34 | void 35 | BtorSimState::update (BtorSimState &s) 36 | { 37 | switch (type) 38 | { 39 | case ARRAY: 40 | assert (s.type == ARRAY); 41 | update (s.array_state); 42 | break; 43 | case BtorSimState::Type::BITVEC: 44 | assert (s.type == BITVEC); 45 | update (s.bv_state); 46 | break; 47 | default: die ("Updating invalid state!"); 48 | } 49 | } 50 | 51 | void 52 | BtorSimState::remove () 53 | { 54 | switch (type) 55 | { 56 | case ARRAY: 57 | if (array_state) delete array_state; 58 | array_state = nullptr; 59 | break; 60 | case BtorSimState::Type::BITVEC: 61 | if (bv_state) btorsim_bv_free (bv_state); 62 | bv_state = nullptr; 63 | break; 64 | default: die ("Removing invalid state!"); 65 | } 66 | } 67 | 68 | bool 69 | BtorSimState::is_set () 70 | { 71 | switch (type) 72 | { 73 | case ARRAY: return array_state != nullptr; 74 | case BtorSimState::Type::BITVEC: return bv_state != nullptr; 75 | default: 76 | die ("Checking invalid state!"); 77 | return false; // compiler can't tell that die contains exit, complains 78 | // about lack of return value 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /configure.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e -o pipefail 4 | 5 | BUILD_DIR=build 6 | 7 | asan=no 8 | check=no 9 | debug=no 10 | static=no 11 | btor2aiger=no 12 | 13 | #--------------------------------------------------------------------------# 14 | 15 | die () { 16 | echo "*** configure.sh: $*" 1>&2 17 | exit 1 18 | } 19 | 20 | usage () { 21 | cat < ...] 23 | 24 | where