on master help sign in
Fix the definition of reverse

--HG-- extra : convert_revision : 5070f6826179df2c17fb097304307032b3f5dfd7

commit9bbfa0d8ac9000ad4f2ec46f3d00de60f8e05d1c authorBryan O'Sullivan <bos@serpentine.com> dateThu 12 Feb 2009, 07:35 (18 years ago) parent4fe79b5
2 files changed+15−6
Data/Text/Fusion.hs+14−5 tests/Properties.hs+1−1
Data/Text/Fusion.hs+14−5
@@ -385,11 +385,20 @@ reverse (Stream next s len) = Text (A.run (A.unsafeNew len >>= fill)) 0 len
385385 loop !s0 !i = case next s0 of
386386 Done -> return marr
387387 Skip s1 -> loop s1 i
388− Yield x s1 -> do
389− let i' = i - 1
390− x' = fromIntegral (ord x) :: Word16
391− A.unsafeWrite marr i' x'
392− loop s1 i'
388+ Yield x s1
389+ | n < 0x10000 -> do
390+ let i' = i - 1
391+ A.unsafeWrite marr i' (fromIntegral n)
392+ loop s1 i'
393+ | otherwise -> do
394+ let i' = i - 2
395+ A.unsafeWrite marr i' l
396+ A.unsafeWrite marr (i'+1) r
397+ loop s1 i'
398+ where n = ord x
399+ m = n - 0x10000
400+ l = fromIntegral $ (m `shiftR` 10) + 0xD800
401+ r = fromIntegral $ (m .&. 0x3FF) + 0xDC00
393402{-# INLINE [0] reverse #-}
394403
395404-- ----------------------------------------------------------------------------
tests/Properties.hs+1−1
@@ -191,7 +191,7 @@ tests = [
191191 ("prop_intercalate", mytest prop_intercalate),
192192 ("prop_intersperse", mytest prop_intersperse),
193193 ("prop_transpose", mytest prop_transpose),
194−--("prop_reverse", mytest prop_reverse),
194+ ("prop_reverse", mytest prop_reverse),
195195
196196 ("prop_foldl", mytest prop_foldl),
197197 ("prop_foldl'", mytest prop_foldl'),