iliekturtles / uom

Units of measurement -- type-safe zero-cost dimensional analysis
Apache License 2.0
989 stars 89 forks source link

Conversion now has both a value and a factor type #453

Open mkalte666 opened 6 months ago

mkalte666 commented 6 months ago

Initially, ConversionFactor and thus Conversion::T requred PartialEq. This makes sense for the conversion factor itself (i.e. scaling across units), however it breaks once you introduce complex numbers.

Those can still be scaled just like normal numbers - you essentially just increase or decrese a vector length, but the conversion function cannot compare them - "Z_1 < Z_2" is not trivially decidable.

It is, however, also not needed - unit scales are just that - scalars that scale. And those can be easily compared.

This commit seperates Conversion::T into Conversion::VT and Conversion::T and moves the PartialEq requirements from ConversionFactor into Conversion::TT directly.

This requires a lot of trait bounds added down the line, so im not 100% that this does not break anything down the line.

There might be a nicer way to go about this, but i haven't found any.

closes #452

Please have a look and see if this is where it should go.

Things that still need to be done:

iliekturtles commented 6 months ago

Thanks for the PR. I kicked off the CI checks and will try to review this weekend.

mkalte666 commented 5 months ago

Should i rebase this and try again? Or do you have a different solution/idea/want for this? Not sure when i can schedule time again, but with any luck i can get it in before the weekend.