[LLVMdev] [Patch] Adding unit tests to LLVM

Mark Kromis greybird at mac.com
Sat Dec 27 19:58:05 PST 2008


On Dec 27, 2008, at 10:33 PM, Misha Brukman wrote:

> 2008/12/27 Mark Kromis <greybird at mac.com>
> So are you planning on maintaining whatever test system, or just  
> have them as a pre-requisite. For example are you going to have the  
> gtest incorporated, or have them install it separately first? I was  
> under the impression that the user would have to install gtest first.
>
> The current plan is to check in the unittest library into LLVM and  
> build it as part of the test process, so the user doesn't have to do  
> anything separately.
>
>
>> Boost also seems to want to use exceptions, and LLVM does not want  
>> to.  I'm not sure if there would be some difficulties in running a  
>> build where some libraries are compiled with no exceptions, some  
>> with, and the results are linked together.  At the best case, it  
>> would complicate our build system to be able to support different  
>> set of flags for building LLVM libraries vs. Boost.Test (and the  
>> rest of Boost that we import).
>
> http://www.boost.org/doc/libs/1_37_0/libs/utility/throw_exception.html
> #define BOOST_NO_EXCEPTIONS
>
> Thanks for the pointer.
>> Sample usage of Boost.Test: http://svn.boost.org/svn/boost/trunk/libs/test/example/unit_test_example_12.cpp
>> Note the code at the end setting up the test suite -- this is  
>> boilerplate code that I think shouldn't be necessary to setup and  
>> run tests.
>
> http://svn.boost.org/svn/boost/trunk/libs/test/example/unit_test_example_01.cpp
> My test cases are not that in-depth, I'm much closer to sample 1. I  
> haven't found a reason to go that crazy yet.
>
> You would need to use fixtures if you are testing classes and their  
> interactions, otherwise each of your test functions will re-do  
> everything that's in the fixture's SetUp() method -- why would you  
> want to repeat the same setup code for every test case?

They have something similar, non obvious though.
http://gamesfromwithin.com/?p=29#comment-47


>
>> Google Test, on the other hand, has no external dependencies, and  
>> is distributed as a dozen of .h/.cc files; supports Makefile,  
>> SCons, and Xcode; and doesn't use exceptions or RTTI.
>
> Gtest is much more lightweight, no comparison there. I know that  
> llvm is not very good with exceptions, but should a test case system  
> support that?
>
> GTest allows testing for exceptions, it just doesn't require them to  
> work properly:
> http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide#Exception_Assertions

ah ok. I misunderstood it then.

>
>> Sample usage of GTest: http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc
>> GTest-specific LOC besides the #include statement: 0.
>
> I think it links to a library as well.
>
> Yes, that's true -- just about any unittesting library will have  
> that requirement, that wasn't part of the comparison.  I was  
> pointing out how much C++ a user has to write in their test files  
> for a reasonable test with fixtures.
>
> Also for a note of reference, your links to the examples are the  
> most advanced samples. So boost can do more, thus has more weight/ 
> bloat behind it.
>
> Gordon Henriksen pointed out earlier in the thread that Boost.Test  
> will require pulling in 500 headers from Boost just to work, so  
> that's pretty heavy weight.  Also, I was comparing apples-to-apples,  
> not taking the simplest example of GTest and the most complex of  
> Boost -- the two examples I chose were doing the same thing, i.e.,  
> tests with fixtures.

ok. I havn't used fixtures for unit testing. Most of the classes don't  
really cross each other that much.

>
> What does Boost provide that GTest does not, that you think LLVM  
> needs, such that it's worth importing the entire Boost distribution  
> into the LLVM tree?
>
> Were the other test kits looked at? Is gtest the best solution for  
> the project.
>
> There are dozens of C++ unittesting libraries out there, I admit I  
> haven't looked at all of them.  I don't know which ones are still  
> under active development or use, but I (and a few other posters) are  
> familiar with and have used GTest enough to say that it's very well  
> suited for LLVM.
>
> Is this something your planning as putting in the tree, thus require  
> pulling in changes from google (license allowing), or does user need  
> to have the libraries/headers pre-installed?
>
> I already answered this question above (first option: in the tree).   
> GTest is under the BSD license, which is compatible with LLVM  
> (though I am not a copyright lawyer).
>
> For example gtest is very light weight test kit, that can do the  
> job, but will the tests outgrow what the test kit can do, and cause  
> a conversion to a more advanced one later?
>
> As soon as LLVM outgrows what GTest can do, we can easily write  
> wrapper macros to forward from GTest-style macros to the other, more  
> suitable framework; however, I think you're conflating the two  
> concepts of "light-weight" and "trivial" -- GTest is light-weight,  
> but not trivial.

I was just concerned that it was too light-weight. Not really dealing  
with gtest is why I asked the question.

>
> Misha
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev


Regards,
Mark Kromis

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081227/fb81ad27/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081227/fb81ad27/attachment.sig>


More information about the llvm-dev mailing list