forked from open-atmos/PyPartMC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_gas_state.py
148 lines (117 loc) · 3.66 KB
/
test_gas_state.py
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
####################################################################################################
# This file is a part of PyPartMC licensed under the GNU General Public License v3 (LICENSE file) #
# Copyright (C) 2022 University of Illinois Urbana-Champaign #
# Authors: https://github.com/open-atmos/PyPartMC/graphs/contributors #
####################################################################################################
import gc
import platform
import pytest
import PyPartMC as ppmc
from .test_gas_data import GAS_DATA_CTOR_ARG_MINIMAL
GAS_DATA_MINIMAL = ppmc.GasData(GAS_DATA_CTOR_ARG_MINIMAL)
GAS_STATE_MINIMAL = ({"SO2": [0.1]},)
class TestGasState:
@staticmethod
def test_ctor_valid():
# act
sut = ppmc.GasState(GAS_DATA_MINIMAL)
# assert
assert isinstance(sut, ppmc.GasState)
@staticmethod
@pytest.mark.parametrize("idx", (-1, 100))
@pytest.mark.skipif(platform.machine() == "arm64", reason="TODO #348")
def test_get_item_out_of_range(idx):
# arrange
sut = ppmc.GasState(GAS_DATA_MINIMAL)
# act
try:
_ = sut[idx]
except IndexError:
return
# assert
assert False
@staticmethod
def test_get_item_valid():
# arrange
sut = ppmc.GasState(GAS_DATA_MINIMAL)
sut[0] = 44
# act
value = sut[0]
# assert
assert isinstance(value, float)
assert value == 44
@staticmethod
def test_get_items():
# arrange
gas_data = ppmc.GasData(
(
"SO2",
"NO2",
"NO",
"CO",
)
)
sut = ppmc.GasState(gas_data)
gas_data = None
gc.collect()
# act
values = sut.mix_rats
# assert
assert isinstance(values, list)
assert len(sut) == len(values)
@staticmethod
def test_set_item():
# arrange
sut = ppmc.GasState(GAS_DATA_MINIMAL)
idx = 0
val = 1234
# act
sut[idx] = val
# assert
assert sut[idx] == val
@staticmethod
def test_get_mix_rats():
# arrange
gas_data = GAS_DATA_MINIMAL
# act
sut = ppmc.GasState(gas_data)
# assert
assert len(sut.mix_rats) == len(sut)
@staticmethod
def test_set_mix_rats_from_json():
# arrange
gas_data = ppmc.GasData(
(
"SO2",
"NO2",
"NO",
"CO",
)
)
sut = ppmc.GasState(gas_data)
# act
gas_state_init_values = ({"SO2": [0.1]}, {"CO": [0.5]})
sut.mix_rats = gas_state_init_values
# assert
idx_set = []
for item in gas_state_init_values:
keys = item.keys()
assert len(keys) == 1
key = tuple(keys)[0]
val = tuple(item.values())[0][0]
idx_set.append(gas_data.spec_by_name(key))
assert sut[gas_data.spec_by_name(key)] == val
for i_spec in range(gas_data.n_spec):
if not i_spec in idx_set:
assert sut[i_spec] == 0
@staticmethod
@pytest.mark.skipif(platform.machine() == "arm64", reason="TODO #348")
def test_set_mix_rats_empty():
# arrange
gas_data = ppmc.GasData(("SO2",))
sut = ppmc.GasState(gas_data)
# act
with pytest.raises(RuntimeError) as excinfo:
sut.mix_rats = ()
# assert
assert str(excinfo.value) == "Non-empty sequence of mixing ratios expected"