Add support for training and 2 segfault fixes

Looks sane the way those asserts are used, to me. Do you think we should talk about those in the coding guidelines?

> If it is a function call, it will always be computed even if it the assertion doesn't fail.

Ah yes. I won't be nit-picking here since it's not worth it. The soul of my counterpoint about changing it to a function was more about code readability anyway. :)
Maybe, adding a few "\ & new-lines" will make it more readable, for instance?
If it's readable, I don't care if it's a macro to be honest.