on master help sign in
Fix the definition of reverse
9bbfa0dBryan O'Sullivan
Data/Text/Fusion.hs+14−5
@@ -385,11 +385,20 @@ reverse (Stream next s len) = Text (A.run (A.unsafeNew len >>= fill)) 0 len
385 loop !s0 !i = case next s0 of
385 loop !s0 !i = case next s0 of
386 Done -> return marr
386 Done -> return marr
387 Skip s1 -> loop s1 i
387 Skip s1 -> loop s1 i
388− Yield x s1 -> do
388+ Yield x s1
389+ | n < 0x10000 -> do
389− let i' = i - 1
390+ let i' = i - 1
390− x' = fromIntegral (ord x) :: Word16
391+ A.unsafeWrite marr i' (fromIntegral n)
391− A.unsafeWrite marr i' x'
392+ loop s1 i'
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
393{-# INLINE [0] reverse #-}
402{-# INLINE [0] reverse #-}
394
403
395-- ----------------------------------------------------------------------------
404-- ----------------------------------------------------------------------------
tests/Properties.hs+1−1
@@ -191,7 +191,7 @@ tests = [
191 ("prop_intercalate", mytest prop_intercalate),
191 ("prop_intercalate", mytest prop_intercalate),
192 ("prop_intersperse", mytest prop_intersperse),
192 ("prop_intersperse", mytest prop_intersperse),
193 ("prop_transpose", mytest prop_transpose),
193 ("prop_transpose", mytest prop_transpose),
194−--("prop_reverse", mytest prop_reverse),
194+ ("prop_reverse", mytest prop_reverse),
195
195
196 ("prop_foldl", mytest prop_foldl),
196 ("prop_foldl", mytest prop_foldl),
197 ("prop_foldl'", mytest prop_foldl'),
197 ("prop_foldl'", mytest prop_foldl'),