BEGIN_HEADER
#include <polarssl/version.h>
END_HEADER

BEGIN_DEPENDENCIES
depends_on:POLARSSL_VERSION_C
END_DEPENDENCIES

BEGIN_CASE
check_compiletime_version:version_str
{
    char build_str[100];
    char build_str_full[100];
    unsigned int build_int;

    memset( build_str, 0, 100 );
    memset( build_str_full, 0, 100 );

    snprintf (build_str, 100, "%d.%d.%d", POLARSSL_VERSION_MAJOR,
        POLARSSL_VERSION_MINOR, POLARSSL_VERSION_PATCH );

    snprintf( build_str_full, 100, "PolarSSL %d.%d.%d", POLARSSL_VERSION_MAJOR,
        POLARSSL_VERSION_MINOR, POLARSSL_VERSION_PATCH );

    build_int = POLARSSL_VERSION_MAJOR << 24 |
            POLARSSL_VERSION_MINOR << 16 |
            POLARSSL_VERSION_PATCH << 8;

    TEST_ASSERT( build_int == POLARSSL_VERSION_NUMBER );
    TEST_ASSERT( strcmp( build_str, POLARSSL_VERSION_STRING ) == 0 );
    TEST_ASSERT( strcmp( build_str_full, POLARSSL_VERSION_STRING_FULL ) == 0 );
    TEST_ASSERT( strcmp( {version_str}, POLARSSL_VERSION_STRING ) == 0 );
}
END_CASE

BEGIN_CASE
check_runtime_version:version_str
{
    char build_str[100];
    char get_str[100];
    char build_str_full[100];
    char get_str_full[100];
    unsigned int get_int;

    memset( build_str, 0, 100 );
    memset( get_str, 0, 100 );
    memset( build_str_full, 0, 100 );
    memset( get_str_full, 0, 100 );

    get_int = version_get_number();
    version_get_string( get_str );
    version_get_string_full( get_str_full );

    snprintf( build_str, 100, "%d.%d.%d",
        (get_int >> 24) & 0xFF,
        (get_int >> 16) & 0xFF,
        (get_int >> 8) & 0xFF );
    snprintf( build_str_full, 100, "PolarSSL %s", {version_str} );

    TEST_ASSERT( strcmp( build_str, {version_str} ) == 0 );
    TEST_ASSERT( strcmp( build_str_full, get_str_full ) == 0 );
    TEST_ASSERT( strcmp( {version_str}, get_str ) == 0 );
}
END_CASE
