Skip to content
Snippets Groups Projects
Use:
    ant

...to compile the project.

Use:
    ant dist

...to generate the plugin jar file and a script to run scalac with the plugin.

Then, try for instance:
    ./scalac-funcheck -Xshow-phases

...and notice that funcheck runs right after refchecks. Note that
./scalac-funcheck is generated and contains the full path to the jar file, so
you can use it from any location and it will find what it needs. You may want
to symbolically link to it from ~/bin, for instance.

You can also try:
    ./scalac-funcheck -Xplugin-list

Try:
    ./scalac-funcheck Test.scala

...and notice that the plugin does something (in particular, the compilation
stops right after the plugin).

Try:
    ./scalac-funcheck -P:funcheck:with-code Test.scala

...to achieve the same result but with letting the compiler continue its work.

To clean up:
    ant clean

Useful for showing Scala AST
-----------------------------

Try:
   ./scalac-funcheck -Yshow-trees -Xprint:funcheck Test.scala

...to print the program's AST on the standard output

Try:
   ./scalac-funcheck -Ybrowse:funcheck Test.scala

...to print a Swing-based GUI for browsing the program's AST



ForAll Transformation: How does it work
-----------------------------

First, look at Test4.scala to get an idea of how we can declare properties using "our" Spec library (which has a forAll combinator)

Second, compile the whole project if you didn't yet (simply type: ant)

Third, compile the Test4.scala using scalac extended with the funcheck plugin. You can do this by typing:
    ./scalac-funcheck -cp bin:lib/ScalaCheck-1.5.jar  Test4.scala 

Now run the compiled program using standard the scala environment as follow:
    scala -cp lib/ScalaCheck-1.5.jar:. HeapTest

And you should see a similar output:

+ OK, passed 100 tests.     //Nice!! This means the property was ok!
                                                  
! Falsified after 1 passed tests.     //Good, The property was indeed wrong                                        
> ARG_0: "1"
java.lang.ExceptionInInitializerError
	[...]


Note: The ScalaCheck-1.5.jar library needs to be in the classpath for both compilation and execution because the FunCheck 
plugin rely on it for transforming every Spec.forAll (internal to our library) call to a scalacheck Prop.forAll call.