From 921c78bd91a90721afe1d60c6d422655a0649e6c Mon Sep 17 00:00:00 2001 From: khizmax Date: Tue, 27 Oct 2015 22:52:40 +0300 Subject: [PATCH] Removed sha-256 hash from test --- cds/intrusive/michael_set_nogc.h | 2 +- projects/Win/vc12/unit-prerequisites.vcxproj | 2 - projects/Win/vc14/unit-prerequisites.vcxproj | 2 - projects/source.test-common.mk | 3 +- tests/CMakeLists.txt | 3 +- tests/hashing/hash_func.h | 2 - tests/hashing/sha256.cpp | 411 ------------------ tests/hashing/sha256.h | 78 ---- tests/unit/map2/map_defs.h | 53 --- tests/unit/map2/map_find_string.h | 2 - .../map2/map_find_string_feldmanhashmap.cpp | 1 - tests/unit/map2/map_insdel_item_string.h | 2 - .../map_insdel_item_string_feldmanhashmap.cpp | 1 - tests/unit/map2/map_insdel_string.h | 2 - .../map2/map_insdel_string_feldmanhashmap.cpp | 1 - tests/unit/map2/map_type_feldman_hashmap.h | 29 -- tests/unit/set2/set_defs.h | 53 --- tests/unit/set2/set_insdel_string.h | 2 - .../set2/set_insdel_string_feldmanhashset.cpp | 1 - tests/unit/set2/set_type_feldman_hashset.h | 25 -- 20 files changed, 3 insertions(+), 672 deletions(-) delete mode 100644 tests/hashing/sha256.cpp delete mode 100644 tests/hashing/sha256.h diff --git a/cds/intrusive/michael_set_nogc.h b/cds/intrusive/michael_set_nogc.h index 3eaeb046..2bb45837 100644 --- a/cds/intrusive/michael_set_nogc.h +++ b/cds/intrusive/michael_set_nogc.h @@ -262,7 +262,7 @@ namespace cds { namespace intrusive { CDS_DEPRECATED("use contains()") value_type * find_with( Q const& key, Less pred ) { - return contains( key ); + return contains( key, pred ); } //@endcond diff --git a/projects/Win/vc12/unit-prerequisites.vcxproj b/projects/Win/vc12/unit-prerequisites.vcxproj index d0c00115..99f7a1b3 100644 --- a/projects/Win/vc12/unit-prerequisites.vcxproj +++ b/projects/Win/vc12/unit-prerequisites.vcxproj @@ -418,7 +418,6 @@ - @@ -438,7 +437,6 @@ Level2 - diff --git a/projects/Win/vc14/unit-prerequisites.vcxproj b/projects/Win/vc14/unit-prerequisites.vcxproj index 68cfece4..6668940f 100644 --- a/projects/Win/vc14/unit-prerequisites.vcxproj +++ b/projects/Win/vc14/unit-prerequisites.vcxproj @@ -495,7 +495,6 @@ - @@ -517,7 +516,6 @@ Level2 - diff --git a/projects/source.test-common.mk b/projects/source.test-common.mk index 97aca01d..b478e740 100644 --- a/projects/source.test-common.mk +++ b/projects/source.test-common.mk @@ -5,7 +5,6 @@ CDS_TESTCOMMON_SOURCES := \ tests/unit/michael_alloc.cpp \ tests/unit/ellen_bintree_update_desc_pool.cpp \ tests/hashing/city.cpp \ - tests/hashing/md5.cpp \ - tests/hashing/sha256.cpp + tests/hashing/md5.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8bbd6f53..2769e19f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,8 +7,7 @@ set(SOURCES cppunit/test_main.cpp unit/michael_alloc.cpp unit/ellen_bintree_update_desc_pool.cpp hashing/city.cpp - hashing/md5.cpp - hashing/sha256.cpp) + hashing/md5.cpp) add_library(${TEST_COMMON} OBJECT ${SOURCES}) diff --git a/tests/hashing/hash_func.h b/tests/hashing/hash_func.h index 8dd23aba..0cb77168 100644 --- a/tests/hashing/hash_func.h +++ b/tests/hashing/hash_func.h @@ -5,7 +5,6 @@ #include -#include "hashing/sha256.h" #include "hashing/md5.h" #if CDS_BUILD_BITS == 64 # include "hashing/city.h" @@ -43,7 +42,6 @@ namespace hashing { } }; - typedef hasher sha256; typedef hasher md5; #if CDS_BUILD_BITS == 64 diff --git a/tests/hashing/sha256.cpp b/tests/hashing/sha256.cpp deleted file mode 100644 index 0c6138cd..00000000 --- a/tests/hashing/sha256.cpp +++ /dev/null @@ -1,411 +0,0 @@ -// ////////////////////////////////////////////////////////// -// sha256.cpp -// Copyright (c) 2014,2015 Stephan Brumme. All rights reserved. -// see http://create.stephan-brumme.com/disclaimer.html -// - -#include "sha256.h" - -// big endian architectures need #define __BYTE_ORDER __BIG_ENDIAN -#ifndef _MSC_VER -#include -#endif - - -/// same as reset() -SHA256::SHA256() -{ - reset(); -} - - -/// restart -void SHA256::reset() -{ - m_numBytes = 0; - m_bufferSize = 0; - - // according to RFC 1321 - m_hash[0] = 0x6a09e667; - m_hash[1] = 0xbb67ae85; - m_hash[2] = 0x3c6ef372; - m_hash[3] = 0xa54ff53a; - m_hash[4] = 0x510e527f; - m_hash[5] = 0x9b05688c; - m_hash[6] = 0x1f83d9ab; - m_hash[7] = 0x5be0cd19; -} - - -namespace -{ - inline uint32_t rotate(uint32_t a, uint32_t c) - { - return (a >> c) | (a << (32 - c)); - } - - inline uint32_t swap(uint32_t x) - { -#if defined(__GNUC__) || defined(__clang__) - return __builtin_bswap32(x); -#endif -#ifdef MSC_VER - return _byteswap_ulong(x); -#endif - - return (x >> 24) | - ((x >> 8) & 0x0000FF00) | - ((x << 8) & 0x00FF0000) | - (x << 24); - } - - // mix functions for processBlock() - inline uint32_t f1(uint32_t e, uint32_t f, uint32_t g) - { - uint32_t term1 = rotate(e, 6) ^ rotate(e, 11) ^ rotate(e, 25); - uint32_t term2 = (e & f) ^ (~e & g); //(g ^ (e & (f ^ g))) - return term1 + term2; - } - - inline uint32_t f2(uint32_t a, uint32_t b, uint32_t c) - { - uint32_t term1 = rotate(a, 2) ^ rotate(a, 13) ^ rotate(a, 22); - uint32_t term2 = ((a | b) & c) | (a & b); //(a & (b ^ c)) ^ (b & c); - return term1 + term2; - } -} - - -/// process 64 bytes -void SHA256::processBlock(const void* data) -{ - // get last hash - uint32_t a = m_hash[0]; - uint32_t b = m_hash[1]; - uint32_t c = m_hash[2]; - uint32_t d = m_hash[3]; - uint32_t e = m_hash[4]; - uint32_t f = m_hash[5]; - uint32_t g = m_hash[6]; - uint32_t h = m_hash[7]; - - // data represented as 16x 32-bit words - const uint32_t* input = (uint32_t*) data; - // convert to big endian - uint32_t words[64]; - int i; - for (i = 0; i < 16; i++) -#if defined(__BYTE_ORDER) && (__BYTE_ORDER != 0) && (__BYTE_ORDER == __BIG_ENDIAN) - words[i] = input[i]; -#else - words[i] = swap(input[i]); -#endif - - uint32_t x,y; // temporaries - - // first round - x = h + f1(e,f,g) + 0x428a2f98 + words[ 0]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0x71374491 + words[ 1]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0xb5c0fbcf + words[ 2]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0xe9b5dba5 + words[ 3]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x3956c25b + words[ 4]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0x59f111f1 + words[ 5]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x923f82a4 + words[ 6]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0xab1c5ed5 + words[ 7]; y = f2(b,c,d); e += x; a = x + y; - - // secound round - x = h + f1(e,f,g) + 0xd807aa98 + words[ 8]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0x12835b01 + words[ 9]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0x243185be + words[10]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0x550c7dc3 + words[11]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x72be5d74 + words[12]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0x80deb1fe + words[13]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x9bdc06a7 + words[14]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0xc19bf174 + words[15]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 24 words - for (; i < 24; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // third round - x = h + f1(e,f,g) + 0xe49b69c1 + words[16]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0xefbe4786 + words[17]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0x0fc19dc6 + words[18]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0x240ca1cc + words[19]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x2de92c6f + words[20]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0x4a7484aa + words[21]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x5cb0a9dc + words[22]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0x76f988da + words[23]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 32 words - for (; i < 32; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // fourth round - x = h + f1(e,f,g) + 0x983e5152 + words[24]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0xa831c66d + words[25]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0xb00327c8 + words[26]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0xbf597fc7 + words[27]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0xc6e00bf3 + words[28]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0xd5a79147 + words[29]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x06ca6351 + words[30]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0x14292967 + words[31]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 40 words - for (; i < 40; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // fifth round - x = h + f1(e,f,g) + 0x27b70a85 + words[32]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0x2e1b2138 + words[33]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0x4d2c6dfc + words[34]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0x53380d13 + words[35]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x650a7354 + words[36]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0x766a0abb + words[37]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x81c2c92e + words[38]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0x92722c85 + words[39]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 48 words - for (; i < 48; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // sixth round - x = h + f1(e,f,g) + 0xa2bfe8a1 + words[40]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0xa81a664b + words[41]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0xc24b8b70 + words[42]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0xc76c51a3 + words[43]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0xd192e819 + words[44]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0xd6990624 + words[45]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0xf40e3585 + words[46]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0x106aa070 + words[47]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 56 words - for (; i < 56; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // seventh round - x = h + f1(e,f,g) + 0x19a4c116 + words[48]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0x1e376c08 + words[49]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0x2748774c + words[50]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0x34b0bcb5 + words[51]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x391c0cb3 + words[52]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0x4ed8aa4a + words[53]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0x5b9cca4f + words[54]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0x682e6ff3 + words[55]; y = f2(b,c,d); e += x; a = x + y; - - // extend to 64 words - for (; i < 64; i++) - words[i] = words[i-16] + - (rotate(words[i-15], 7) ^ rotate(words[i-15], 18) ^ (words[i-15] >> 3)) + - words[i-7] + - (rotate(words[i- 2], 17) ^ rotate(words[i- 2], 19) ^ (words[i- 2] >> 10)); - - // eigth round - x = h + f1(e,f,g) + 0x748f82ee + words[56]; y = f2(a,b,c); d += x; h = x + y; - x = g + f1(d,e,f) + 0x78a5636f + words[57]; y = f2(h,a,b); c += x; g = x + y; - x = f + f1(c,d,e) + 0x84c87814 + words[58]; y = f2(g,h,a); b += x; f = x + y; - x = e + f1(b,c,d) + 0x8cc70208 + words[59]; y = f2(f,g,h); a += x; e = x + y; - x = d + f1(a,b,c) + 0x90befffa + words[60]; y = f2(e,f,g); h += x; d = x + y; - x = c + f1(h,a,b) + 0xa4506ceb + words[61]; y = f2(d,e,f); g += x; c = x + y; - x = b + f1(g,h,a) + 0xbef9a3f7 + words[62]; y = f2(c,d,e); f += x; b = x + y; - x = a + f1(f,g,h) + 0xc67178f2 + words[63]; y = f2(b,c,d); e += x; a = x + y; - - // update hash - m_hash[0] += a; - m_hash[1] += b; - m_hash[2] += c; - m_hash[3] += d; - m_hash[4] += e; - m_hash[5] += f; - m_hash[6] += g; - m_hash[7] += h; -} - - -/// add arbitrary number of bytes -void SHA256::add(const void* data, size_t numBytes) -{ - const uint8_t* current = (const uint8_t*) data; - - if (m_bufferSize > 0) - { - while (numBytes > 0 && m_bufferSize < BlockSize) - { - m_buffer[m_bufferSize++] = *current++; - numBytes--; - } - } - - // full buffer - if (m_bufferSize == BlockSize) - { - processBlock(m_buffer); - m_numBytes += BlockSize; - m_bufferSize = 0; - } - - // no more data ? - if (numBytes == 0) - return; - - // process full blocks - while (numBytes >= BlockSize) - { - processBlock(current); - current += BlockSize; - m_numBytes += BlockSize; - numBytes -= BlockSize; - } - - // keep remaining bytes in buffer - while (numBytes > 0) - { - m_buffer[m_bufferSize++] = *current++; - numBytes--; - } -} - - -/// process final block, less than 64 bytes -void SHA256::processBuffer() -{ - // the input bytes are considered as bits strings, where the first bit is the most significant bit of the byte - - // - append "1" bit to message - // - append "0" bits until message length in bit mod 512 is 448 - // - append length as 64 bit integer - - // number of bits - size_t paddedLength = m_bufferSize * 8; - - // plus one bit set to 1 (always appended) - paddedLength++; - - // number of bits must be (numBits % 512) = 448 - size_t lower11Bits = paddedLength & 511; - if (lower11Bits <= 448) - paddedLength += 448 - lower11Bits; - else - paddedLength += 512 + 448 - lower11Bits; - // convert from bits to bytes - paddedLength /= 8; - - // only needed if additional data flows over into a second block - unsigned char extra[BlockSize]; - - // append a "1" bit, 128 => binary 10000000 - if (m_bufferSize < BlockSize) - m_buffer[m_bufferSize] = 128; - else - extra[0] = 128; - - size_t i; - for (i = m_bufferSize + 1; i < BlockSize; i++) - m_buffer[i] = 0; - for (; i < paddedLength; i++) - extra[i - BlockSize] = 0; - - // add message length in bits as 64 bit number - uint64_t msgBits = 8 * (m_numBytes + m_bufferSize); - // find right position - unsigned char* addLength; - if (paddedLength < BlockSize) - addLength = m_buffer + paddedLength; - else - addLength = extra + paddedLength - BlockSize; - - // must be big endian - *addLength++ = (unsigned char)((msgBits >> 56) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 48) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 40) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 32) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 24) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 16) & 0xFF); - *addLength++ = (unsigned char)((msgBits >> 8) & 0xFF); - *addLength = (unsigned char)( msgBits & 0xFF); - - // process blocks - processBlock(m_buffer); - // flowed over into a second block ? - if (paddedLength > BlockSize) - processBlock(extra); -} - - -/// return latest hash as 64 hex characters -std::string SHA256::getHash() -{ - // compute hash (as raw bytes) - unsigned char rawHash[HashBytes]; - getHash(rawHash); - - // convert to hex string - std::string result; - result.reserve(2 * HashBytes); - for (int i = 0; i < HashBytes; i++) - { - static const char dec2hex[16+1] = "0123456789abcdef"; - result += dec2hex[(rawHash[i] >> 4) & 15]; - result += dec2hex[ rawHash[i] & 15]; - } - - return result; -} - - -/// return latest hash as bytes -void SHA256::getHash(unsigned char buffer[SHA256::HashBytes]) -{ - // save old hash if buffer is partially filled - uint32_t oldHash[HashValues]; - for (int i = 0; i < HashValues; i++) - oldHash[i] = m_hash[i]; - - // process remaining bytes - processBuffer(); - - unsigned char* current = buffer; - for (int i = 0; i < HashValues; i++) - { - *current++ = (m_hash[i] >> 24) & 0xFF; - *current++ = (m_hash[i] >> 16) & 0xFF; - *current++ = (m_hash[i] >> 8) & 0xFF; - *current++ = m_hash[i] & 0xFF; - - // restore old hash - m_hash[i] = oldHash[i]; - } -} - - -/// compute SHA256 of a memory block -std::string SHA256::operator()(const void* data, size_t numBytes) -{ - reset(); - add(data, numBytes); - return getHash(); -} - - -/// compute SHA256 of a string, excluding final zero -std::string SHA256::operator()(const std::string& text) -{ - reset(); - add(text.c_str(), text.size()); - return getHash(); -} diff --git a/tests/hashing/sha256.h b/tests/hashing/sha256.h deleted file mode 100644 index aeaf314f..00000000 --- a/tests/hashing/sha256.h +++ /dev/null @@ -1,78 +0,0 @@ -// ////////////////////////////////////////////////////////// -// sha256.h -// Copyright (c) 2014,2015 Stephan Brumme. All rights reserved. -// see http://create.stephan-brumme.com/disclaimer.html -// - -#pragma once - -//#include "hash.h" -#include - -// define fixed size integer types -#ifdef _MSC_VER -// Windows -typedef unsigned __int8 uint8_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#else -// GCC -#include -#endif - - -/// compute SHA256 hash -/** Usage: - SHA256 sha256; - std::string myHash = sha256("Hello World"); // std::string - std::string myHash2 = sha256("How are you", 11); // arbitrary data, 11 bytes - - // or in a streaming fashion: - - SHA256 sha256; - while (more data available) - sha256.add(pointer to fresh data, number of new bytes); - std::string myHash3 = sha256.getHash(); - */ -class SHA256 //: public Hash -{ -public: - /// split into 64 byte blocks (=> 512 bits), hash is 32 bytes long - enum { BlockSize = 512 / 8, HashBytes = 32 }; - - /// same as reset() - SHA256(); - - /// compute SHA256 of a memory block - std::string operator()(const void* data, size_t numBytes); - /// compute SHA256 of a string, excluding final zero - std::string operator()(const std::string& text); - - /// add arbitrary number of bytes - void add(const void* data, size_t numBytes); - - /// return latest hash as 64 hex characters - std::string getHash(); - /// return latest hash as bytes - void getHash(unsigned char buffer[HashBytes]); - - /// restart - void reset(); - -private: - /// process 64 bytes - void processBlock(const void* data); - /// process everything left in the internal buffer - void processBuffer(); - - /// size of processed data in bytes - uint64_t m_numBytes; - /// valid bytes in m_buffer - size_t m_bufferSize; - /// bytes not processed yet - uint8_t m_buffer[BlockSize]; - - enum { HashValues = HashBytes / 4 }; - /// hash, stored as integers - uint32_t m_hash[HashValues]; -}; diff --git a/tests/unit/map2/map_defs.h b/tests/unit/map2/map_defs.h index b44879de..3c398160 100644 --- a/tests/unit/map2/map_defs.h +++ b/tests/unit/map2/map_defs.h @@ -886,57 +886,6 @@ CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_md5_stat) \ CDSUNIT_TEST_FeldmanHashMap_md5_RCU_Signal -// SHA256 - -#undef CDSUNIT_DECLARE_FeldmanHashMap_sha256 -#undef CDSUNIT_DECLARE_FeldmanHashMap_sha256_RCU_Signal -#undef CDSUNIT_TEST_FeldmanHashMap_sha256 -#undef CDSUNIT_TEST_FeldmanHashMap_sha256_RCU_Signal - -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -# define CDSUNIT_DECLARE_FeldmanHashMap_sha256_RCU_Signal \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_shb_sha256_stat) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_sht_sha256_stat) \ - -# define CDSUNIT_TEST_FeldmanHashMap_sha256_RCU_Signal \ - CPPUNIT_TEST(FeldmanHashMap_rcu_shb_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_shb_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_sht_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_sht_sha256_stat) \ - -#else -# define CDSUNIT_DECLARE_FeldmanHashMap_sha256_RCU_Signal -# define CDSUNIT_TEST_FeldmanHashMap_sha256_RCU_Signal -#endif - - -#define CDSUNIT_DECLARE_FeldmanHashMap_sha256 \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_hp_sha256_stat) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_dhp_sha256_stat) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpi_sha256_stat) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpb_sha256_stat) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_sha256) \ - TEST_CASE(tag_FeldmanHashMap, FeldmanHashMap_rcu_gpt_sha256_stat) \ - CDSUNIT_DECLARE_FeldmanHashMap_sha256_RCU_Signal - -#define CDSUNIT_TEST_FeldmanHashMap_sha256 \ - CPPUNIT_TEST(FeldmanHashMap_hp_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_hp_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashMap_dhp_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_dhp_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpi_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpb_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_sha256) \ - CPPUNIT_TEST(FeldmanHashMap_rcu_gpt_sha256_stat) \ - CDSUNIT_TEST_FeldmanHashMap_sha256_RCU_Signal // CityHash - only for 64bit @@ -1065,13 +1014,11 @@ CDSUNIT_DECLARE_FeldmanHashMap_fixed \ CDSUNIT_DECLARE_FeldmanHashMap_stdhash \ CDSUNIT_DECLARE_FeldmanHashMap_md5 \ - CDSUNIT_DECLARE_FeldmanHashMap_sha256 \ CDSUNIT_DECLARE_FeldmanHashMap_city \ #define CDSUNIT_TEST_FeldmanHashMap \ CDSUNIT_TEST_FeldmanHashMap_fixed \ CDSUNIT_TEST_FeldmanHashMap_stdhash \ CDSUNIT_TEST_FeldmanHashMap_md5 \ - CDSUNIT_TEST_FeldmanHashMap_sha256 \ CDSUNIT_TEST_FeldmanHashMap_city diff --git a/tests/unit/map2/map_find_string.h b/tests/unit/map2/map_find_string.h index cbba772c..ad328bbb 100644 --- a/tests/unit/map2/map_find_string.h +++ b/tests/unit/map2/map_find_string.h @@ -217,7 +217,6 @@ namespace map2 { CDSUNIT_DECLARE_EllenBinTreeMap CDSUNIT_DECLARE_BronsonAVLTreeMap CDSUNIT_DECLARE_FeldmanHashMap_md5 - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city CDSUNIT_DECLARE_StripedMap CDSUNIT_DECLARE_RefinableMap @@ -235,7 +234,6 @@ namespace map2 { CDSUNIT_TEST_EllenBinTreeMap CDSUNIT_TEST_BronsonAVLTreeMap CDSUNIT_TEST_FeldmanHashMap_md5 - CDSUNIT_TEST_FeldmanHashMap_sha256 CDSUNIT_TEST_FeldmanHashMap_city CDSUNIT_TEST_CuckooMap CDSUNIT_TEST_StripedMap diff --git a/tests/unit/map2/map_find_string_feldmanhashmap.cpp b/tests/unit/map2/map_find_string_feldmanhashmap.cpp index af6121ef..26a90600 100644 --- a/tests/unit/map2/map_find_string_feldmanhashmap.cpp +++ b/tests/unit/map2/map_find_string_feldmanhashmap.cpp @@ -9,6 +9,5 @@ namespace map2 { CDSUNIT_DECLARE_FeldmanHashMap_md5 - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city } // namespace map2 diff --git a/tests/unit/map2/map_insdel_item_string.h b/tests/unit/map2/map_insdel_item_string.h index 56ef762e..2dfcbaf0 100644 --- a/tests/unit/map2/map_insdel_item_string.h +++ b/tests/unit/map2/map_insdel_item_string.h @@ -258,7 +258,6 @@ namespace map2 { CDSUNIT_DECLARE_EllenBinTreeMap CDSUNIT_DECLARE_BronsonAVLTreeMap CDSUNIT_DECLARE_FeldmanHashMap_md5 - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city CDSUNIT_DECLARE_StripedMap CDSUNIT_DECLARE_RefinableMap @@ -272,7 +271,6 @@ namespace map2 { CDSUNIT_TEST_EllenBinTreeMap CDSUNIT_TEST_BronsonAVLTreeMap CDSUNIT_TEST_FeldmanHashMap_md5 - CDSUNIT_TEST_FeldmanHashMap_sha256 CDSUNIT_TEST_FeldmanHashMap_city CDSUNIT_TEST_CuckooMap CDSUNIT_TEST_StripedMap diff --git a/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp index 659d0e65..4039ae0a 100644 --- a/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp +++ b/tests/unit/map2/map_insdel_item_string_feldmanhashmap.cpp @@ -9,6 +9,5 @@ namespace map2 { CDSUNIT_DECLARE_FeldmanHashMap_md5 - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city } // namespace map2 diff --git a/tests/unit/map2/map_insdel_string.h b/tests/unit/map2/map_insdel_string.h index 8c71f081..294b9298 100644 --- a/tests/unit/map2/map_insdel_string.h +++ b/tests/unit/map2/map_insdel_string.h @@ -256,7 +256,6 @@ namespace map2 { CDSUNIT_DECLARE_SkipListMap CDSUNIT_DECLARE_EllenBinTreeMap CDSUNIT_DECLARE_BronsonAVLTreeMap - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city CDSUNIT_DECLARE_StripedMap CDSUNIT_DECLARE_RefinableMap @@ -269,7 +268,6 @@ namespace map2 { CDSUNIT_TEST_SkipListMap CDSUNIT_TEST_EllenBinTreeMap CDSUNIT_TEST_BronsonAVLTreeMap - CDSUNIT_TEST_FeldmanHashMap_sha256 CDSUNIT_TEST_FeldmanHashMap_city CDSUNIT_TEST_CuckooMap CDSUNIT_TEST_StripedMap diff --git a/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp b/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp index 60cc3513..71e31831 100644 --- a/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp +++ b/tests/unit/map2/map_insdel_string_feldmanhashmap.cpp @@ -8,6 +8,5 @@ #include "map2/map_defs.h" namespace map2 { - CDSUNIT_DECLARE_FeldmanHashMap_sha256 CDSUNIT_DECLARE_FeldmanHashMap_city } // namespace map2 diff --git a/tests/unit/map2/map_type_feldman_hashmap.h b/tests/unit/map2/map_type_feldman_hashmap.h index b858846c..d23cb3b2 100644 --- a/tests/unit/map2/map_type_feldman_hashmap.h +++ b/tests/unit/map2/map_type_feldman_hashmap.h @@ -69,35 +69,6 @@ namespace map2 { typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_stdhash_stat > FeldmanHashMap_rcu_sht_stdhash_stat; #endif - // SHA256 - struct traits_FeldmanHashMap_sha256 : public cc::feldman_hashmap::traits - { - typedef ::hashing::sha256 hash; - }; - typedef FeldmanHashMap< cds::gc::HP, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_hp_sha256; - typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_dhp_sha256; - typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_rcu_gpi_sha256; - typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_rcu_gpb_sha256; - typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_rcu_gpt_sha256; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_rcu_shb_sha256; - typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_sha256 > FeldmanHashMap_rcu_sht_sha256; -#endif - - struct traits_FeldmanHashMap_sha256_stat : public traits_FeldmanHashMap_sha256 - { - typedef cc::feldman_hashmap::stat<> stat; - }; - typedef FeldmanHashMap< cds::gc::HP, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_hp_sha256_stat; - typedef FeldmanHashMap< cds::gc::DHP, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_dhp_sha256_stat; - typedef FeldmanHashMap< rcu_gpi, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_rcu_gpi_sha256_stat; - typedef FeldmanHashMap< rcu_gpb, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_rcu_gpb_sha256_stat; - typedef FeldmanHashMap< rcu_gpt, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_rcu_gpt_sha256_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef FeldmanHashMap< rcu_shb, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_rcu_shb_sha256_stat; - typedef FeldmanHashMap< rcu_sht, Key, Value, traits_FeldmanHashMap_sha256_stat > FeldmanHashMap_rcu_sht_sha256_stat; -#endif - //MD5 struct traits_FeldmanHashMap_md5 : public cc::feldman_hashmap::traits { diff --git a/tests/unit/set2/set_defs.h b/tests/unit/set2/set_defs.h index ce1f9c1e..f9e07cf2 100644 --- a/tests/unit/set2/set_defs.h +++ b/tests/unit/set2/set_defs.h @@ -771,57 +771,6 @@ CDSUNIT_TEST_FeldmanHashSet_md5_RCU_signal -// SHA256 -#undef CDSUNIT_DECLARE_FeldmanHashSet_sha256 -#undef CDSUNIT_DECLARE_FeldmanHashSet_sha256_RCU_signal -#undef CDSUNIT_TEST_FeldmanHashSet_sha256 -#undef CDSUNIT_TEST_FeldmanHashSet_sha256_RCU_signal - -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED -# define CDSUNIT_DECLARE_FeldmanHashSet_sha256_RCU_signal \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_sha256_stat) \ - -# define CDSUNIT_TEST_FeldmanHashSet_sha256_RCU_signal \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_shb_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_sht_sha256_stat) \ - -#else -# define CDSUNIT_DECLARE_FeldmanHashSet_sha256_RCU_signal -# define CDSUNIT_TEST_FeldmanHashSet_sha256_RCU_signal -#endif - -#define CDSUNIT_DECLARE_FeldmanHashSet_sha256 \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_hp_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_dhp_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpi_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpb_sha256_stat) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_sha256) \ - TEST_CASE(tag_FeldmanHashSet, FeldmanHashSet_rcu_gpt_sha256_stat) \ - CDSUNIT_DECLARE_FeldmanHashSet_sha256_RCU_signal - -#define CDSUNIT_TEST_FeldmanHashSet_sha256 \ - CPPUNIT_TEST(FeldmanHashSet_hp_sha256) \ - CPPUNIT_TEST(FeldmanHashSet_hp_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashSet_dhp_sha256) \ - CPPUNIT_TEST(FeldmanHashSet_dhp_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_sha256) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpi_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_sha256) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpb_sha256_stat) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_sha256) \ - CPPUNIT_TEST(FeldmanHashSet_rcu_gpt_sha256_stat) \ - CDSUNIT_TEST_FeldmanHashSet_sha256_RCU_signal - - // CityHash -only for 64bit #undef CDSUNIT_DECLARE_FeldmanHashSet_city #undef CDSUNIT_DECLARE_FeldmanHashSet_city_RCU_signal @@ -915,12 +864,10 @@ CDSUNIT_DECLARE_FeldmanHashSet_fixed \ CDSUNIT_DECLARE_FeldmanHashSet_stdhash \ CDSUNIT_DECLARE_FeldmanHashSet_md5 \ - CDSUNIT_DECLARE_FeldmanHashSet_sha256 \ CDSUNIT_DECLARE_FeldmanHashSet_city #define CDSUNIT_TEST_FeldmanHashSet \ CDSUNIT_TEST_FeldmanHashSet_fixed \ CDSUNIT_TEST_FeldmanHashSet_stdhash \ CDSUNIT_TEST_FeldmanHashSet_md5 \ - CDSUNIT_TEST_FeldmanHashSet_sha256 \ CDSUNIT_TEST_FeldmanHashSet_city diff --git a/tests/unit/set2/set_insdel_string.h b/tests/unit/set2/set_insdel_string.h index 6ab2f420..36ae9565 100644 --- a/tests/unit/set2/set_insdel_string.h +++ b/tests/unit/set2/set_insdel_string.h @@ -519,7 +519,6 @@ namespace set2 { CDSUNIT_DECLARE_EllenBinTreeSet CDSUNIT_DECLARE_FeldmanHashSet_stdhash CDSUNIT_DECLARE_FeldmanHashSet_md5 - CDSUNIT_DECLARE_FeldmanHashSet_sha256 CDSUNIT_DECLARE_FeldmanHashSet_city CDSUNIT_DECLARE_StdSet @@ -529,7 +528,6 @@ namespace set2 { CDSUNIT_TEST_SkipListSet CDSUNIT_TEST_FeldmanHashSet_stdhash CDSUNIT_TEST_FeldmanHashSet_md5 - CDSUNIT_TEST_FeldmanHashSet_sha256 CDSUNIT_TEST_FeldmanHashSet_city CDSUNIT_TEST_EllenBinTreeSet CDSUNIT_TEST_StripedSet diff --git a/tests/unit/set2/set_insdel_string_feldmanhashset.cpp b/tests/unit/set2/set_insdel_string_feldmanhashset.cpp index e9becc45..306d8f2b 100644 --- a/tests/unit/set2/set_insdel_string_feldmanhashset.cpp +++ b/tests/unit/set2/set_insdel_string_feldmanhashset.cpp @@ -10,6 +10,5 @@ namespace set2 { CDSUNIT_DECLARE_FeldmanHashSet_stdhash CDSUNIT_DECLARE_FeldmanHashSet_md5 - CDSUNIT_DECLARE_FeldmanHashSet_sha256 CDSUNIT_DECLARE_FeldmanHashSet_city } // namespace set2 diff --git a/tests/unit/set2/set_type_feldman_hashset.h b/tests/unit/set2/set_type_feldman_hashset.h index 68066db0..5b82c754 100644 --- a/tests/unit/set2/set_type_feldman_hashset.h +++ b/tests/unit/set2/set_type_feldman_hashset.h @@ -152,31 +152,6 @@ namespace set2 { typedef FeldmanHashSet< rcu_sht, key_val>, traits_FeldmanHashSet_stat > FeldmanHashSet_rcu_sht_stdhash_stat; #endif - // SHA256 - typedef FeldmanHashSet< cds::gc::HP, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_hp_sha256; - typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_dhp_sha256; - typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_rcu_gpi_sha256; - typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_rcu_gpb_sha256; - typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_rcu_gpt_sha256; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef FeldmanHashSet< rcu_shb, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_rcu_shb_sha256; - typedef FeldmanHashSet< rcu_sht, key_val<::hashing::sha256>, default_traits > FeldmanHashSet_rcu_sht_sha256; -#endif - - struct traits_FeldmanHashSet_sha256_stat : public default_traits - { - typedef cc::feldman_hashset::stat<> stat; - }; - typedef FeldmanHashSet< cds::gc::HP, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_hp_sha256_stat; - typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_dhp_sha256_stat; - typedef FeldmanHashSet< rcu_gpi, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_rcu_gpi_sha256_stat; - typedef FeldmanHashSet< rcu_gpb, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_rcu_gpb_sha256_stat; - typedef FeldmanHashSet< rcu_gpt, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_rcu_gpt_sha256_stat; -#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED - typedef FeldmanHashSet< rcu_shb, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_rcu_shb_sha256_stat; - typedef FeldmanHashSet< rcu_sht, key_val<::hashing::sha256>, traits_FeldmanHashSet_sha256_stat > FeldmanHashSet_rcu_sht_sha256_stat; -#endif - //MD5 typedef FeldmanHashSet< cds::gc::HP, key_val<::hashing::md5>, default_traits > FeldmanHashSet_hp_md5; typedef FeldmanHashSet< cds::gc::DHP, key_val<::hashing::md5>, default_traits > FeldmanHashSet_dhp_md5; -- 2.34.1