In the beginning...
This commit is contained in:
59
quantity/voltage.odin
Normal file
59
quantity/voltage.odin
Normal file
@@ -0,0 +1,59 @@
|
||||
package quantity
|
||||
|
||||
import "base:intrinsics"
|
||||
|
||||
//----- Volts ----------------------------------
|
||||
Volts :: struct($V: typeid) where intrinsics.type_is_numeric(V) {
|
||||
v: V,
|
||||
}
|
||||
|
||||
@(private = "file")
|
||||
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,
|
||||
}
|
||||
|
||||
@(private = "file")
|
||||
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})
|
||||
}
|
||||
Reference in New Issue
Block a user