Hashtable2 with many bugs
This commit is contained in:
@@ -4,12 +4,12 @@ void test_all(){
|
||||
// test_string();
|
||||
// test_safethrow();
|
||||
// test_searchtree();
|
||||
test_autoarr();
|
||||
test_autoarr2();
|
||||
// test_autoarr();
|
||||
// test_autoarr2();
|
||||
// test_hash_functions();
|
||||
test_hashtable();
|
||||
// test_hashtable();
|
||||
// test_dtsod();
|
||||
test_hashtable2();
|
||||
//test_dtsod();
|
||||
printf("\e[96m--------------------------------------\e[0m\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,58 +1,65 @@
|
||||
#include "tests.h"
|
||||
#include "../src/Hashtable2/Hashtable2.hpp"
|
||||
#include <memory>
|
||||
|
||||
#define TKey char*
|
||||
#define TKey std::shared_ptr<char>
|
||||
#define TVal uint64
|
||||
#define HT_TYPE Hashtable2<TKey, TVal>
|
||||
#define HT_TYPE_NAME "Hashtable2<char*, uint64>"
|
||||
#define HT_TYPE_NAME "Hashtable2<std::shared_ptr<char*>, uint64>"
|
||||
|
||||
void print_hashtable(HT_TYPE* ht){
|
||||
printf("\e[94m" HT_TYPE_NAME ": "
|
||||
IFWIN("%llu", "%lu")
|
||||
"\n height: %u\n",
|
||||
sizeof(HT_TYPE),
|
||||
ht->height());
|
||||
ht->height);
|
||||
}
|
||||
|
||||
char* genkey(uint32 i){
|
||||
char* key=new char[16];
|
||||
std::shared_ptr<char> genkey(uint32 i){
|
||||
char* key=new char[24];
|
||||
IFMSC(
|
||||
sprintf_s(key,16,"key_%u",i),
|
||||
sprintf_s(key,24,"key_%u",i),
|
||||
sprintf(key,"key_%u",i)
|
||||
);
|
||||
return key;
|
||||
dbg(i);
|
||||
return std::shared_ptr<char>(key, [](char* s){ delete[] s;});
|
||||
}
|
||||
|
||||
void fill(HT_TYPE* ht){
|
||||
//for(uint32 i=0;i<100000;i++)
|
||||
// ht->add(genkey(i),Uni(UInt64,i));
|
||||
for(uint32 i=0;i<251;i++)
|
||||
ht->add(genkey(i), 555666);
|
||||
print_hashtable(ht);
|
||||
}
|
||||
|
||||
TVal gett(HT_TYPE* ht){
|
||||
TVal u;
|
||||
for(uint32 i=0;i<100000;i++){
|
||||
for(uint32 i=0;i<1000;i++){
|
||||
TKey key=genkey(i);
|
||||
//u=ht->get(key);
|
||||
delete[] key;
|
||||
u=ht->get(key);
|
||||
}
|
||||
return u;
|
||||
}
|
||||
|
||||
|
||||
void test_hashtable2(){
|
||||
optime("test_hashtable2",1,({
|
||||
//optime("test_hashtable2",1,({
|
||||
printf("\e[96m-----------[test_hashtable2]-----------\n");
|
||||
#if STORE_HASHES
|
||||
HT_TYPE* ht=new HT_TYPE();
|
||||
HT_TYPE* ht=new HT_TYPE(
|
||||
[](TKey k) { return hashs(hash_sdbm32,k.get()); });
|
||||
#else
|
||||
HT_TYPE* ht=new HT_TYPE(cptr_compare);
|
||||
HT_TYPE* ht=new HT_TYPE(
|
||||
[](TKey k) { return hashs(hash_sdbm32,k.get()); },
|
||||
[](TKey k0, TKey k1) { return cptr_compare(k0.get(), k1.get()); });
|
||||
#endif
|
||||
printf("\e[92m" HT_TYPE_NAME " created\n");
|
||||
printf("\e[92mhashtable created\n");
|
||||
print_hashtable(ht);
|
||||
optime("fill",1,fill(ht));
|
||||
optime("get",1,gett(ht));
|
||||
print_hashtable(ht);
|
||||
// TVal r;
|
||||
// optime("get",1,r=gett(ht));
|
||||
// dbg((uint32)r);
|
||||
// print_hashtable(ht);
|
||||
delete ht;
|
||||
printf("\e[92m" HT_TYPE_NAME " deleted\n");
|
||||
}));
|
||||
printf("\e[92mhashtable deleted\n");
|
||||
//}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user