( label: string, actual: number, minInclusive: number, maxInclusive: number, )
| 9 | }; |
| 10 | |
| 11 | const assertInClosedRange = ( |
| 12 | label: string, |
| 13 | actual: number, |
| 14 | minInclusive: number, |
| 15 | maxInclusive: number, |
| 16 | ): void => { |
| 17 | assert( |
| 18 | Number.isFinite(actual), |
| 19 | `${label}: expected finite number but got ${actual}`, |
| 20 | ); |
| 21 | assert( |
| 22 | actual >= minInclusive && actual <= maxInclusive, |
| 23 | `${label}: expected in [${minInclusive}, ${maxInclusive}] but got ${actual}`, |
| 24 | ); |
| 25 | }; |
| 26 | |
| 27 | // Scalar tween: 0 -> 100 over 300ms, monotonic easing, discrete updates at 0/150/300. |
| 28 | // - first update yields ~0 |
no test coverage detected