#!/bin/sh
. $(dirname $(readlink -f $0))/framework.sh

WORDS="Package
Source
Binary
Version"

# Check the --label-prefix
testsuccessequal "#ifndef TRIE_HASH_PerfectHash
#define TRIE_HASH_PerfectHash
#include <stddef.h>
#include <stdint.h>
enum PerfectKey {
    Field_Binary = 2,
    Field_Package = 0,
    Field_Source = 1,
    Field_Version = 3,
    Field_Unknown = -1,
};
static enum PerfectKey PerfectHash(const char *string, size_t length);
static enum PerfectKey PerfectHash6(const char *string)
{
    switch(string[0]) {
    case 'B':
        switch(string[1]) {
        case 'i':
            switch(string[2]) {
            case 'n':
                switch(string[3]) {
                case 'a':
                    switch(string[4]) {
                    case 'r':
                        switch(string[5]) {
                        case 'y':
                            return Field_Binary;
                        }
                    }
                }
            }
        }
        break;
    case 'S':
        switch(string[1]) {
        case 'o':
            switch(string[2]) {
            case 'u':
                switch(string[3]) {
                case 'r':
                    switch(string[4]) {
                    case 'c':
                        switch(string[5]) {
                        case 'e':
                            return Field_Source;
                        }
                    }
                }
            }
        }
    }
    return Field_Unknown;
}
static enum PerfectKey PerfectHash7(const char *string)
{
    switch(string[0]) {
    case 'P':
        switch(string[1]) {
        case 'a':
            switch(string[2]) {
            case 'c':
                switch(string[3]) {
                case 'k':
                    switch(string[4]) {
                    case 'a':
                        switch(string[5]) {
                        case 'g':
                            switch(string[6]) {
                            case 'e':
                                return Field_Package;
                            }
                        }
                    }
                }
            }
        }
        break;
    case 'V':
        switch(string[1]) {
        case 'e':
            switch(string[2]) {
            case 'r':
                switch(string[3]) {
                case 's':
                    switch(string[4]) {
                    case 'i':
                        switch(string[5]) {
                        case 'o':
                            switch(string[6]) {
                            case 'n':
                                return Field_Version;
                            }
                        }
                    }
                }
            }
        }
    }
    return Field_Unknown;
}
static enum PerfectKey PerfectHash(const char *string, size_t length)
{
    switch (length) {
    case 6:
        return PerfectHash6(string);
    case 7:
        return PerfectHash7(string);
    default:
        return Field_Unknown;
    }
}
#endif                       /* TRIE_HASH_PerfectHash */" triehash --multi-byte=0 --label-prefix=Field_ /dev/stdin

# Check the --label--uppercase
testsuccessequal "#ifndef TRIE_HASH_PerfectHash
#define TRIE_HASH_PerfectHash
#include <stddef.h>
#include <stdint.h>
enum PerfectKey {
    BINARY = 2,
    PACKAGE = 0,
    SOURCE = 1,
    VERSION = 3,
    UNKNOWN = -1,
};
static enum PerfectKey PerfectHash(const char *string, size_t length);
static enum PerfectKey PerfectHash6(const char *string)
{
    switch(string[0]) {
    case 'B':
        switch(string[1]) {
        case 'i':
            switch(string[2]) {
            case 'n':
                switch(string[3]) {
                case 'a':
                    switch(string[4]) {
                    case 'r':
                        switch(string[5]) {
                        case 'y':
                            return BINARY;
                        }
                    }
                }
            }
        }
        break;
    case 'S':
        switch(string[1]) {
        case 'o':
            switch(string[2]) {
            case 'u':
                switch(string[3]) {
                case 'r':
                    switch(string[4]) {
                    case 'c':
                        switch(string[5]) {
                        case 'e':
                            return SOURCE;
                        }
                    }
                }
            }
        }
    }
    return UNKNOWN;
}
static enum PerfectKey PerfectHash7(const char *string)
{
    switch(string[0]) {
    case 'P':
        switch(string[1]) {
        case 'a':
            switch(string[2]) {
            case 'c':
                switch(string[3]) {
                case 'k':
                    switch(string[4]) {
                    case 'a':
                        switch(string[5]) {
                        case 'g':
                            switch(string[6]) {
                            case 'e':
                                return PACKAGE;
                            }
                        }
                    }
                }
            }
        }
        break;
    case 'V':
        switch(string[1]) {
        case 'e':
            switch(string[2]) {
            case 'r':
                switch(string[3]) {
                case 's':
                    switch(string[4]) {
                    case 'i':
                        switch(string[5]) {
                        case 'o':
                            switch(string[6]) {
                            case 'n':
                                return VERSION;
                            }
                        }
                    }
                }
            }
        }
    }
    return UNKNOWN;
}
static enum PerfectKey PerfectHash(const char *string, size_t length)
{
    switch (length) {
    case 6:
        return PerfectHash6(string);
    case 7:
        return PerfectHash7(string);
    default:
        return UNKNOWN;
    }
}
#endif                       /* TRIE_HASH_PerfectHash */" triehash --multi-byte=0 --label-uppercase /dev/stdin
