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

Magnus Therning magnus at therning.org
Sun Jul 22 09:42:35 CEST 2012


On Sat, Jul 21, 2012 at 02:53:41PM -0400, Michael Orlitzky wrote:
>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

Very possible but correctness trumps speed ;-)

The only only solution I've thought of is to use a C preprocessor to
control what's exported.  Of course that means the tests can't link
against the library.

/M

-- 
Magnus Therning                      OpenPGP: 0xAB4DFBA4 
email: magnus at therning.org   jabber: magnus at therning.org
twitter: magthe               http://therning.org/magnus

I invented the term Object-Oriented, and I can tell you I did not have
C++ in mind.
     -- Alan Kay
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120722/3866ff5b/attachment.pgp>


More information about the Beginners mailing list