Add wordPaddedDec4
This commit is contained in:
parent
1ccaa80ba8
commit
f5799e7270
4 changed files with 26 additions and 1 deletions
|
@ -1,5 +1,9 @@
|
||||||
# Revision history for small-bytearray-builder
|
# Revision history for small-bytearray-builder
|
||||||
|
|
||||||
|
## 0.3.4.0 -- 2020-??-??
|
||||||
|
|
||||||
|
* Add `wordPaddedDec4`.
|
||||||
|
|
||||||
## 0.3.3.0 -- 2020-02-10
|
## 0.3.3.0 -- 2020-02-10
|
||||||
|
|
||||||
* Add `word64PaddedLowerHex` and `word32PaddedLowerHex`
|
* Add `word64PaddedLowerHex` and `word32PaddedLowerHex`
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cabal-version: 2.2
|
cabal-version: 2.2
|
||||||
name: small-bytearray-builder
|
name: small-bytearray-builder
|
||||||
version: 0.3.3.0
|
version: 0.3.4.0
|
||||||
synopsis: Serialize to a small byte arrays
|
synopsis: Serialize to a small byte arrays
|
||||||
description:
|
description:
|
||||||
This is similar to the builder facilities provided by
|
This is similar to the builder facilities provided by
|
||||||
|
|
|
@ -61,6 +61,7 @@ module Data.ByteArray.Builder.Bounded
|
||||||
, char
|
, char
|
||||||
-- ** Native
|
-- ** Native
|
||||||
, wordPaddedDec2
|
, wordPaddedDec2
|
||||||
|
, wordPaddedDec4
|
||||||
, wordPaddedDec9
|
, wordPaddedDec9
|
||||||
-- ** Machine-Readable
|
-- ** Machine-Readable
|
||||||
-- *** One
|
-- *** One
|
||||||
|
@ -648,6 +649,22 @@ wordPaddedDec2 !w = Unsafe.construct $ \arr off -> do
|
||||||
writeByteArray arr (off + 1) (unsafeWordToWord8 (d2 + 48))
|
writeByteArray arr (off + 1) (unsafeWordToWord8 (d2 + 48))
|
||||||
pure (off + 2)
|
pure (off + 2)
|
||||||
|
|
||||||
|
-- | Encode a number less than 10000 as a decimal number, zero-padding it to
|
||||||
|
-- two digits. For example: 0 is encoded as @0000@, 5 is encoded as @0005@,
|
||||||
|
-- and 73 is encoded as @0073@.
|
||||||
|
--
|
||||||
|
-- Precondition: Argument must be less than 10000. Failure to satisfy this
|
||||||
|
-- precondition will not result in a segfault, but the resulting bytes are
|
||||||
|
-- undefined. The implemention uses a heuristic for division that is inaccurate
|
||||||
|
-- for large numbers.
|
||||||
|
wordPaddedDec4 :: Word -> Builder 4
|
||||||
|
wordPaddedDec4 !w = Unsafe.construct $ \arr off -> do
|
||||||
|
putRem10
|
||||||
|
(putRem10 $ putRem10 $ putRem10
|
||||||
|
(\_ _ _ -> pure ())
|
||||||
|
) arr (off + 3) w
|
||||||
|
pure (off + 4)
|
||||||
|
|
||||||
-- | Encode a number less than 1e9 as a decimal number, zero-padding it to
|
-- | Encode a number less than 1e9 as a decimal number, zero-padding it to
|
||||||
-- nine digits. For example: 0 is encoded as @000000000@ and 5 is encoded as
|
-- nine digits. For example: 0 is encoded as @000000000@ and 5 is encoded as
|
||||||
-- @000000005@.
|
-- @000000005@.
|
||||||
|
|
|
@ -77,6 +77,10 @@ tests = testGroup "Tests"
|
||||||
Bounded.run Nat.two (Bounded.wordPaddedDec2 w)
|
Bounded.run Nat.two (Bounded.wordPaddedDec2 w)
|
||||||
===
|
===
|
||||||
pack (zeroPadL 2 (show w))
|
pack (zeroPadL 2 (show w))
|
||||||
|
, TQC.testProperty "wordPaddedDec4" $ TQC.forAll (TQC.choose (0,9999)) $ \w ->
|
||||||
|
Bounded.run Nat.constant (Bounded.wordPaddedDec4 w)
|
||||||
|
===
|
||||||
|
pack (zeroPadL 4 (show w))
|
||||||
, TQC.testProperty "wordPaddedDec9" $ TQC.forAll (TQC.choose (0,999999999)) $ \w ->
|
, TQC.testProperty "wordPaddedDec9" $ TQC.forAll (TQC.choose (0,999999999)) $ \w ->
|
||||||
Bounded.run Nat.constant (Bounded.wordPaddedDec9 w)
|
Bounded.run Nat.constant (Bounded.wordPaddedDec9 w)
|
||||||
===
|
===
|
||||||
|
|
Loading…
Reference in a new issue