[Clam-devel] Re: Some steps to take on your own
David García Garzón
dgarcia at iua.upf.edu
Wed Jun 11 05:03:33 PDT 2008
Proceed the same way with the ContiguousSegmentation
* Proceed with the same steps and patch points than ContiguousSegmentation
** Make the test red
** Greenify
** Refactor
* You may have also bugs in there, send me a mail if so.
* After that you should have the same content on both classes, as we rely on
the virtual function FillArray, so we'll do a refactoring in two steps:
** Choose one implementation (ie. Discontinuous) and move it to the base
class, (no StoreOn in Discontinuous now). all test passing, commit
** Remove the remaining implementation in Contiguous, all test passing, commit
On Dimecres 11 Juny 2008, JunJun wrote:
> > 1. Implement the testStoreOn() test method. The code could be something
> > like that:
> >
> > #include "XMLTestHelper.hxx"
> > ....
> >
> > void testStoreOn()
> > {
> > const double onsets[] = {90,100,110};
> > ContiguousSegmentation segmentation(200, onsets, onsets+3);
> >
> > std::ostringstream stream;
> > XMLStorage::Dump(segmentation, "Segmentation", stream);
> >
> > CLAMTEST_ASSERT_XML_EQUAL(
> > "<Segmentation size="3">90 100 110</Segmentation>"
> > , stream.str());
> > }
> >
> > Notice that this would be the output we are outputing now for such
> > segmentation as we are doing now.
> > Do the needed changes to compile and to make it fail (by doing nothing in
> > StoreOn)
>
> Done. It fails.
>
> > 2. We should make it green by building in StoreOn an array, filling it in
> > with the method we did the other day, and delegating onto the array store
> > on.
> >
> > ContinuousSegmentation::StoreOn(Storage & storage) const
> > {
> > CLAM::Array array;
> > fillArray(array);
> > array.StoreOn(storage);
> > }
> >
> > In order to be able to use the fillArray method in StoreOn which is a
> > const method, you should define fillArray method also as a constant one:
> > void fillArray(DataArray & array) const <- this const
> > The constness should be changed at onece in the base class and in the
> > derived classes.
> >
> > After doing that you will see that the test is not as green as we should
> > expect. We catched an error!! What's happening there?
> >
> > Reply with copy to the list or at irc.
>
> Yes, we catch the error displayed as below:
> ************************************************************************
> * . CLAMTest::ContiguousSegmentationTest::testStoreOn
> *
> *This application has requested the Runtime to terminate it in an unusual
> way. *Please contact the application's support team for more information. *
> *..........................................................................
>......................... *
> *..........................terminate called after throwing an instance of
> 'CLAM::ErrAssertionFailed' * what(): Array::operator[]: Index out of
> range
> *This may happen if you forgot to call SetSize(...) in your code.
> *This is now needed. Just calling Resize() is not enough any more
> **************************************************************************
> Then I checked the code and caught a bug in ContiguousSegmentation:
> void fillArray(DataArray& segmentation) const
> {
> unsigned nSegments= _onsets.size();
> segmentation.Resize(nSegments-1);
> segmentation.SetSize(nSegments-1);
> for(unsigned i=1; i<nSegments; i++)
> segmentation[i]=_onsets[i]; //Bug!! it should be
> "segmentation[i-1]=_onsets[i]; " }
> which is not introduced by me who just did a copy&paste job :-)
> I've fixed that and the test is GREEN now:
>
> ...........................................................................
>..................................................
>
>
> OK (125 tests)
>
>
> Cool!
> What's the next?
>
> > David.
--
David García Garzón
(Work) dgarcia at iua dot upf anotherdot es
http://www.iua.upf.edu/~dgarcia
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.clam-project.org/pipermail/clam-devel-clam-project.org/attachments/20080611/8682c632/attachment-0001.sig>
More information about the clam-devel
mailing list