b124450d0c
- measure.js: sampleWidthsPx scanline sampler - inventory.js: prepareInventoryMetadata - +page.svelte: full 4-state capture flow (Add photo, Mask, Axis, Measure) - Canvas overlay: checkerboard mask, bounding rect, axis line - Inventory PNG: 3:4 portrait, slab centered 80% fill, alpha - 77/77 unit tests green
36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import * as m from '../../src/lib/core/math.js';
|
|
import { prepareInventoryMetadata } from '../../src/lib/core/inventory.js';
|
|
|
|
describe('prepareInventoryMetadata', () => {
|
|
it('calculates correct metadata for a 21in x 12in slab at 1.75in thick', () => {
|
|
const Lpx = 3360, L = 21, scale = 160, thickness = 1.75;
|
|
const widthPx = 1920; // 12in
|
|
const maskPx = Lpx * widthPx; // 6,451,200
|
|
|
|
const result = prepareInventoryMetadata(
|
|
maskPx,
|
|
scale,
|
|
L,
|
|
thickness,
|
|
[1600, 1920, 2080, 1600]
|
|
);
|
|
|
|
// sqft = (6,451,200 / 160^2) / 144 = 1.75
|
|
expect(result.sqft).toBe(1.75);
|
|
// bdft = 1.75 * 1.75 = 3.0625 -> 3.06
|
|
expect(result.bdft).toBe(3.06);
|
|
expect(result.lengthIn).toBe(21);
|
|
expect(result.thicknessIn).toBe(1.75);
|
|
expect(result.minWidth).toBe(10);
|
|
expect(result.maxWidth).toBe(13);
|
|
expect(result.avgWidth).toBe(11.25);
|
|
});
|
|
|
|
it('handles zero area', () => {
|
|
const result = prepareInventoryMetadata(0, 160, 21, 1.75, []);
|
|
expect(result.sqft).toBe(0);
|
|
expect(result.bdft).toBe(0);
|
|
});
|
|
});
|