Skip to content

Commit 1f4d7ec

Browse files
committed
Add 24-parameter support to SUM and AVERAGE
1 parent 9996f6a commit 1f4d7ec

File tree

2 files changed

+66
-13
lines changed

2 files changed

+66
-13
lines changed

tests/tetests.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,24 @@ TEST_CASE("Main tests", "[main]")
637637
CHECK(tep.evaluate("sum(9,9,9,9)") == 36);
638638
CHECK(tep.evaluate("sum(9,9,9,9,9)") == 45);
639639
CHECK(tep.evaluate("sum(9,9,9,9,9,9)") == 54);
640+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8)") == 62);
641+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4)") == 66);
642+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7)") == 73);
643+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1)") == 74);
644+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4)") == 70);
645+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10)") == 60);
646+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8)") == 68);
647+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5)") == 73);
648+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7)") == 80);
649+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9)") == 89);
650+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11)") == 100);
651+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23)") == 123);
652+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17)") == 140);
653+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17, 50)") == 190);
654+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17, 50, -90)") == 100);
655+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17, 50, -90, 100)") == 200);
656+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17, 50, -90, 100, -100)") == 100);
657+
CHECK(tep.evaluate("sum(9,9,9,9,9,9,8,4,7,1,-4,-10, 8, 5, 7,9,11, 23, 17, 50, -90, 100, -100, -50)") == 50);
640658
CHECK(tep.evaluate("sum(pow(3,2),sum(3,3,3),9,pow(3,2),6+3,9,9)") == 63);
641659
CHECK(tep.evaluate("pow(3,2)+sum(pow(3,2),sum(3,3,3),9,pow(3,2),6+3,9,9)") == 72);
642660
CHECK(tep.evaluate("pow(2, sum(2,2))") == 16);
@@ -647,6 +665,23 @@ TEST_CASE("Main tests", "[main]")
647665
CHECK(tep.evaluate("average(1,2,3,4,5)") == 3);
648666
CHECK(tep.evaluate("average(1,2,3,4,5,6)") == 3.5);
649667
CHECK(tep.evaluate("average(1,2,3,4,5,6,7)") == 4);
668+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8)") == 4.5);
669+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9)") == 5);
670+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10)") == 5.5);
671+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11)") == 6);
672+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12)") == 6.5);
673+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13)") == 7);
674+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14)") == 7.5);
675+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)") == 8);
676+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)") == 8.5);
677+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)") == 9);
678+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)") == 9.5);
679+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)") == 10);
680+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)") == 10.5);
681+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)") == 11);
682+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)") == 11.5);
683+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23)") == 12);
684+
CHECK(tep.evaluate("average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)") == 12.5);
650685
}
651686

652687
SECTION("logical")

tinyexpr.cpp

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -395,27 +395,45 @@ namespace te_builtins
395395

396396
[[nodiscard]]
397397
static te_type te_sum(te_type val1, te_type val2, te_type val3, te_type val4, te_type val5,
398-
te_type val6, te_type val7)
398+
te_type val6, te_type val7, te_type val8, te_type val9, te_type val10,
399+
te_type val11, te_type val12, te_type val13, te_type val14, te_type val15,
400+
te_type val16, te_type val17, te_type val18, te_type val19, te_type val20,
401+
te_type val21, te_type val22, te_type val23, te_type val24)
399402
{
400403
const auto getSumMaybeNan = [](const auto val) { return (!std::isfinite(val) ? 0 : val); };
401404

402-
return getSumMaybeNan(val1) + getSumMaybeNan(val2) +
403-
getSumMaybeNan(val3)+ getSumMaybeNan(val4) +
404-
getSumMaybeNan(val5) + getSumMaybeNan(val6) +
405-
getSumMaybeNan(val7);
405+
return getSumMaybeNan(val1) + getSumMaybeNan(val2) + getSumMaybeNan(val3) +
406+
getSumMaybeNan(val4) + getSumMaybeNan(val5) + getSumMaybeNan(val6) +
407+
getSumMaybeNan(val7) + getSumMaybeNan(val8) + getSumMaybeNan(val9) +
408+
getSumMaybeNan(val10) + getSumMaybeNan(val11) + getSumMaybeNan(val12) +
409+
getSumMaybeNan(val13) + getSumMaybeNan(val14) + getSumMaybeNan(val15) +
410+
getSumMaybeNan(val16) + getSumMaybeNan(val17) + getSumMaybeNan(val18) +
411+
getSumMaybeNan(val19) + getSumMaybeNan(val20) + getSumMaybeNan(val21) +
412+
getSumMaybeNan(val22) + getSumMaybeNan(val23) + getSumMaybeNan(val24);
406413
}
407414

408415
[[nodiscard]]
409416
static te_type te_average(te_type val1, te_type val2, te_type val3, te_type val4, te_type val5,
410-
te_type val6, te_type val7)
417+
te_type val6, te_type val7, te_type val8, te_type val9, te_type val10,
418+
te_type val11, te_type val12, te_type val13, te_type val14,
419+
te_type val15, te_type val16, te_type val17, te_type val18,
420+
te_type val19, te_type val20, te_type val21, te_type val22,
421+
te_type val23, te_type val24)
411422
{
412423
const auto isValidMaybeNan = [](const auto val) { return (!std::isfinite(val) ? 0 : 1); };
413424

414-
const auto validN = isValidMaybeNan(val1) + isValidMaybeNan(val2) +
415-
isValidMaybeNan(val3) + isValidMaybeNan(val4) +
416-
isValidMaybeNan(val5) + isValidMaybeNan(val6) +
417-
isValidMaybeNan(val7);
418-
const auto total = te_sum(val1, val2, val3, val4, val5, val6, val7);
425+
const auto validN =
426+
isValidMaybeNan(val1) + isValidMaybeNan(val2) + isValidMaybeNan(val3) +
427+
isValidMaybeNan(val4) + isValidMaybeNan(val5) + isValidMaybeNan(val6) +
428+
isValidMaybeNan(val7) + isValidMaybeNan(val8) + isValidMaybeNan(val9) +
429+
isValidMaybeNan(val10) + isValidMaybeNan(val11) + isValidMaybeNan(val12) +
430+
isValidMaybeNan(val13) + isValidMaybeNan(val14) + isValidMaybeNan(val15) +
431+
isValidMaybeNan(val16) + isValidMaybeNan(val17) + isValidMaybeNan(val18) +
432+
isValidMaybeNan(val19) + isValidMaybeNan(val20) + isValidMaybeNan(val21) +
433+
isValidMaybeNan(val22) + isValidMaybeNan(val23) + isValidMaybeNan(val24);
434+
const auto total =
435+
te_sum(val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11, val12, val13,
436+
val14, val15, val16, val17, val18, val19, val20, val21, val22, val23, val24);
419437
return te_divide(total, static_cast<te_type>(validN));
420438
}
421439

@@ -1256,7 +1274,7 @@ const std::set<te_variable> te_parser::m_functions = { // NOLINT
12561274
{ "asin", static_cast<te_fun1>(te_builtins::te_asin), TE_PURE },
12571275
{ "atan", static_cast<te_fun1>(te_builtins::te_atan), TE_PURE },
12581276
{ "atan2", static_cast<te_fun2>(te_builtins::te_atan2), TE_PURE },
1259-
{ "average", static_cast<te_fun7>(te_builtins::te_average),
1277+
{ "average", static_cast<te_fun24>(te_builtins::te_average),
12601278
static_cast<te_variable_flags>(TE_PURE | TE_VARIADIC) },
12611279
#ifndef TE_FLOAT
12621280
{ "bitand", static_cast<te_fun2>(te_builtins::te_bitwise_and), TE_PURE },
@@ -1334,7 +1352,7 @@ const std::set<te_variable> te_parser::m_functions = { // NOLINT
13341352
{ "sinh", static_cast<te_fun1>(te_builtins::te_sinh), TE_PURE },
13351353
{ "sqr", static_cast<te_fun1>(te_builtins::te_sqr), TE_PURE },
13361354
{ "sqrt", static_cast<te_fun1>(te_builtins::te_sqrt), TE_PURE },
1337-
{ "sum", static_cast<te_fun7>(te_builtins::te_sum),
1355+
{ "sum", static_cast<te_fun24>(te_builtins::te_sum),
13381356
static_cast<te_variable_flags>(TE_PURE | TE_VARIADIC) },
13391357
{ "supports32bit", static_cast<te_fun0>(te_builtins::te_supports_32bit), TE_PURE },
13401358
{ "supports64bit", static_cast<te_fun0>(te_builtins::te_supports_64bit), TE_PURE },

0 commit comments

Comments
 (0)