src/core/test/hash-test-suite.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Tue, 13 Nov 2012 16:35:51 -0800
branchhash
changeset 9931 a3edc13a84f3
parent 9929 3e8510caf03a
child 9932 0fd1bdf7671f
permissions -rw-r--r--
Change clear() to return Hash & instead of Hash *
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9924
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     2
/*
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     3
 * Copyright (c) 2012 Lawrence Livermore National Laboratory
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     4
 *
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     8
 *
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    12
 * GNU General Public License for more details.
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    13
 *
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    17
 *
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    18
 * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    19
 */
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    20
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    21
#include <iomanip>
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    22
#include <string>
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    23
9929
3e8510caf03a Refactor to make include order explicit, without guards.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9928
diff changeset
    24
#include "ns3/test.h"
9924
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    25
#include "ns3/hash.h"
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    26
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    27
namespace ns3 {
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    28
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    29
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    30
//----------------------------
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    31
//
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    32
// Test default hash on fixed string
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    33
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    34
class HashFoxTestCase : public TestCase
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    35
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    36
public:
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    37
  HashFoxTestCase ();
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    38
  virtual ~HashFoxTestCase ();
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    39
private:
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    40
  virtual void DoRun (void);
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    41
};
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    42
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    43
HashFoxTestCase::HashFoxTestCase ()
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    44
  : TestCase ("Check default Hash on a known string")
9924
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    45
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    46
}
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    47
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    48
HashFoxTestCase::~HashFoxTestCase ()
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    49
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    50
}
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    51
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    52
void
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    53
HashFoxTestCase::DoRun (void)
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    54
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    55
  std::string key("The quick brown fox.");
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    56
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    57
  uint32_t h32r = 0xd138bc62;  // murmur3(key)
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    58
  uint32_t h32 = Hash32 (key);
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    59
  NS_TEST_ASSERT_MSG_EQ (h32, h32r,
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    60
                         "Hash32 produced " << std::hex << std::setw ( 8) << h32
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    61
                         << ", expected "   << std::hex << std::setw ( 8) << h32r
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    62
                         );
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    63
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    64
  uint64_t h64r = 0xfc30fb5d90d6e3a9;
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    65
  uint64_t h64 = Hash64 (key);
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    66
  NS_TEST_ASSERT_MSG_EQ (h64, h64r,
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    67
                         "Hash64 produced " << std::hex << std::setw (16) << h64
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    68
                         << ", expected "   << std::hex << std::setw (16) << h64r
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    69
                         );
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    70
}
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
    71
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    72
//----------------------------
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    73
//
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    74
// Test FNV hash on fixed string
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    75
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    76
class HashFnv1aTestCase : public TestCase
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    77
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    78
public:
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    79
  HashFnv1aTestCase ();
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    80
  virtual ~HashFnv1aTestCase ();
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    81
private:
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    82
  virtual void DoRun (void);
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    83
};
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    84
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    85
HashFnv1aTestCase::HashFnv1aTestCase ()
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    86
  : TestCase ("Check FNV1A Hash on a known string")
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    87
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    88
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    89
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    90
HashFnv1aTestCase::~HashFnv1aTestCase ()
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    91
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    92
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    93
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    94
void
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    95
HashFnv1aTestCase::DoRun (void)
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    96
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    97
  std::string key("The quick brown fnv1a.");
9929
3e8510caf03a Refactor to make include order explicit, without guards.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9928
diff changeset
    98
  Hash hasher = Hash ( Create<HashFunction::Fnv1a> () );
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
    99
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   100
  uint32_t h32r = 0x5735855b;  // FNV1A(key)
9931
a3edc13a84f3 Change clear() to return Hash & instead of Hash *
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9929
diff changeset
   101
  uint32_t h32 = hasher.clear ().GetHash32 (key);
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   102
  NS_TEST_ASSERT_MSG_EQ (h32, h32r,
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   103
                         "Hash32 produced " << std::hex << std::setw ( 8) << h32
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   104
                         << ", expected "   << std::hex << std::setw ( 8) << h32r
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   105
                         );
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   106
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   107
  uint64_t h64r = 0x6fb0aea4ad83c27b;
9931
a3edc13a84f3 Change clear() to return Hash & instead of Hash *
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9929
diff changeset
   108
  uint64_t h64 = hasher.clear ().GetHash64 (key);
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   109
  NS_TEST_ASSERT_MSG_EQ (h64, h64r,
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   110
                         "Hash64 produced " << std::hex << std::setw (16) << h64
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   111
                         << ", expected "   << std::hex << std::setw (16) << h64r
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   112
                         );
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   113
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   114
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   115
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   116
//----------------------------
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   117
//
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   118
// Test Murmur3 hash on fixed string
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   119
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   120
class HashMurmur3TestCase : public TestCase
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   121
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   122
public:
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   123
  HashMurmur3TestCase ();
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   124
  virtual ~HashMurmur3TestCase ();
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   125
private:
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   126
  virtual void DoRun (void);
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   127
};
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   128
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   129
HashMurmur3TestCase::HashMurmur3TestCase ()
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   130
  : TestCase ("Check Murmur3 Hash on a known string")
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   131
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   132
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   133
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   134
HashMurmur3TestCase::~HashMurmur3TestCase ()
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   135
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   136
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   137
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   138
void
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   139
HashMurmur3TestCase::DoRun (void)
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   140
{
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   141
  std::string key("The quick brown murmur3.");
9929
3e8510caf03a Refactor to make include order explicit, without guards.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9928
diff changeset
   142
  Hash hasher = Hash ( Create<HashFunction::Murmur3> () );
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   143
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   144
  uint32_t h32r = 0xe8a2d100;  // Murmur3(key)
9931
a3edc13a84f3 Change clear() to return Hash & instead of Hash *
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9929
diff changeset
   145
  uint32_t h32 = hasher.clear ().GetHash32 (key);
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   146
  NS_TEST_ASSERT_MSG_EQ (h32, h32r,
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   147
                         "Hash32 produced " << std::hex << std::setw ( 8) << h32
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   148
                         << ", expected "   << std::hex << std::setw ( 8) << h32r
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   149
                         );
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   150
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   151
  uint64_t h64r = 0x95373d091a691071;
9931
a3edc13a84f3 Change clear() to return Hash & instead of Hash *
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9929
diff changeset
   152
  uint64_t h64 = hasher.clear ().GetHash64 (key);
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   153
  NS_TEST_ASSERT_MSG_EQ (h64, h64r,
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   154
                         "Hash64 produced " << std::hex << std::setw (16) << h64
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   155
                         << ", expected "   << std::hex << std::setw (16) << h64r
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   156
                         );
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   157
}
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   158
9924
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   159
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   160
//----------------------------
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   161
//
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   162
// Hash tester
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   163
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   164
class HashTestSuite : public TestSuite
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   165
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   166
public:
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   167
  HashTestSuite ();
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   168
};
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   169
  
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   170
HashTestSuite::HashTestSuite ()
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   171
  : TestSuite ("hash", UNIT)
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   172
{
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   173
  AddTestCase (new HashFoxTestCase);
9928
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   174
  AddTestCase (new HashFnv1aTestCase);
f88602ff0540 Fix Hash (Ptr<HashFunc>) implementation, check for null m_impl, add test cases
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9924
diff changeset
   175
  AddTestCase (new HashMurmur3TestCase);
9924
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   176
}
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   177
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   178
static HashTestSuite g_hashTestSuite;  
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   179
  
d5a552660be9 General hash interface, with replaceable hash functions, defaults to murmur3.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
diff changeset
   180
}  // namespace ns3