scalar-autograd
Version:
Scalar-based reverse-mode automatic differentiation in TypeScript.
31 lines (30 loc) • 1.5 kB
JavaScript
;
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();
});
});