|
1 | 1 | import os |
2 | 2 |
|
3 | 3 | import pytest |
| 4 | +import numpy as np |
| 5 | +from numpy.testing import assert_allclose |
4 | 6 | import darshan.backend.cffi_backend as backend |
5 | 7 | from darshan.log_utils import get_log_path |
6 | 8 |
|
|
33 | 35 | 'read_segments': []})]) |
34 | 36 | def test_dxt_records(logfile, mod, expected_dict): |
35 | 37 | # regression guard for DXT records values |
| 38 | + # write_segments and read_segments are now NumPy |
| 39 | + # recarrays, to save considerable memory |
| 40 | + # per gh-779 |
| 41 | + # TODO: refactor for simplicity--we can probably |
| 42 | + # just initialize the expected values via |
| 43 | + # np.array() with the appropriate structured dtypes |
| 44 | + expected_write_segs = np.recarray(1, dtype=[("offset", int), |
| 45 | + ("length", int), |
| 46 | + ("start_time", float), |
| 47 | + ("end_time", float)]) |
| 48 | + expected_read_segs = np.recarray(1, dtype=[("offset", int), |
| 49 | + ("length", int), |
| 50 | + ("start_time", float), |
| 51 | + ("end_time", float)]) |
| 52 | + if expected_dict["write_segments"]: |
| 53 | + expected_write_segs.offset = expected_dict["write_segments"][0]["offset"] |
| 54 | + expected_write_segs.length = expected_dict["write_segments"][0]["length"] |
| 55 | + expected_write_segs.start_time = expected_dict["write_segments"][0]["start_time"] |
| 56 | + expected_write_segs.end_time = expected_dict["write_segments"][0]["end_time"] |
| 57 | + else: |
| 58 | + expected_write_segs = np.recarray(0, dtype=[("offset", int), |
| 59 | + ("length", int), |
| 60 | + ("start_time", float), |
| 61 | + ("end_time", float)]) |
| 62 | + if expected_dict["read_segments"]: |
| 63 | + expected_read_segs.offset = expected_dict["read_segments"][0]["offset"] |
| 64 | + expected_read_segs.length = expected_dict["read_segments"][0]["length"] |
| 65 | + expected_read_segs.start_time = expected_dict["read_segments"][0]["start_time"] |
| 66 | + expected_read_segs.end_time = expected_dict["read_segments"][0]["end_time"] |
| 67 | + else: |
| 68 | + expected_read_segs = np.recarray(0, dtype=[("offset", int), |
| 69 | + ("length", int), |
| 70 | + ("start_time", float), |
| 71 | + ("end_time", float)]) |
| 72 | + expected_dict["write_segments"] = expected_write_segs |
| 73 | + expected_dict["read_segments"] = expected_read_segs |
| 74 | + |
36 | 75 | logfile = get_log_path(logfile) |
37 | 76 | log = backend.log_open(logfile) |
38 | 77 | rec = backend.log_get_record(log, mod) |
39 | | - assert rec == expected_dict |
| 78 | + for key in expected_dict.keys(): |
| 79 | + if "segments" in key: |
| 80 | + # careful, can't use assert_allclose directly |
| 81 | + # on recarrays |
| 82 | + assert_allclose(rec[key].offset, expected_dict[key].offset) |
| 83 | + assert_allclose(rec[key].length, expected_dict[key].length) |
| 84 | + assert_allclose(rec[key].start_time, expected_dict[key].start_time) |
| 85 | + assert_allclose(rec[key].end_time, expected_dict[key].end_time) |
| 86 | + else: |
| 87 | + assert rec[key] == expected_dict[key] |
0 commit comments