Skip to content

Commit

Permalink
Merge pull request #3814 from Kelimion/fix_fixed
Browse files Browse the repository at this point in the history
Fix core:math/fixed.
  • Loading branch information
Kelimion authored Jun 26, 2024
2 parents 3726f0b + c33bf76 commit e37afa3
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/math/fixed/fixed.odin
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ init_from_f64 :: proc(x: ^$T/Fixed($Backing, $Fraction_Width), val: f64) {
init_from_parts :: proc(x: ^$T/Fixed($Backing, $Fraction_Width), integer, fraction: Backing) {
x.i = fraction
x.i &= 1<<Fraction_Width - 1
x.i |= integer
x.i |= (integer << Fraction_Width)
}

to_f64 :: proc(x: $T/Fixed($Backing, $Fraction_Width)) -> f64 {
Expand Down
51 changes: 51 additions & 0 deletions tests/core/math/fixed/test_core_math_fixed.odin
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package test_core_math_fixed

import "core:math/fixed"
import "core:testing"

@test
test_fixed_4_4_unsigned :: proc(t: ^testing.T) {
I_SHIFT :: 4
F_MASK :: 15
F_ULP :: 0.0625
Fixed :: fixed.Fixed(u8, 4)

for c in 0..<256 {
raw := u8(c)
fv := transmute(Fixed)raw

i := raw >> I_SHIFT
f := raw & F_MASK
expected := f64(i) + F_ULP * f64(f)

testing.expectf(t, fixed.to_f64(fv) == expected, "Expected Fixed(u8, 4)(%v) to equal %.5f, got %.5f", raw, expected, fixed.to_f64(fv))
}
}

@test
test_fixed_4_4_signed :: proc(t: ^testing.T) {
I_SHIFT :: 4
F_MASK :: 15
F_ULP :: 0.0625
Fixed :: fixed.Fixed(i8, 4)

for c in 0..<256 {
raw := i8(c)
fv := transmute(Fixed)raw

f := raw & F_MASK
expected: f64
if c < 128 {
i := raw >> I_SHIFT
expected = f64(i) + F_ULP * f64(f)
} else if c == 128 {
expected = 8.0

} else if c > 128 {
i := i8(-8)
i += (raw & 0b0111_0000) >> I_SHIFT
expected = f64(i) + F_ULP * f64(f)
}
testing.expectf(t, fixed.to_f64(fv) == expected, "Expected Fixed(i8, 4)(%v, %v) to equal %.5f, got %.5f", c, raw, expected, fixed.to_f64(fv))
}
}

0 comments on commit e37afa3

Please sign in to comment.