You are just testing that the imaginary part is insignificant, right? Then perhaps check that im(foo.n(chop=True)) == 0

```
>>> im(S(3))
0
>>> im(S(3)+I)
1
>>> im(S(3)+I*1e-22)
1.00000000000000e-22
>>> im((S(3)+I*1e-22).n(chop=True))
0
>>> im((S(3)+I*1e-12).n(chop=True))
1.00000000000000e-12
```

But again, you get into the "how small is small" issue so perhaps the magnitude of the im part should be compared to the real part ith the comp function again

```
>>> im((S(3)*1e-22+I*1e-22).n(chop=True))  # this shouldn't have chopped, IMO
0
```