@@ -41,6 +41,9 @@ import mp_units;
41
41
using namespace mp_units ;
42
42
using namespace mp_units ::si::unit_symbols;
43
43
44
+ inline constexpr struct mean_sea_level final : mp_units::absolute_point_origin<mp_units::isq::altitude> {
45
+ } mean_sea_level;
46
+
44
47
// classical
45
48
46
49
TEST_CASE (" math operations" , " [math]" )
@@ -353,6 +356,80 @@ TEST_CASE("math operations", "[math]")
353
356
}
354
357
}
355
358
359
+ SECTION (" lerp functions" )
360
+ {
361
+ SECTION (" lerp should work on the same quantity points" )
362
+ {
363
+ SECTION (" default origins" )
364
+ {
365
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[m]>(100 .), 0.0 ) == point<isq::altitude[m]>(99 .));
366
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[m]>(100 .), 0.5 ) ==
367
+ point<isq::altitude[m]>(99.5 ));
368
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[m]>(100 .), 1.0 ) ==
369
+ point<isq::altitude[m]>(100 .));
370
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[m]>(100 .), 2.0 ) ==
371
+ point<isq::altitude[m]>(101 .));
372
+ }
373
+
374
+ SECTION (" custom origins" )
375
+ {
376
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (100 . * m), 0.0 ) ==
377
+ mean_sea_level + isq::height (99 . * m));
378
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (100 . * m), 0.5 ) ==
379
+ mean_sea_level + isq::height (99.5 * m));
380
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (100 . * m), 1.0 ) ==
381
+ mean_sea_level + isq::height (100 . * m));
382
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (100 . * m), 2.0 ) ==
383
+ mean_sea_level + isq::height (101 . * m));
384
+ }
385
+ }
386
+
387
+ SECTION (" lerp should work with different units of the same dimension" )
388
+ {
389
+ SECTION (" default origins" )
390
+ {
391
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[cm]>(10'000 .), 0.0 ) ==
392
+ point<isq::altitude[m]>(99 .));
393
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[cm]>(10'000 .), 0.5 ) ==
394
+ point<isq::altitude[m]>(99.5 ));
395
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[cm]>(10'000 .), 1.0 ) ==
396
+ point<isq::altitude[m]>(100 .));
397
+ REQUIRE (lerp (point<isq::altitude[m]>(99 .), point<isq::altitude[cm]>(10'000 .), 2.0 ) ==
398
+ point<isq::altitude[m]>(101 .));
399
+ }
400
+
401
+ SECTION (" custom origins" )
402
+ {
403
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (10'000 . * cm), 0.0 ) ==
404
+ mean_sea_level + isq::height (99 . * m));
405
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (10'000 . * cm), 0.5 ) ==
406
+ mean_sea_level + isq::height (99.5 * m));
407
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (10'000 . * cm), 1.0 ) ==
408
+ mean_sea_level + isq::height (100 . * m));
409
+ REQUIRE (lerp (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (10'000 . * cm), 2.0 ) ==
410
+ mean_sea_level + isq::height (101 . * m));
411
+ }
412
+ }
413
+ }
414
+
415
+ SECTION (" midpoint functions" )
416
+ {
417
+ SECTION (" midpoint should work on the same quantity points" )
418
+ {
419
+ REQUIRE (midpoint (point<isq::altitude[m]>(99 .), point<isq::altitude[m]>(100 .)) == point<isq::altitude[m]>(99.5 ));
420
+ REQUIRE (midpoint (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (100 . * m)) ==
421
+ mean_sea_level + isq::height (99.5 * m));
422
+ }
423
+
424
+ SECTION (" midpoint should work with different units of the same dimension" )
425
+ {
426
+ REQUIRE (midpoint (point<isq::altitude[m]>(99 .), point<isq::altitude[cm]>(10'000 .)) ==
427
+ point<isq::altitude[m]>(99.5 ));
428
+ REQUIRE (midpoint (mean_sea_level + isq::height (99 . * m), mean_sea_level + isq::height (10'000 . * cm)) ==
429
+ mean_sea_level + isq::height (99.5 * m));
430
+ }
431
+ }
432
+
356
433
SECTION (" SI trigonometric functions" )
357
434
{
358
435
SECTION (" sin" )
0 commit comments