]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl/math: Add math.Rand template function
authorJoe Mooring <joe.mooring@veriphor.com>
Thu, 28 Dec 2023 22:25:29 +0000 (14:25 -0800)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 29 Dec 2023 18:37:27 +0000 (19:37 +0100)
Closes #11833

docs/content/en/functions/math/Rand.md [new file with mode: 0644]
docs/content/en/getting-started/glossary.md
tpl/math/init.go
tpl/math/math.go
tpl/tplimpl/template_funcs_test.go

diff --git a/docs/content/en/functions/math/Rand.md b/docs/content/en/functions/math/Rand.md
new file mode 100644 (file)
index 0000000..4cdf02f
--- /dev/null
@@ -0,0 +1,44 @@
+---
+title: math.Rand
+description: Returns a pseudo-random number in the half-open interval [0.0, 1.0).
+categories: []
+keywords: []
+action:
+  aliases: []
+  related: []
+  returnType: float64
+  signatures: [math.Rand]
+---
+
+The `math.Rand` function returns a pseudo-random number in the [half-open interval] [0.0, 1.0).
+
+```go-html-template
+{{ math.Rand }} → 0.6312770459590062
+```
+
+To generate a random integer in the [closed interval] [0, 5]:
+
+```go-html-template
+{{ math.Rand | mul 6 | math.Floor }}
+```
+
+To generate a random integer in the closed interval [1, 6]:
+
+```go-html-template
+{{ math.Rand | mul 6 | math.Ceil }}
+```
+
+To generate a random float, with one digit after the decimal point, in the closed interval [0, 4.9]:
+
+```go-html-template
+{{ div (math.Rand | mul 50 | math.Floor) 10 }}
+```
+
+To generate a random float, with one digit after the decimal point, in the closed interval [0.1, 5.0]:
+
+```go-html-template
+{{ div (math.Rand | mul 50 | math.Ceil) 10 }}
+```
+
+[closed interval]: /getting-started/glossary/#interval
+[half-open interval]: /getting-started/glossary/#interval
index edf64ab8946139f7b887718002421c34f7336fb7..dce3d1527962b1b01b67c63d422cfbcdf0f546da 100644 (file)
@@ -147,6 +147,16 @@ A numeric data type without a fractional component. For example, `42`.
 
 Software design and development efforts that enable [localization](#localization). See the [W3C definition](https://www.w3.org/International/questions/qa-i18n). Abbreviated i18n.
 
+###### interval
+
+An [interval](https://en.wikipedia.org/wiki/Interval_(mathematics)) is a range of numbers between two endpoints: closed, open, or half-open.
+
+- A _closed_ interval, denoted by brackets, includes its endpoints. For example, [0,&nbsp;1]&nbsp;is the interval where `0 <= x <= 1`.
+
+- An _open_ interval, denoted by parenthesis, excludes its endpoints. For example, (0,&nbsp;1)&nbsp;is the interval where `0 < x < 1`.
+
+- A _half-open_ interval includes only one of its endpoints. For example, (0,&nbsp;1]&nbsp;is the _left-open_ interval where `0 < x <= 1`, while [0,&nbsp;1)&nbsp;is the _right-open_ interval where `0 <= x < 1`.
+
 ###### kind
 
 See [page kind](#page-kind).
index 8596ff647051e18b039479677f61339d8a21c86b..fa136767176a6cd7b1cc5516e6ce843476948275 100644 (file)
@@ -115,6 +115,13 @@ func init() {
                        },
                )
 
+               ns.AddMethodMapping(ctx.Rand,
+                       nil,
+                       [][2]string{
+                               {"{{ math.Rand }}", "0.6312770459590062"},
+                       },
+               )
+
                ns.AddMethodMapping(ctx.Round,
                        nil,
                        [][2]string{
index a921bd7ada3a9b8c8b734e631f4932e7da3bb4a7..0f8db11e2a878ca98c3e0e0430d921f1018ac4c5 100644 (file)
@@ -18,6 +18,7 @@ import (
        "errors"
        "fmt"
        "math"
+       "math/rand"
        "reflect"
        "sync/atomic"
 
@@ -157,6 +158,11 @@ func (ns *Namespace) Pow(n1, n2 any) (float64, error) {
        return math.Pow(af, bf), nil
 }
 
+// Rand returns, as a float64, a pseudo-random number in the half-open interval [0.0,1.0).
+func (ns *Namespace) Rand() float64 {
+       return rand.Float64()
+}
+
 // Round returns the integer nearest to n, rounding half away from zero.
 func (ns *Namespace) Round(n any) (float64, error) {
        xf, err := cast.ToFloat64E(n)
index 9cc84934b9fed423d5fbe3a1cf1a127798fa215d..f1ab3d659593544a23c4652e521182939ce96ed6 100644 (file)
@@ -61,12 +61,10 @@ title: "**BatMan**"
                ns := nsf(d)
                for _, mm := range ns.MethodMappings {
                        for _, example := range mm.Examples {
-                               if strings.Contains(example[0], "errorf") {
-                                       // This will fail the build, so skip for now.
-                                       continue
-                               }
-                               if strings.Contains(example[0], "transform.XMLEscape") {
-                                       // This will fail the build, so skip for now.
+                               // These will fail the build, so skip.
+                               if strings.Contains(example[0], "errorf") ||
+                                       strings.Contains(example[0], "transform.XMLEscape") ||
+                                       strings.Contains(example[0], "math.Rand") {
                                        continue
                                }
                                templates = append(templates, example[0])