commit 2177967ab1027df692bc2c76d6a5c1c44474cab9
parent 4867179150e9c9208de8c14acb7e62466c54eb59
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Mon, 14 Feb 2022 16:32:31 +0100
Add and test getters on the loaded transitions
Diffstat:
3 files changed, 74 insertions(+), 12 deletions(-)
diff --git a/src/shitran.h b/src/shitran.h
@@ -186,6 +186,16 @@ SHITRAN_API res_T
shitran_transitions_ref_put
(struct shitran_transitions* transitions);
+SHITRAN_API res_T
+shitran_transitions_get_count
+ (const struct shitran_transitions* transitions,
+ size_t* ntransitions);
+
+SHITRAN_API res_T
+shitran_transitions_get
+ (const struct shitran_transitions* transitions,
+ const struct shitran_transition* transitions_list[]);
+
END_DECLS
#endif /* SHITRAN_H */
diff --git a/src/shitran_transitions.c b/src/shitran_transitions.c
@@ -285,4 +285,24 @@ shitran_transitions_ref_put(struct shitran_transitions* transitions)
return RES_OK;
}
+res_T
+shitran_transitions_get_count
+ (const struct shitran_transitions* transitions,
+ size_t* ntransitions)
+{
+ if(!transitions || !ntransitions) return RES_BAD_ARG;
+ *ntransitions = darray_transition_size_get(&transitions->transitions);
+ return RES_OK;
+}
+
+res_T
+shitran_transitions_get
+ (const struct shitran_transitions* transitions,
+ const struct shitran_transition* transitions_list[])
+{
+ if(!transitions || !transitions_list) return RES_BAD_ARG;
+ *transitions_list = darray_transition_cdata_get(&transitions->transitions);
+ return RES_OK;
+}
+
#endif /* SHITRAN_TRANSITIONS_H */
diff --git a/src/test_shitran_transitions.c b/src/test_shitran_transitions.c
@@ -23,16 +23,6 @@
#include <string.h>
-static const struct shitran_transition g_transitions[] = {
- {0.000134, 2.672E-38, 0.0533, 0.410, 608.4727, 0.79, 0.000060, 1, 4},
- {0.000379, 1.055E-39, 0.0418, 0.329,1747.9686, 0.79, 0.000110, 1, 5},
- {0.000448, 5.560E-38, 0.0490, 0.364,1093.0269, 0.79, 0.000060, 1, 4},
- {0.000686, 1.633E-36, 0.0578, 0.394, 701.1162, 0.79, 0.000180, 1, 4},
- {0.000726, 6.613E-33, 0.0695, 0.428, 402.3295, 0.79, 0.000240, 1, 3}
-};
-static const size_t g_ntransitions =
- sizeof(g_transitions) / sizeof(struct shitran_transition);
-
static void
print_transitions
(FILE* fp,
@@ -59,7 +49,7 @@ print_transitions
transitions[i].isotope_id_local == 9 ? 0 : transitions[i].isotope_id_local+1,
transitions[i].wavenumber,
transitions[i].intensity,
- (int)(transitions[i].gamma_air*10000),
+ (int)(transitions[i].gamma_air*10000+0.5/*round*/),
transitions[i].gamma_self,
transitions[i].lower_state_energy,
transitions[i].n_air,
@@ -67,15 +57,44 @@ print_transitions
}
}
+static int
+transition_eq
+ (const struct shitran_transition* tr0,
+ const struct shitran_transition* tr1)
+{
+ CHK(tr0 && tr1);
+ return tr0->wavenumber == tr1->wavenumber
+ && tr0->intensity == tr1->intensity
+ && tr0->gamma_air == tr1->gamma_air
+ && tr0->gamma_self == tr1->gamma_self
+ && tr0->lower_state_energy == tr1->lower_state_energy
+ && tr0->n_air == tr1->n_air
+ && tr0->delta_air == tr1->delta_air
+ && tr0->molecule_id == tr1->molecule_id
+ && tr0->isotope_id_local == tr1->isotope_id_local;
+}
+
static void
test_load(struct shitran* shitran)
{
+ const struct shitran_transition transitions[] = {
+ {0.000134, 2.672E-38, 0.0533, 0.410, 608.4727, 0.79, 0.000060, 1, 4},
+ {0.000379, 1.055E-39, 0.0418, 0.329,1747.9686, 0.79, 0.000110, 1, 5},
+ {0.000448, 5.560E-38, 0.0490, 0.364,1093.0269, 0.79, 0.000060, 1, 4},
+ {0.000686, 1.633E-36, 0.0578, 0.394, 701.1162, 0.79, 0.000180, 1, 4},
+ {0.000726, 6.613E-33, 0.0695, 0.428, 402.3295, 0.79, 0.000240, 1, 3}
+ };
+ const size_t ntransitions =
+ sizeof(transitions) / sizeof(struct shitran_transition);
+
struct shitran_transitions* trs = NULL;
+ const struct shitran_transition* trs_list = NULL;
const char* filename = "test_transitions.txt";
FILE* fp = NULL;
+ size_t i, n;
CHK(fp = fopen(filename, "w+"));
- print_transitions(fp, g_transitions, g_ntransitions);
+ print_transitions(fp, transitions, ntransitions);
rewind(fp);
CHK(shitran_transitions_load_stream(NULL, fp, NULL, &trs) == RES_BAD_ARG);
@@ -83,6 +102,19 @@ test_load(struct shitran* shitran)
CHK(shitran_transitions_load_stream(shitran, fp, NULL, NULL) == RES_BAD_ARG);
CHK(shitran_transitions_load_stream(shitran, fp, NULL, &trs) == RES_OK);
+ CHK(shitran_transitions_get_count(NULL, &n) == RES_BAD_ARG);
+ CHK(shitran_transitions_get_count(trs, NULL) == RES_BAD_ARG);
+ CHK(shitran_transitions_get_count(trs, &n) == RES_OK);
+ CHK(n == ntransitions);
+
+ CHK(shitran_transitions_get(NULL, &trs_list) == RES_BAD_ARG);
+ CHK(shitran_transitions_get(trs, NULL) == RES_BAD_ARG);
+ CHK(shitran_transitions_get(trs, &trs_list) == RES_OK);
+
+ FOR_EACH(i, 0, n) {
+ CHK(transition_eq(trs_list+i, transitions+i));
+ }
+
CHK(shitran_transitions_ref_get(NULL) == RES_BAD_ARG);
CHK(shitran_transitions_ref_get(trs) == RES_OK);
CHK(shitran_transitions_ref_put(NULL) == RES_BAD_ARG);