/*
 * Copyright (c) 2018 IOTA Stiftung
 * https://github.com/iotaledger/iota_common
 *
 * Refer to the LICENSE file for licensing information
 */

#ifndef __UTILS_CONTAINERS_HASH_TESTS_DEFS_H__
#define __UTILS_CONTAINERS_HASH_TESTS_DEFS_H__

#include <unity/unity.h>

#include "common/trinary/flex_trit.h"

#ifdef __cplusplus
extern "C" {
#endif

#if defined(FLEX_TRIT_ENCODING_1_TRIT_PER_BYTE)
static const flex_trit_t hash243_1[FLEX_TRIT_SIZE_243] = {
    1, 0, 0,  1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,
    0, 0, 1,  1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1,
    0, 0, -1, 1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,
    0, 0, 0,  1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,
    0, 0, 1,  1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1,
    0, 0, -1, 1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0,
    0, 0, 0,  1, 0, 0,  -1, 1, 0,  0, 1, 0,  1, 1, 0,  -1, -1, 1,  0, -1, 1,  1, -1, 1,  -1, 0, 1,
    0, 0, 1,  1, 0, 1,  -1, 1, 1,  0, 1, 1,  1, 1, 1,  -1, -1, -1, 0, -1, -1, 1, -1, -1, -1, 0, -1,
    0, 0, -1, 1, 0, -1, -1, 1, -1, 0, 1, -1, 1, 1, -1, -1, -1, 0,  0, -1, 0,  1, -1, 0,  -1, 0, 0};

static const flex_trit_t hash243_2[FLEX_TRIT_SIZE_243] = {
    0,  1,  1,  -1, 0,  -1, -1, 0,  0,  1,  -1, 0,  1, -1, 1,  -1, 0,  1,  1,  0,  0,  -1, 0,  -1, 0,  1,  1,
    1,  0,  1,  0,  1,  1,  -1, -1, 1,  -1, -1, -1, 0, -1, -1, 0,  0,  0,  0,  0,  1,  -1, 1,  0,  1,  0,  -1,
    0,  -1, 1,  0,  -1, -1, 0,  -1, 1,  0,  0,  1,  1, -1, 0,  -1, 0,  1,  0,  0,  1,  -1, 1,  0,  -1, 1,  1,
    0,  -1, -1, -1, 0,  1,  -1, -1, 1,  -1, -1, 0,  1, 1,  -1, 1,  0,  0,  -1, -1, 1,  -1, 0,  1,  -1, 1,  1,
    1,  -1, 0,  0,  -1, -1, -1, -1, 1,  1,  1,  0,  0, 0,  0,  -1, -1, 0,  -1, 1,  0,  -1, -1, 1,  0,  0,  -1,
    0,  1,  0,  0,  1,  0,  0,  1,  1,  1,  -1, 1,  1, -1, 1,  0,  1,  1,  0,  -1, -1, 1,  0,  1,  1,  1,  -1,
    0,  0,  1,  -1, 0,  0,  1,  0,  -1, 0,  0,  1,  0, 1,  -1, 0,  1,  -1, 0,  -1, 0,  1,  -1, 1,  1,  0,  1,
    0,  0,  0,  -1, -1, 0,  0,  -1, -1, -1, -1, -1, 0, 0,  1,  1,  -1, 1,  -1, 1,  0,  0,  -1, 0,  -1, 1,  1,
    -1, 1,  -1, 1,  1,  -1, 1,  0,  0,  -1, -1, 0,  0, 1,  -1, 0,  -1, 0,  -1, -1, -1, -1, 0,  1,  -1, -1, 0};
#elif defined(FLEX_TRIT_ENCODING_3_TRITS_PER_BYTE)
// AABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ9ABCDEFGHIJKLMNOPQRSTUVWXYZ
static const flex_trit_t hash243_1[FLEX_TRIT_SIZE_243] = {
    65, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
    57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90};

// LQZYGHAQLJLENO9IBSFOFIYHIBKOHEWVAEHKYOED9WBERCCLGGLOJVIZSIUUXGJ9WONIGBXKTVAWUXNHW
static const flex_trit_t hash243_2[FLEX_TRIT_SIZE_243] = {
    76, 81, 90, 89, 71, 72, 65, 81, 76, 74, 76, 69, 78, 79, 57, 73, 66, 83, 70, 79, 70, 73, 89, 72, 73, 66, 75,
    79, 72, 69, 87, 86, 65, 69, 72, 75, 89, 79, 69, 68, 57, 87, 66, 69, 82, 67, 67, 76, 71, 71, 76, 79, 74, 86,
    73, 90, 83, 73, 85, 85, 88, 71, 74, 57, 87, 79, 78, 73, 71, 66, 88, 75, 84, 86, 65, 87, 85, 88, 78, 72, 87};
#elif defined(FLEX_TRIT_ENCODING_4_TRITS_PER_BYTE)
static const flex_trit_t hash243_1[FLEX_TRIT_SIZE_243] = {
    65,  112, 16,  -59, -57, 117, 19,  20,  93, 84,  -11, -13, -3,  12,  -57, 55,  93,  63, 76,  51, 0,
    -63, 65,  20,  31,  -41, 77,  80,  116, 81, -43, -49, -9,  51,  28,  -33, 116, -3,  48, -51, 0,  4,
    7,   81,  124, 92,  55,  65,  -47, 69,  85, 63,  -33, -49, 112, 124, -45, -11, -61, 52, 3};
static const flex_trit_t hash243_2[FLEX_TRIT_SIZE_243] = {
    -44, 60, 52,  -35, 20, -52, 84, 68, 125, 63,  15,  64,  71,  -52, -15, 28, -44, 76,  -48, 113, -15,
    -45, -9, -44, -63, 55, 93,  13, -1, 21,  -64, 115, 124, 48,  65,  80,  93, 71,  -15, 81,  13,  13,
    49,  68, -45, 76,  23, 1,   15, -1, 67,  -35, -63, 92,  119, 29,  60,  52, -13, 79,  15};
#elif defined(FLEX_TRIT_ENCODING_5_TRITS_PER_BYTE)
static const flex_trit_t hash243_1[FLEX_TRIT_SIZE_243] = {
    28, 6,   37,  -76, -59, 84,  64,  118,  -113, -66, -31, -75, 74,  -97, -28, -29, 81,
    18, 111, 15,  65,  8,   -50, 112, -95,  44,   -94, 18,  -22, -47, -85, -87, 0,   55,
    90, 46,  -48, 25,  93,  92,  -41, -112, -38,  53,  -66, 102, -13, -19, -1};
static const flex_trit_t hash243_2[FLEX_TRIT_SIZE_243] = {
    -15, 77,  62,  35, -30, 94,   -96, -38,  -4,  63,  -24, -106, 6,   -86, 84,  56, -116,
    48,  104, -79, 74, -43, -117, 38,  -108, -75, -79, 84,  117,  65,  -69, 110, 79, 26,
    26,  -56, -57, 31, -36, -120, 107, 20,   51,  61,  7,   77,   -91, 68,  -4};
#endif

#ifdef __cplusplus
}
#endif

#endif  // __UTILS_CONTAINERS_HASH_TESTS_DEFS_H__
