Plan 9 from Bell Labs’s /usr/web/sources/contrib/de0u/root/sys/src/cmd/divergefs/tests/testdictionary.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <u.h>
#include <libc.h>
#include "common.h"
#include "debug.h"
#include "string.h"
#include "collection.h"
#include "function.h"
#include "array.h"
#include "dictionary.h"
#include "unittest.h"

enum { DEBUG_TESTDICTIONARY = false };

typedef struct TestDictionary
{
  Dictionary *dict;
} TestDictionary;

// char *string_reverse_new(char *self)
// {
//   int i;
//   int length;
//   int halflength;
//   int lastindex;
//   char temp;
//   char *result;
//   assert_valid(self);
// 
//   result = estrdup_fs(self);
//   length = strlen(result);
//   lastindex = length - 1;
//   halflength = length / 2;
//   for(i = 0; i < halflength; ++i)
//   {
//     temp = result[i];
//     result[i] = result[lastindex - i];
//     result[lastindex - i] = temp;
//   }
// 
//   NOISE(DEBUG_TESTDICTIONARY, "string_reverse_new self: %s reversed: %s",
//     self, result);
//   return result;
// }

char *testdictionary_words[] = 
{    
  "acclimatized",
  "acclimatizes",
  "acclimatizing",
  "accolade",
  "accoladed",
  "accolades",
  "worsens",
  "worship",
  "worshiped",
  "worshiper"
};


static void *testdictionary_setup(void)
{
  int i;
  TestDictionary *result = (TestDictionary *)emalloc_fs(sizeof(*result));
  NOISE(DEBUG_TESTDICTIONARY, "entering testdictionary_setup");

  result->dict = dictionary_new(string_isequal, string_hash);
  for(i = 0; i < static_array_length(testdictionary_words); ++i)
  {
    dictionary_add(result->dict, 
      estrdup_fs(testdictionary_words[i]), 
      (void *)strlen(testdictionary_words[i]));
  }

  return result;
}

static void testdictionary_teardown(void *data)
{
  TestDictionary *testdictionary = (TestDictionary *)data;
  dictionary_free_with(testdictionary->dict, free, nil);
  free(testdictionary);
}

static bool testdictionary_add(void *data)
{
  int i;
  TestDictionary *testdictionary = (TestDictionary *)data;
  Dictionary *d;
  assert_valid(testdictionary);
  d = testdictionary->dict;
  assert_valid(d);

  NOISE(DEBUG_TESTDICTIONARY, "testdictionary_add entering with dict: %uX", d);

  test_assert(dictionary_size(d) == static_array_length(testdictionary_words));
  for(i = 0; i < static_array_length(testdictionary_words); ++i)
  {
    NOISE(DEBUG_TESTDICTIONARY, "testdictionary_add testing [%d] = %s", 
      i, testdictionary_words[i]);
    test_assert(dictionary_includes(d, testdictionary_words[i]));
    NOISE(DEBUG_TESTDICTIONARY, "testdictionary_add after includes");
    test_assert((int)dictionary_at(d, testdictionary_words[i]) == 
      strlen(testdictionary_words[i]));
    NOISE(DEBUG_TESTDICTIONARY, "testdictionary_add after at");
  }
  return true;
}

static bool testdictionary_remove(void *data)
{
  TestDictionary *testdictionary = (TestDictionary *)data;
  assert_valid(testdictionary);
  test_assert(dictionary_includes(
    testdictionary->dict, testdictionary_words[0]));
  test_assert(dictionary_remove(testdictionary->dict, testdictionary_words[0]));
  test_assert(dictionary_remove(testdictionary->dict, testdictionary_words[1]));
  test_assert(dictionary_remove(testdictionary->dict, testdictionary_words[2]));
  test_assert_false(dictionary_remove(testdictionary->dict, "nosuchword"));
  test_assert_false(dictionary_includes(
    testdictionary->dict, testdictionary_words[0]));
  return true;
}


static TestFixure testdictionary_fixure =
{
  .setup    = testdictionary_setup,
  .teardown = testdictionary_teardown
};

static TestCaseNamePair testdictionary_testcases[] =
{
  testcasenamepair_make(testdictionary_add)
};

AbstractTest *testdictionary_testsuite(void)
{
  return (AbstractTest *)
    testsuite_make("testdictionary", 
      testdictionary_testcases, static_array_length(testdictionary_testcases), 
      &testdictionary_fixure);
}


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.