82 lines
2.1 KiB
C
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;
|
|
}
|