@@ -27,6 +27,7 @@ import qualified Data.Scientific as S
2727import qualified Data.Set as Set
2828import qualified Data.Text as T
2929import qualified Data.Text.Encoding as T
30+ import Data.Time.Calendar (Day (.. ), showGregorian )
3031import qualified Data.UUID as UUID
3132import qualified Data.UUID.V1 as UUID1
3233import qualified Data.Vector as V
@@ -276,6 +277,16 @@ randomChar = charToString <$> State.state random
276277 charToString = String . T. pack . (: [] )
277278
278279
280+ -- | Generate a random date between (inclusive) 1858-11-17 and 2132-09-01
281+ --
282+ -- >>> exec "randomDate()"
283+ -- String "2063-01-23"
284+ randomDate :: (RandomGen g , MonadState g m ) => m Value
285+ randomDate = dayAsValue . ModifiedJulianDay <$> State. state (randomR (0 , 100000 ))
286+ where
287+ dayAsValue = String . T. pack . showGregorian
288+
289+
279290-- | Create a value getter for an expression
280291--
281292-- >>> exec "uuid4"
@@ -295,6 +306,7 @@ eval (FunctionCall "randomBool" []) = randomBool
295306eval (FunctionCall " randomChar" [] ) = randomChar
296307eval (FunctionCall " randomInt" [lower, upper]) = randomInt lower upper
297308eval (FunctionCall " randomDouble" [lower, upper]) = randomDouble lower upper
309+ eval (FunctionCall " randomDate" [] ) = randomDate
298310eval (FunctionCall " array" args) = Array . V. fromList <$> mapM eval args
299311eval (FunctionCall " oneOf" [arg]) = oneOfArray arg
300312eval (FunctionCall " oneOf" args) = oneOfArgs args
0 commit comments