File: tst_degrib2_int.c

package info (click to toggle)
g2clib 2.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,524 kB
  • sloc: ansic: 28,287; python: 76; sh: 46; makefile: 26
file content (90 lines) | stat: -rw-r--r-- 4,630 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
/* This is a test for the NCEPLIBS-g2c project.
 *
 * This test is for the internal functions used by g2c_degrib2()
 * function.
 *
 * Ed Hartnett 11/16/22
 */
#include "grib2_int.h"

#define NUM_PROD_TEST 13

int
main()
{
    printf("Testing g2c degrib2 internal functions.\n");
    printf("Testing g2c_get_level_desc()...\n");
    {
#define DATE_TIME_LEN 100
        int prod_template_num[NUM_PROD_TEST] = {0, 0, 0, 0, 8, 2, 0, 2, 15, 9, 0, 0, 8};
        long long int prod_template_value[NUM_PROD_TEST][G2C_MAX_PDS_TEMPLATE_MAPLEN] = {
            {2, 1, 2, 0, 11, 0, 0, 1, 0, 1, 0, 1, 255, 0, 0},
            {2, 10, 0, 0, 81, 0, 0, 1, 0, 100, 0, 80000, 255, 0, 0},
            {0, 21, 2, 255, 104, 65535, 255, 1, 1, 103, 0, 2, 255, 0, 0},
            {19, 238, 2, 255, 104, 65535, 255, 1, 1, 100, 0, 40000, 100, 0, 30000},
            {1, 228, 2, 255, 104, 65535, 255, 1, 0, 1, 0, 0, 255, 0, 0, 2022, 11, 17, 20, 0, 0, 1, 0, 1, 2, 1, 1, 1, 0},
            {0, 192, 4, 70, 70, 0, 0, 1, 0, 106, 0, 0, 106, 1, 1, 0, 20},
            {0, 192, 2, 0, 98, 0, 0, 1, 0, 106, 2, 0, 106, 2, 10},
            {3, 1, 4, 70, 70, 0, 0, 1, 0, 101, 0, 0, 255, 0, 0, 0, 20},
            {0, 27, 2, 255, 104, 65535, 255, 1, 1, 103, 0, 610, 100, 0, 40000, 241, 241, 241},
            {1, 8, 2, 255, 104, 65535, 255, 1, 0, 1, 0, 0, 255, 0, 0, 255, 255, 1, -127, 255, 3, 254, 2022, 11, 17, 20, 0, 0, 1, 0, 1, 2, 1, 1, 1, 0},
            {19, 236, 2, 255, 104, 65535, 255, 1, 1, 102, 0, 0, 255, 0, 0},
            {0, 0, 2, 0, 116, 0, 0, 1, 0, 108, 0, 3000, 108, 0, 0},
            {14, 201, 2, 0, 89, 0, 0, 1, -1, 105, 0, 1, 255, -127, -2147483647, 2022, 11, 2, 10, 0, 0, 1, 0, 0, 2, 1, 23, 255, 0}};
        char expected_level_desc[NUM_PROD_TEST][G2C_MAX_GRIB_LEVEL_DESC_LEN + 1] = {
            " Surface", " 800 mb", "2 m above ground", " 400 -  300 mb",
            " Surface", "0 - .1 m DBLY", " 0 - .10 m DBLY", " Mean Sea Level", "  103 (Unknown Lvl)",
            " Surface", "0 m above MSL", " 30 -  0 mb SPDY", "1 hybrid lvl"};
        char level_desc[G2C_MAX_GRIB_LEVEL_DESC_LEN + 1];
        short year[NUM_PROD_TEST] = {2021, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022};
        unsigned char month[NUM_PROD_TEST] = {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11};
        unsigned char day[NUM_PROD_TEST] = {30, 6, 6, 6, 17, 17, 17, 17, 17, 17, 17, 17, 01};
        unsigned char hour[NUM_PROD_TEST] = {0, 12, 12, 12, 19, 12, 12, 12, 19, 19, 19, 0, 12};
        unsigned char minute[NUM_PROD_TEST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        unsigned char second[NUM_PROD_TEST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        char expected_date_time[NUM_PROD_TEST][DATE_TIME_LEN + 1] = {
            "valid  0 hour after 2021113000:00:00",
            "valid  0 hour after 2022110612:00:00",
            "valid  1 hour after 2022110612:00:00",
            "valid  1 hour after 2022110612:00:00",
            "(0 -1 hr) valid  0 hour after 2022111719:00:00 to 2022111720:00:00",
            "valid  0 hour after 2022111712:00:00",
            "valid  0 hour after 2022111712:00:00",
            "valid  0 hour after 2022111712:00:00",
            "valid  1 hour after 2022111719:00:00",
            "(0 -1 hr) valid  0 hour after 2022111719:00:00 to 2022111720:00:00",
            "valid  1 hour after 2022111719:00:00",
            "valid  0 hour after 2022111700:00:00",
            "(1 -24) valid  1 hour before 2022110112:00:00 to 2022110210:00:00"};
        int t;
        int ret;

        for (t = 0; t < NUM_PROD_TEST; t++)
        {
            char date_time[DATE_TIME_LEN + 1];
            /* printf("\nt %d\n", t); */

            /* First test the level description. */
            if ((ret = g2c_get_level_desc(prod_template_num[t], prod_template_value[t], level_desc)))
                return ret;
            if (strcmp(level_desc, expected_level_desc[t]))
            {
                printf("level_desc |%s| \nexpected |%s|\n", level_desc, expected_level_desc[t]);
                return G2C_ERROR;
            }

            /* Now test the date/time. */
            if ((ret = g2c_get_datetime(prod_template_num[t], prod_template_value[t], year[t], month[t],
                                        day[t], hour[t], minute[t], second[t], date_time)))
                return ret;
            if (strcmp(date_time, expected_date_time[t]))
            {
                printf("date_time %s \nexpected %s\n", date_time, expected_date_time[t]);
                return G2C_ERROR;
            }
        }
    }
    printf("ok!\n");
    printf("SUCCESS!\n");
    return 0;
}