File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 :
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments