mirror of
https://github.com/captbaritone/webamp.git
synced 2026-01-23 18:25:30 +00:00
Fix mapping of ratios to indexes
This commit is contained in:
parent
1ead097fcd
commit
f35677e8cf
2 changed files with 19 additions and 6 deletions
16
js/utils.js
16
js/utils.js
|
|
@ -92,6 +92,16 @@ export const merge = (target, source) => {
|
|||
return target;
|
||||
};
|
||||
|
||||
// Maps a value in a range (defined my min/max) to the corresponding value in the array `newValues`.
|
||||
export const segment = (min, max, value, newValues) =>
|
||||
newValues[Math.floor((value - min) / (max - min) * (newValues.length - 1))];
|
||||
// Maps a value in a range (defined my min/max) to a value in an array (options).
|
||||
export const segment = (min, max, value, newValues) => {
|
||||
const ratio = (value - min) / (max - min);
|
||||
/*
|
||||
| 0 | 1 | 2 |
|
||||
0 1 2 3
|
||||
*/
|
||||
const index = Math.min(
|
||||
Math.floor(ratio * newValues.length),
|
||||
newValues.length - 1 // Special case for 100%
|
||||
);
|
||||
return newValues[index];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -143,16 +143,19 @@ describe("segment", () => {
|
|||
expect(segment(-1, 100, -1, [0, 1, 2])).toBe(0);
|
||||
});
|
||||
it("can handle max", () => {
|
||||
expect(segment(0, 100, 100, [0, 1, 2])).toBe(2);
|
||||
expect(segment(1, 100, 100, [0, 1, 2])).toBe(2);
|
||||
//expect(segment(0, 100, 100, [0, 1, 2])).toBe(2);
|
||||
//expect(segment(1, 100, 100, [0, 1, 2])).toBe(2);
|
||||
expect(segment(-1, 100, 100, [0, 1, 2])).toBe(2);
|
||||
});
|
||||
it("can handle mid", () => {
|
||||
expect(segment(0, 2, 1, [0, 1, 2])).toBe(1);
|
||||
expect(segment(0, 2, 1.5, [0, 1, 2])).toBe(1);
|
||||
expect(segment(0, 2, 1.5, [0, 1, 2])).toBe(2);
|
||||
expect(segment(1, 3, 2.5, [0, 1, 2])).toBe(2);
|
||||
expect(segment(-1, 2, 0.5, [0, 1, 2])).toBe(1);
|
||||
});
|
||||
it("can handle mid", () => {
|
||||
expect(segment(-100, 100, -100, ["left", "center", "right"])).toBe("left");
|
||||
expect(segment(0, 100, 88, ["left", "center", "right"])).toBe("right");
|
||||
expect(segment(0, 100, 50, ["left", "center", "right"])).toBe("center");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue