Yet one nitpick: the test output becomes much cleaner if you replace
```
def check(dat, datsp):
    ...
```
with
```
def check(dtype):
    dat = self.dat_dtypes[dtype]
    datsp = self.datsp_dtypes[dtype]
```

As a rule, avoiding passing arrays into test generators whenever possible is good, as otherwise you end up with obfuscated test output (i.e., it's not obvious which version of the tests is which, as you just see some random array contents).