UNPKG

scalar-autograd

Version:

Scalar-based reverse-mode automatic differentiation in TypeScript.

31 lines (30 loc) 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Value_1 = require("./Value"); const Losses_1 = require("./Losses"); describe('Loss function edge cases', () => { it('handles empty arrays', () => { expect(Losses_1.Losses.mse([], []).data).toBe(0); expect(Losses_1.Losses.mae([], []).data).toBe(0); expect(Losses_1.Losses.binaryCrossEntropy([], []).data).toBe(0); expect(Losses_1.Losses.categoricalCrossEntropy([], []).data).toBe(0); }); it('throws on mismatched lengths', () => { const a = [new Value_1.Value(1)]; const b = [new Value_1.Value(1), new Value_1.Value(2)]; expect(() => Losses_1.Losses.mse(a, b)).toThrow(); }); it('handles extreme values in binary cross entropy', () => { const out = new Value_1.Value(0.999999, 'out', true); const target = new Value_1.Value(1); const loss = Losses_1.Losses.binaryCrossEntropy([out], [target]); expect(loss.data).toBeGreaterThan(0); expect(loss.data).toBeLessThan(0.1); }); it('throws on invalid class indices in categorical cross entropy', () => { const outputs = [new Value_1.Value(1), new Value_1.Value(2)]; expect(() => Losses_1.Losses.categoricalCrossEntropy(outputs, [2])).toThrow(); expect(() => Losses_1.Losses.categoricalCrossEntropy(outputs, [-1])).toThrow(); expect(() => Losses_1.Losses.categoricalCrossEntropy(outputs, [1.5])).toThrow(); }); });