[Haskell-beginners] Where do you put your tests?

Michael Orlitzky michael at orlitzky.com
Sat Jul 21 20:53:41 CEST 2012


On 07/21/2012 02:04 PM, Magnus Therning wrote:
> On Sat, Jul 21, 2012 at 7:50 PM, Michael Orlitzky <michael at orlitzky.com> wrote:
>> On 07/19/2012 09:27 AM, damodar kulkarni wrote:
>>>
>>>     Good because library dependencies are reduced, but bad because tests
>>>     are somewhat "disconnected" from the functions they are testing.
>>>
>>>
>>> AFAIK, it's a good engineering practice to separate the tests from the
>>> code they are supposed to test. Code management issues will be there,
>>> but those can be taken care with the help of cabal like tool.
>>> That way, a person who wants to test will use the test-files and the one
>>> who doesn't want will be spared the trouble of separating tests from the
>>> intended function code.
>>>
>>
>> This is the solution I'd prefer, but I quickly ran into a problem: if I
>> want to test internal (non-exported) functions, the tests need to be in
>> the same module as the code.
>>
>> Is there a way around this?
>>
>> (For now, I just put the code in the same file and depend on the test libs.)
> 
> A common issue.  I, and some others I've seen, have a FooInternal
> module exporting *everything* for the tests, and a Foo module
> exporting only the public API.
> 

I think I could get rid of the test lib dependencies this way, but
doesn't the export-everything approach prevent GHC from making certain
optimizations?

  GHC can be quite a bit more aggressive with pieces of code if it
  knows they are not exported.

(I think I may have had evidence of this at one point, but who knows now.)


[1] http://www.haskell.org/ghc/docs/latest/html/users_guide/faster.html



More information about the Beginners mailing list