On 11 Dec 2001 07:35:20 -0800, rbinder / rbsc.com (Bob Binder) wrote: >Robert C. Martin <rmartin @ objectmentor . com> wrote in message news:<d62b1ukh61hal31708f4afr99ppg3utkde / 4ax.com>... >> On 10 Dec 2001 09:35:08 -0800, rbinder / rbsc.com (Bob Binder) wrote: >> >> >Robert C. Martin <rmartin @ objectmentor . com> wrote in message news:<h2n41ucnnc8ipnseets4eess8rbqehkes6 / 4ax.com>... >> >> On Sat, 08 Dec 2001 00:35:43 -0600, Robert C. Martin <rmartin @ >> >> objectmentor . com> wrote: >> >> >> >> >On 7 Dec 2001 02:04:08 -0800, stephen.hill / motorola.com (Steve Hill) >> >> >wrote: >> >> > >> >> >>What tests would you write for a function that takes 3 numbers (the >> >> >>side lengths of a triangle) , and returns whether the triangle is >> >> >>equilateral, scalene or isoceles. >> >> > >> >> >Set<int> sides; // data structure allows no duplicates. >> >> >sides.add(a); >> >> >sides.add(b); >> >> >sides.add(c); >> >> >return sides.length(); // 1 = equilateral, 2=isoceles, 3=scalene. >> ^^^^^^^^^--oops. >> >> > >> >> >What am I missing? >> > >> >In this example, wouldn't using an int set for the sides prevent >> >representing any triangle with two or more equal lengths -- I think a >> >bag would do the job. Assuming that your set would reject identical >> >values, any test suite which did not include tests like 3,3,4 or 3,3,3 >> >would miss that bug. >> >> The intent was to return a 1 for equilateral, 2 for isoceles, and 3 >> for scalene. Representing the triangle was not part of the job. >> > >Ok, this is clever way to do the classification. But it seems to me >this is only a fragment of the solution to the scope of the complete >triangle problem, and conclusions drawn about testing this fragment >versus testing a complete solution are skewed. > >Unless Set objects silently reject dups, the client code will have to >have a catch block, which means part of the classification scheme >resides in the client. The client will have to constrain lengths to 1 >or greater, and assure that the sides are constructable for the >isoceles and scalene cases. If not, your code will claim that 1,1,10 >and 1,2,10 are sides of triangle, which they are not. As the >implementation of these constraints is necessary for producing correct >answers, it should be included in scope of the test suite. > You must also add a reporting mechanism for the violation of these tests. And then you need to add more tests for the reporting mechanism.