feat: initial release
Assisted-by: GLM 5.3 Flash
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package core
|
||||
|
||||
import "testing"
|
||||
|
||||
// TestCumProdHalfNarrowsCarryPerStep pins the float16 cumulative
|
||||
// product's carry discipline: every step narrows the running product to
|
||||
// half before combining, exactly as the stored element narrows, so each
|
||||
// step multiplies the rounded carry. The input 67, 65, 6 makes the
|
||||
// discipline visible: 67 times 65 is 4355 in float64, which narrows to
|
||||
// 4356, and 4356 times 6 rounds to 26144; a carry left in float64 would
|
||||
// give 4355 times 6 = 26130, which rounds to 26128.
|
||||
func TestCumProdHalfNarrowsCarryPerStep(t *testing.T) {
|
||||
a := mustFromHalves(t, []uint16{
|
||||
HalfFromFloat64(67), HalfFromFloat64(65), HalfFromFloat64(6),
|
||||
}, 3)
|
||||
out, err := CumProd(a, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("CumProd: %v", err)
|
||||
}
|
||||
want := []float64{67, 4356, 26144}
|
||||
for i, w := range want {
|
||||
if got := HalfToFloat64(out.RawHalves()[i]); got != w {
|
||||
t.Fatalf("element %d = %v, want %v", i, got, w)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user