From 748cf7e81fa3c82018d28b46b47bd000329c7a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Fri, 31 Jul 2015 17:12:25 +0200 Subject: [PATCH] 2015-07-31 17:12 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/vm/asort.c ! fixed missing nStart checking during array items reordering * utils/hbtest/rt_array.prg * updated Harbour specific results - I thought that someone invested time to exactly replicate CA-Cl*pper ASort() sorting but in fact Harbour specific resutls where hardcoded inside HBTEST so previous code was not Cl*pper compatible in the same way as current one. --- ChangeLog.txt | 11 +++++++++++ src/vm/asort.c | 4 ++-- utils/hbtest/rt_array.prg | 28 ++++++++++++++-------------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 88443ec7c1..f203feb375 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,17 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2015-07-31 17:12 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * src/vm/asort.c + ! fixed missing nStart checking during array items reordering + + * utils/hbtest/rt_array.prg + * updated Harbour specific results - I thought that someone + invested time to exactly replicate CA-Cl*pper ASort() sorting + but in fact Harbour specific resutls where hardcoded inside + HBTEST so previous code was not Cl*pper compatible in the + same way as current one. + 2015-07-31 16:42 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/gtxwc/gtxwc.c * src/rtl/mlcfunc.c diff --git a/src/vm/asort.c b/src/vm/asort.c index f32c79f608..b6cc8e2f8e 100644 --- a/src/vm/asort.c +++ b/src/vm/asort.c @@ -309,9 +309,9 @@ static void hb_arraySortStart( PHB_BASEARRAY pBaseArray, PHB_ITEM pBlock, for( nPos = 0; nPos < nCount; ++nPos ) { - if( nPos != pDest[ nPos ] ) + if( nPos + nStart != pDest[ nPos ] ) { - hb_itemSwap( pBaseArray->pItems + nPos, + hb_itemSwap( pBaseArray->pItems + nPos + nStart, pBaseArray->pItems + pDest[ nPos ] ); pDest[ pPos[ nPos ] ] = pDest[ nPos ]; pPos[ pDest[ nPos ] - nStart ] = pPos[ nPos ]; diff --git a/utils/hbtest/rt_array.prg b/utils/hbtest/rt_array.prg index 286308fa19..9002401f80 100644 --- a/utils/hbtest/rt_array.prg +++ b/utils/hbtest/rt_array.prg @@ -296,20 +296,20 @@ PROCEDURE Main_ARRAY() sorting algorithms. Anyhow the results pattern should match. [vszakats] */ #ifdef __HARBOUR__ - HBTEST TAStr( ASort( TARRv(),,, {|| NIL } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| hb_SToD() } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "0" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "1" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "2" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "a" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "A" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| "z" } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| .T. } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| .F. } ) ) IS "FEIDGCHBJA" - HBTEST TAStr( ASort( TARRv(),,, {|| 2 } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| 1 } ) ) IS "DCBAEFIHGJ" - HBTEST TAStr( ASort( TARRv(),,, {|| 0 } ) ) IS "FEIDGCHBJA" + HBTEST TAStr( ASort( TARRv(),,, {|| NIL } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| hb_SToD() } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "0" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "1" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "2" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "a" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "A" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| "z" } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| .T. } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| .F. } ) ) IS "JIHGFEDCBA" + HBTEST TAStr( ASort( TARRv(),,, {|| 2 } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| 1 } ) ) IS "ABCDEFGHIJ" + HBTEST TAStr( ASort( TARRv(),,, {|| 0 } ) ) IS "JIHGFEDCBA" #else HBTEST TAStr( ASort( TARRv(),,, {|| NIL } ) ) IS "IHGFEDCBAJ" HBTEST TAStr( ASort( TARRv(),,, {|| hb_SToD() } ) ) IS "IHGFEDCBAJ"