Files
levlib/quantity/voltage.odin
T
zack f1bf76e1be Added mass and remove unecesary private (#41)
Co-authored-by: Zachary Levy <zachary@sunforge.is>
Reviewed-on: #41
2026-07-14 20:43:50 +00:00

60 lines
1.8 KiB
Odin

package quantity
import "base:intrinsics"
//----- Volts ----------------------------------
Volts :: struct($V: typeid) where intrinsics.type_is_numeric(V) {
v: V,
}
// Prefer the to_milli_volts procedure group.
volts_to_milli_volts :: #force_inline proc "contextless" (
volts: Volts($V),
) -> Milli_Volts(V) where intrinsics.type_is_numeric(V) {
return Milli_Volts(V){volts.v * MILLI}
}
//----- Millivolts ----------------------------------
Milli_Volts :: struct($V: typeid) where intrinsics.type_is_numeric(V) {
v: V,
}
// Prefer the to_volts procedure group.
milli_volts_to_volts :: #force_inline proc "contextless" (
milli_volts: Milli_Volts($V),
) -> Volts(V) where intrinsics.type_is_numeric(V) {
return Volts(V){milli_volts.v / MILLI}
}
// ---------------------------------------------------------------------------------------------------------------------
// ----- Conversion Overloads ------------------------
// ---------------------------------------------------------------------------------------------------------------------
to_volts :: proc {
milli_volts_to_volts,
}
to_milli_volts :: proc {
volts_to_milli_volts,
}
// ---------------------------------------------------------------------------------------------------------------------
// ----- Tests ------------------------
// ---------------------------------------------------------------------------------------------------------------------
import "core:testing"
@(test)
test_volts_to_milli_volts :: proc(t: ^testing.T) {
volts := Volts(int){1}
milli_volts := to_milli_volts(volts)
testing.expect_value(t, milli_volts, Milli_Volts(int){1000})
}
@(test)
test_milli_volts_to_volts :: proc(t: ^testing.T) {
milli_volts := Milli_Volts(int){1000}
volts := to_volts(milli_volts)
testing.expect_value(t, volts, Volts(int){1})
}