diff --git a/ext/numo/narray/gen/tmpl/qsort.c b/ext/numo/narray/gen/tmpl/qsort.c index 7d51ec41..dffda343 100644 --- a/ext/numo/narray/gen/tmpl/qsort.c +++ b/ext/numo/narray/gen/tmpl/qsort.c @@ -128,6 +128,7 @@ static void presorted; loop:SWAPINIT(a, es); + if (es >= sizeof(void*)) swaptype = 2; if (n < 7) { for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es) diff --git a/test/narray_test.rb b/test/narray_test.rb index 3a1e2a21..08065ea0 100644 --- a/test/narray_test.rb +++ b/test/narray_test.rb @@ -649,4 +649,10 @@ class NArrayTest < Test::Unit::TestCase assert_equal(Numo::DFloat[1, Float::NAN, 3].format_to_a, Numo::DFloat.cast(Numo::RObject[1, nil, 3]).format_to_a) end + + test "sort_index correctness" do + a = Numo::SFloat.new(10).rand_norm + idx = a.sort_index + assert { a[idx].to_a == a[idx].to_a.sort } + end end