====== Debugging Support ======
When ACT programs get long, it may be difficult to track down why a particular circuit is not being constructed properly. To help debug this, there are two basic debugging constructs provided.
===== Assertions =====
Sometimes it is useful to be able to check that a parameter (or an expression of parameters) has a reasonable
value. To express this, ACT supports explicit assertions. We use Hoare's syntax for assertions, so the assertion that
''x'' must be ''8'' would be written
{x=8};
If a more meaningful message is required, the following syntax is also supported:
{x=8 : "This assertion failed"};
which also reports the message specified when the assertion failed.
During circuit development/debugging, it may be helpful to assert that two signals are connected to each
other or in fact disconnected from each other at a particular point during circuit construction. To assert that ''a'' is connected to ''b'', use:
bool a;
bool b;
{ a !== b : "a and b are connected!" }; // this will pass
a = b;
{ a === b : "a and b are not connected!" }; // this will pass
{ a !== b : "a and b are connected!" }; // this will fail
The operators ''==='' and ''!=='' are used to check that the two signals are connected or disconnected at the point the assertion was encountered during circuit construction.
===== Log Messages =====
ACT supports debug log messages in verbose mode. A debug log statement can be written as:
...
${ "Hello!" }; // log message "Hello"
...
When this construct is encountered, a log message is displayed. By default these messages are ignored; to see them, use the ''-Vconfig'' ACT command-line option to any ACT tool. (Note that this will also display the names of the configuration files loaded by ACT.)
A log message can include multiple values, including parameter expressions. This can be useful to check values of parameters.
${ "Parameter i has value ", i }; // display the value of i