- Fixed bug that was causing more non-unique UUIDs.  Here are the
  changes made:
    - Task.cpp, tasks are no longer provided with a UUID in Task::Task.
      This prevents the global context.task from being constructed before
      srandom/srand is called.
    - main.cpp, instead of srandom/srand (time (NULL)), it now uses
      struct timeval tv_usec member, which has a micro-second granularity,
      instead of time (NULL) which has a second granularity.  When
      "task add ..." is called in a unit test, several calls are made per
      second, this the random number generator is seeded with the same
      value.
    - Modified the unit test to cover all 6 tasks created, instead of
      5.
This commit is contained in:
Paul Beckingham 2009-07-05 23:59:11 -04:00
parent 28ab9e36cd
commit 51ad77e952
3 changed files with 12 additions and 7 deletions

View file

@ -38,8 +38,6 @@
Task::Task () Task::Task ()
: id (0) : id (0)
{ {
// Each new task gets a uuid.
set ("uuid", uuid ()); // No i18n
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -27,7 +27,7 @@
#include <iostream> #include <iostream>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <sys/time.h>
#include "Context.h" #include "Context.h"
#include "../auto.h" #include "../auto.h"
@ -36,10 +36,12 @@ Context context;
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
// Set up randomness. // Set up randomness.
struct timeval tv;
::gettimeofday (&tv, NULL);
#ifdef HAVE_SRANDOM #ifdef HAVE_SRANDOM
srandom (time (NULL)); srandom (tv.tv_usec);
#else #else
srand (time (NULL)); srand (tv.tv_usec);
#endif #endif
int status = 0; int status = 0;

View file

@ -73,8 +73,13 @@ $output = qx{../task rc:uuid.rc 5 info};
push @all_uuids, $uuid; push @all_uuids, $uuid;
$unique_uuids{$uuid} = undef; $unique_uuids{$uuid} = undef;
is (scalar (@all_uuids), 5, '5 tasks created'); $output = qx{../task rc:uuid.rc 6 info};
is (scalar (keys %unique_uuids), 5, '5 unique UUIDs'); ($uuid) = $output =~ /UUID\s+(\S+)/;
push @all_uuids, $uuid;
$unique_uuids{$uuid} = undef;
is (scalar (@all_uuids), 6, '6 tasks created');
is (scalar (keys %unique_uuids), 6, '6 unique UUIDs');
# Cleanup. # Cleanup.
unlink 'pending.data'; unlink 'pending.data';