linalg.h is textually short, but very general. Most operations have been generalized over:
whether operation acts on vectors or matrices
underlying element type
size of vector or dimensions of matrix
whether one of the arguments is a scalar of the element type
if one of the arguments is a scalar, whether it is on the left or the right
Additionally, names have been deliberately chosen to be terse, allowing for the concise expression of complex mathematical formula. This means plenty of potential name collisions with the std:: namespace and the potential for unintended argument-dependent lookup.
We're going to need a good set of unit tests to make sure that all templates are being instantiated across the range of reasonable types, sizes, and argument combinations. We don't need to get super exhaustive, given that most functions are one-liners and many functions share common structure, but we should make sure we're equipped to catch regressions as the library evolves.
linalg.h
is textually short, but very general. Most operations have been generalized over:Additionally, names have been deliberately chosen to be terse, allowing for the concise expression of complex mathematical formula. This means plenty of potential name collisions with the std:: namespace and the potential for unintended argument-dependent lookup.
We're going to need a good set of unit tests to make sure that all templates are being instantiated across the range of reasonable types, sizes, and argument combinations. We don't need to get super exhaustive, given that most functions are one-liners and many functions share common structure, but we should make sure we're equipped to catch regressions as the library evolves.