#include <cmath>
#include <random>
#include <cstdint>
#include <iostream>
#include "ktfop.h"
void KtfopLog(int level, const char *message)
{
std::cout << level << ' ' << message << std::endl;
}
int main()
{
using namespace ktfop;
SetExternalLogFunc(KtfopLog);
int64_t numBuckets = 4; //配置哈希桶个数
int64_t valueSize = 8; //配置embedding长度
int64_t emptyKey = -1; //空键所代表的值
int64_t deletedKey = -2; //已删除键所代表的值
int64_t keyBucket[] = {104, 101, 201, -1};
float valueBucket[] = {4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7,
1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7,
2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,
0, 0, 0, 0, 0, 0, 0, 0};
TableInfo info {numBuckets, valueSize, emptyKey, deletedKey, keyBucket, valueBucket};
int64_t length = 4;
int64_t keys[] = {101, 110, 201, 104};
auto *values = new float[info.valueSize * length];
float defaultValue[] = {1, 1, 1, 1, 1, 1, 1, 1};
int ret = Find(info, keys, values, defaultValue, length);
std::cout << "values: [";
for (int i = 0; i < info.valueSize * length; ++i) {
std::cout << values[i];
if (i < info.valueSize * length - 1) {
std::cout << ", ";
}
}
std::cout << "]" << std::endl;
//键列表含有空键,打印日志"ERROR Using the emptyKey as a table key is not allowed."
keys[0] = info.emptyKey;
ret = Find(info, keys, values, defaultValue, length);
//键列表含有表示已删除的键,打印日志"ERROR Using the deletedKey as a table key is not allowed"
keys[0] = info.deletedKey;
ret = Find(info, keys, values, defaultValue, length);
//输入空指针,打印日志"ERROR Parameter verification failed for the Find Op."
keys[0] = 101;
ret = Find(info, nullptr, values, defaultValue, length);
//输入空指针,打印日志"ERROR Parameter verification failed for the Find Op."
info.valueBucket = nullptr;
ret = Find(info, keys, values, defaultValue, length);
//emptyKey=deletedKey,打印日志"ERROR Empty and deleted key cannot be equal."
info.valueBucket = valueBucket;
info.emptyKey = info.deletedKey;
ret = Find(info, keys, values, defaultValue, length);
//numBuckets不是2的幂,打印日志"ERROR numBuckets must be power of 2."
info.emptyKey = -1;
info.numBuckets = 5;
ret = Find(info, keys, values, defaultValue, length);
//numBuckets小于0,打印日志"ERROR numBuckets is invalid."
info.numBuckets = 4;
info.numBuckets = -1;
ret = Find(info, keys, values, defaultValue, length);
//length小于0,打印日志"ERROR Length value is invalid."
info.numBuckets = 4;
ret = Find(info, keys, values, defaultValue, static_cast<size_t>(-1));
//valueSize小于0,打印日志"ERROR valueSize is invalid."
info.valueSize = -1;
ret = Find(info, keys, values, defaultValue, length);
//keyBucket 排布规律错误,打印日志"ERROR Internal error in MutableDenseHashTable lookup."
info.valueSize = valueSize;
info.keyBucket[3] = 202;
ret = Find(info, keys, values, defaultValue, length);
delete[] values;
}