Skip to content

In chapter 9, Set_union(s,NULL) clones a set.Its member size is smaller than expected #8

@GoogleCodeExporter

Description

@GoogleCodeExporter
What steps will reproduce the problem?
In CII's chapter 9, Set_union(s,NULL) clones a set, but the cloned set's size 
is smaller.

   Here is test code:

   Set_T s,t;
   s = Set_new(1024,NULL,NULL);
   t = Set_union(s,NULL);
   printf("s:%d, t:%d\n", s->size,t->size);    

   output is: 
   s:1021, t:509 

   The problem seems related to Set_new's implementation:
        static int primes[] = { 509, 509, 1021, 2053, 4093,
                8191, 16381, 32771, 65521, INT_MAX };
        assert(hint >= 0);
        for (i = 1; primes[i] < hint; i++)
                ;

   When giving it a hint, it searches the primes table and use the greatest one less than hint.
   If  the hint happens to be the number in primes, a much less value will be used.

What is the expected output? What do you see instead?
   When clone a set, it's member size should be the same.

What version of the product are you using? On what operating system?
 N/A

Please provide any additional information below.
 N/A

Original issue reported on code.google.com by ligong...@gmail.com on 27 Jun 2012 at 12:46

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions