Skip to content

Commit 692dc4b

Browse files
protocolstardustsingaraiona
authored andcommitted
feat(med) - Add support to F64 for median operation
1 parent 60bcd35 commit 692dc4b

2 files changed

Lines changed: 32 additions & 9 deletions

File tree

core/math.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2650,11 +2650,10 @@ obj_p ray_med(obj_p x) {
26502650
if (l == 0)
26512651
return f64(NULL_F64);
26522652

2653-
// i32_t *xi32sort;
26542653
i64_t *xisort;
26552654
u8_t *xu8sort;
26562655
i16_t *xi16sort;
2657-
// f64_t *xfsort, med;
2656+
f64_t *xfsort;
26582657
f64_t med;
26592658
obj_p sort;
26602659

@@ -2700,14 +2699,13 @@ obj_p ray_med(obj_p x) {
27002699
drop_obj(sort);
27012700

27022701
return f64(med);
2703-
// TODO
2704-
// case TYPE_F64:
2705-
// sort = ray_asc(x);
2706-
// xfsort = AS_F64(sort);
2707-
// med = (l % 2 == 0) ? (xfsort[l / 2 - 1] + xfsort[l / 2]) / 2.0 : xfsort[l / 2];
2708-
// drop_obj(sort);
27092702

2710-
// return f64(med);
2703+
case TYPE_F64:
2704+
sort = ray_asc(x);
2705+
xfsort = AS_F64(sort);
2706+
med = (l % 2 == 0) ? (xfsort[l / 2 - 1] + xfsort[l / 2]) / 2.0 : xfsort[l / 2];
2707+
drop_obj(sort);
2708+
return f64(med);
27112709

27122710
case TYPE_PARTEDI16:
27132711
case TYPE_PARTEDI32:

tests/aggr_tests.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,31 @@ test_result_t test_aggr_median() {
283283
// All same values
284284
TEST_ASSERT_EQ("(med [5 5 5 5 5])", "5.0");
285285

286+
// F64 odd length
287+
TEST_ASSERT_EQ("(med [1.0 2.0 3.0 4.0 5.0])", "3.0");
288+
TEST_ASSERT_EQ("(med [5.0 1.0 3.0 2.0 4.0])", "3.0");
289+
TEST_ASSERT_EQ("(med [100.5 200.5 300.5])", "200.5");
290+
291+
// F64 even length
292+
TEST_ASSERT_EQ("(med [1.0 2.0 3.0 4.0])", "2.5");
293+
TEST_ASSERT_EQ("(med [10.0 20.0 30.0 40.0])", "25.0");
294+
295+
// F64 single element
296+
TEST_ASSERT_EQ("(med [42.5])", "42.5");
297+
298+
// F64 two elements
299+
TEST_ASSERT_EQ("(med [1.5 3.5])", "2.5");
300+
301+
// F64 negative values
302+
TEST_ASSERT_EQ("(med [-5.0 -3.0 -1.0 1.0 3.0])", "-1.0");
303+
TEST_ASSERT_EQ("(med [-10.0 0.0 10.0])", "0.0");
304+
305+
// F64 all same values
306+
TEST_ASSERT_EQ("(med [5.5 5.5 5.5 5.5 5.5])", "5.5");
307+
308+
// F64 scalar
309+
TEST_ASSERT_EQ("(med 3.14)", "3.14");
310+
286311
PASS();
287312
}
288313

0 commit comments

Comments
 (0)