|
1 | 1 | #!/usr/bin/env python
|
| 2 | +import pytest |
2 | 3 |
|
3 | 4 | import can
|
4 | 5 |
|
@@ -202,3 +203,90 @@ def test_string_representation():
|
202 | 203 | "DBR: 2000000 bit/s, DSP: 75.00%, DBRP: 1, DTSEG1: 29, DTSEG2: 10, DSJW: 10, "
|
203 | 204 | "f_clock: 80MHz"
|
204 | 205 | )
|
| 206 | + |
| 207 | + |
| 208 | +def test_repr(): |
| 209 | + timing = can.BitTiming(f_clock=8000000, bitrate=1000000, tseg1=5, tseg2=2, sjw=1) |
| 210 | + assert repr(timing) == ( |
| 211 | + "can.BitTiming(f_clock=8000000, bitrate=1000000, tseg1=5, tseg2=2, sjw=1, nof_samples=1)" |
| 212 | + ) |
| 213 | + |
| 214 | + fd_timing = can.BitTimingFd( |
| 215 | + f_clock=80_000_000, |
| 216 | + nom_bitrate=500_000, |
| 217 | + nom_tseg1=119, |
| 218 | + nom_tseg2=40, |
| 219 | + nom_sjw=40, |
| 220 | + data_bitrate=2_000_000, |
| 221 | + data_tseg1=29, |
| 222 | + data_tseg2=10, |
| 223 | + data_sjw=10, |
| 224 | + ) |
| 225 | + assert repr(fd_timing) == ( |
| 226 | + "can.BitTimingFd(f_clock=80000000, nom_bitrate=500000, nom_tseg1=119, nom_tseg2=40, " |
| 227 | + "nom_sjw=40, data_bitrate=2000000, data_tseg1=29, data_tseg2=10, data_sjw=10)" |
| 228 | + ) |
| 229 | + |
| 230 | + |
| 231 | +def test_mapping(): |
| 232 | + timing = can.BitTiming( |
| 233 | + f_clock=8_000_000, bitrate=1_000_000, tseg1=5, tseg2=2, sjw=1 |
| 234 | + ) |
| 235 | + timing_dict = dict(timing) |
| 236 | + assert timing_dict["f_clock"] == timing["f_clock"] |
| 237 | + assert timing_dict["bitrate"] == timing["bitrate"] |
| 238 | + assert timing_dict["tseg1"] == timing["tseg1"] |
| 239 | + assert timing_dict["tseg2"] == timing["tseg2"] |
| 240 | + assert timing_dict["sjw"] == timing["sjw"] |
| 241 | + assert timing == can.BitTiming(**timing_dict) |
| 242 | + |
| 243 | + fd_timing = can.BitTimingFd( |
| 244 | + f_clock=80_000_000, |
| 245 | + nom_bitrate=500_000, |
| 246 | + nom_tseg1=119, |
| 247 | + nom_tseg2=40, |
| 248 | + nom_sjw=40, |
| 249 | + data_bitrate=2_000_000, |
| 250 | + data_tseg1=29, |
| 251 | + data_tseg2=10, |
| 252 | + data_sjw=10, |
| 253 | + ) |
| 254 | + fd_timing_dict = dict(fd_timing) |
| 255 | + assert fd_timing_dict["f_clock"] == fd_timing["f_clock"] |
| 256 | + assert fd_timing_dict["nom_bitrate"] == fd_timing["nom_bitrate"] |
| 257 | + assert fd_timing_dict["nom_tseg1"] == fd_timing["nom_tseg1"] |
| 258 | + assert fd_timing_dict["nom_tseg2"] == fd_timing["nom_tseg2"] |
| 259 | + assert fd_timing_dict["nom_sjw"] == fd_timing["nom_sjw"] |
| 260 | + assert fd_timing_dict["data_bitrate"] == fd_timing["data_bitrate"] |
| 261 | + assert fd_timing_dict["data_tseg1"] == fd_timing["data_tseg1"] |
| 262 | + assert fd_timing_dict["data_tseg2"] == fd_timing["data_tseg2"] |
| 263 | + assert fd_timing_dict["data_sjw"] == fd_timing["data_sjw"] |
| 264 | + assert fd_timing == can.BitTimingFd(**fd_timing_dict) |
| 265 | + |
| 266 | + |
| 267 | +def test_oscillator_tolerance(): |
| 268 | + timing = can.BitTiming( |
| 269 | + f_clock=16_000_000, bitrate=500_000, tseg1=10, tseg2=5, sjw=4 |
| 270 | + ) |
| 271 | + osc_tol = timing.oscillator_tolerance( |
| 272 | + node_loop_delay_ns=250, |
| 273 | + bus_length_m=10.0, |
| 274 | + ) |
| 275 | + assert osc_tol == pytest.approx(1.23, abs=1e-2) |
| 276 | + |
| 277 | + fd_timing = can.BitTimingFd( |
| 278 | + f_clock=80_000_000, |
| 279 | + nom_bitrate=500_000, |
| 280 | + nom_tseg1=27, |
| 281 | + nom_tseg2=4, |
| 282 | + nom_sjw=4, |
| 283 | + data_bitrate=2_000_000, |
| 284 | + data_tseg1=6, |
| 285 | + data_tseg2=1, |
| 286 | + data_sjw=1, |
| 287 | + ) |
| 288 | + osc_tol = fd_timing.oscillator_tolerance( |
| 289 | + node_loop_delay_ns=250, |
| 290 | + bus_length_m=10.0, |
| 291 | + ) |
| 292 | + assert osc_tol == pytest.approx(0.48543689320388345, abs=1e-2) |
0 commit comments