Test suites
===========

.. note:: Potentially significantly out of date information
    last updated circa 2015

.. TODO: copypaste

Continuously checking the correctness of Yosys and making sure that new features
do not break old ones is a high priority in Yosys.  Two external test suites
have been built for Yosys: VlogHammer and yosys-bigsim.  In addition to that,
yosys comes with approx 200 test cases used in ``make test``.  A debug build of
Yosys also contains a lot of asserts and checks the integrity of the internal
state after each command.

VlogHammer
----------

VlogHammer is a Verilog regression test suite developed to test the different
subsystems in Yosys by comparing them to each other and to the output created by
some other tools (Xilinx Vivado, Xilinx XST, Altera Quartus II, ...).

Yosys Subsystems tested: Verilog frontend, const folding, const eval, technology
mapping, simulation models, SAT models.

Thousands of auto-generated test cases containing code such as:

.. code-block:: verilog

    assign y9 = $signed(((+$signed((^(6'd2 ** a2))))<$unsigned($unsigned(((+a3))))));
    assign y10 = (-((+((+{2{(~^p13)}})))^~(!{{b5,b1,a0},(a1&p12),(a4+a3)})));
    assign y11 = (~&(-{(-3'sd3),($unsigned($signed($unsigned({p0,b4,b1}))))}));

Some bugs in Yosys were found and fixed thanks to VlogHammer. Over 50 bugs in
the other tools used as external reference where found and reported so far.

yosys-bigsim
------------

yosys-bigsim is a collection of real-world open-source Verilog designs and test
benches. yosys-bigsim compares the testbench outputs of simulations of the original
Verilog code and synthesis results.

The following designs are included in yosys-bigsim (excerpt):

- ``openmsp430`` -- an MSP430 compatible 16 bit CPU
- ``aes_5cycle_2stage`` -- an AES encryption core
- ``softusb_navre`` -- an AVR compatible 8 bit CPU
- ``amber23`` -- an ARMv2 compatible 32 bit CPU
- ``lm32`` -- another 32 bit CPU from Lattice Semiconductor
- ``verilog-pong`` -- a hardware pong game with VGA output
- ``elliptic_curve_group`` -- ECG point-add and point-scalar-mul core
- ``reed_solomon_decoder`` -- a Reed-Solomon Error Correction Decoder

Code available at https://github.com/YosysHQ/yosys-bigsim
