Files
gps/soc/software/gps_system/tests/test_gps_ephemeris_cache.c
T

82 lines
2.1 KiB
C

#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "gps/gps_ephemeris_cache.h"
static gps_ephemeris_t make_ephemeris(
unsigned int prn,
unsigned char iode)
{
gps_ephemeris_t ephemeris;
memset(&ephemeris, 0, sizeof(ephemeris));
ephemeris.SVID = (unsigned char)prn;
ephemeris.iode = iode;
ephemeris.ephemeris_valid = true;
ephemeris.toe.week = 2430;
ephemeris.toe.sec = 123456.0;
return ephemeris;
}
static void test_store_restore_and_expiry(void)
{
gps_ephemeris_cache_t cache;
gps_ephemeris_cache_init(&cache, 100u);
gps_ephemeris_t input = make_ephemeris(4u, 17u);
gps_ephemeris_t output;
memset(&output, 0, sizeof(output));
assert(gps_ephemeris_cache_store(
&cache, 4u, &input, 1000u));
input.iode = 99u;
assert(gps_ephemeris_cache_restore(
&cache, 4u, 1100u, &output));
assert(output.iode == 17u);
assert(output.SVID == 4u);
assert(!gps_ephemeris_cache_restore(
&cache, 4u, 1101u, &output));
/* Expiration invalidates the slot, not only this read. */
assert(!gps_ephemeris_cache_restore(
&cache, 4u, 1001u, &output));
}
static void test_validation_independence_and_invalidate(void)
{
gps_ephemeris_cache_t cache;
gps_ephemeris_cache_init(&cache, 500u);
gps_ephemeris_t prn4 = make_ephemeris(4u, 21u);
gps_ephemeris_t prn19 = make_ephemeris(19u, 44u);
gps_ephemeris_t output;
prn4.ephemeris_valid = false;
assert(!gps_ephemeris_cache_store(
&cache, 4u, &prn4, 0u));
prn4.ephemeris_valid = true;
assert(!gps_ephemeris_cache_store(
&cache, 5u, &prn4, 0u));
assert(!gps_ephemeris_cache_store(
&cache, GPS_PRN_COUNT, &prn4, 0u));
assert(gps_ephemeris_cache_store(
&cache, 4u, &prn4, 20u));
assert(gps_ephemeris_cache_store(
&cache, 19u, &prn19, 30u));
assert(gps_ephemeris_cache_restore(
&cache, 19u, 40u, &output));
assert(output.iode == 44u);
gps_ephemeris_cache_invalidate(&cache, 4u);
assert(!gps_ephemeris_cache_restore(
&cache, 4u, 40u, &output));
assert(gps_ephemeris_cache_restore(
&cache, 19u, 40u, &output));
}
int main(void)
{
test_store_restore_and_expiry();
test_validation_independence_and_invalidate();
puts("gps ephemeris cache tests passed");
return 0;
}