Skip to main content

Selection functions

var

Commentary

added in 0.0.5

Look up a variable defined in the top-level vars or varsOnce sections, optionally drilling into its subvalue with path. Vars may refer to other variables.

If you make multiple references to the same var in a single generator, you are guaranteed to get the same value each time.

Values in varsOnce are only ever evaluated once, and then locked for the duration of the generator, as the name implies.

You can use vars to generate multiple values in one shot, then drill into them with the path function modifier. 1


Examples

Retrieve a variable

Use vars to generate a fresh value for each iteration. Use varsOnce to generate values only once and then lock them.

{
"topic": "sandbox",
"vars": {
"val1": {
"_gen": "uniformDistribution",
"bounds": [
1,
5
]
}
},
"varsOnce": {
"val2": {
"_gen": "uniformDistribution",
"bounds": [
1,
5
]
}
},
"value": {
"val1": {
"_gen": "var",
"var": "val1"
},
"val2": {
"_gen": "var",
"var": "val2"
}
}
}
[
{
"val1": 4.127360960423861,
"val2": 1.3605632368472693
},
{
"val1": 4.741355938018264,
"val2": 1.3605632368472693
},
{
"val1": 4.278325335915115,
"val2": 1.3605632368472693
},
{
"val1": 1.8165210029296404,
"val2": 1.3605632368472693
},
{
"val1": 4.157902233992219,
"val2": 1.3605632368472693
}
]

Drill into a map

Use a compound structure, like a map, to generate multiple values assigned to one var. This is especially useful for choices where two or more values relate to each other.

{
"topic": "sandbox",
"vars": {
"profile": {
"_gen": "oneOf",
"choices": [
{
"luckyNumber": {
"_gen": "uniformDistribution",
"bounds": [
1,
50
],
"decimals": 0
},
"active": false
},
{
"luckyNumber": {
"_gen": "uniformDistribution",
"bounds": [
50,
99
],
"decimals": 0
},
"active": true
}
]
}
},
"value": {
"userProfile": {
"theNumber": {
"_gen": "var",
"var": "profile",
"path": [
"luckyNumber"
]
},
"tags": {
"isActive": {
"_gen": "var",
"var": "profile",
"path": [
"active"
]
}
}
}
}
}
[
{
"userProfile": {
"theNumber": 75,
"tags": {
"isActive": true
}
}
},
{
"userProfile": {
"theNumber": 85,
"tags": {
"isActive": true
}
}
},
{
"userProfile": {
"theNumber": 49,
"tags": {
"isActive": false
}
}
},
{
"userProfile": {
"theNumber": 46,
"tags": {
"isActive": false
}
}
},
{
"userProfile": {
"theNumber": 34,
"tags": {
"isActive": false
}
}
}
]

Specification

JSON schema

{
"type": "object",
"properties": {
"var": {
"type": "string"
},
"path": {
"type": "array",
"items": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "string"
}
]
}
}
},
"required": [
"var"
]
}