yaml_gen now gens strings with user-specified alphabet, with Unicode support.
This commit is contained in:
parent
af4245811a
commit
760e39479e
|
@ -1,8 +1,8 @@
|
||||||
root-type: seq
|
root-type: map
|
||||||
documents: 2
|
documents: 2
|
||||||
complex-keys: false
|
complex-keys: false
|
||||||
collection-keys: false
|
collection-keys: false
|
||||||
min-nodes-per-document: 65536
|
min-nodes-per-document: 4096
|
||||||
encoding: utf-8
|
encoding: utf-8
|
||||||
indent: 4
|
indent: 4
|
||||||
text-width: 40
|
text-width: 40
|
||||||
|
@ -11,7 +11,8 @@ text-width: 40
|
||||||
#we end up with extremely deeply nested structures
|
#we end up with extremely deeply nested structures
|
||||||
|
|
||||||
string:
|
string:
|
||||||
probability: 10
|
probability: 20
|
||||||
|
alphabet: " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_0123456789ábćčďéěǵǧȟíǐǰḱǩĺľḿńňóǒôäṕŕřśšť"
|
||||||
range: {min: 1, max: 40, dist: cubic}
|
range: {min: 1, max: 40, dist: cubic}
|
||||||
int:
|
int:
|
||||||
probability: 10
|
probability: 10
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
///Random YAML generator. Used to generate benchmarking inputs.
|
///Random YAML generator. Used to generate benchmarking inputs.
|
||||||
|
|
||||||
|
import std.algorithm;
|
||||||
import std.conv;
|
import std.conv;
|
||||||
import std.datetime;
|
import std.datetime;
|
||||||
import std.math;
|
import std.math;
|
||||||
|
@ -10,9 +11,6 @@ import std.string;
|
||||||
import dyaml.all;
|
import dyaml.all;
|
||||||
|
|
||||||
|
|
||||||
immutable alphabet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
|
|
||||||
immutable digits = "0123456789";
|
|
||||||
|
|
||||||
Node config;
|
Node config;
|
||||||
Node function(bool)[string] generators;
|
Node function(bool)[string] generators;
|
||||||
auto typesScalar = ["string", "int", "float", "bool", "timestamp", "binary"];
|
auto typesScalar = ["string", "int", "float", "bool", "timestamp", "binary"];
|
||||||
|
@ -65,7 +63,7 @@ real randomReal(const real min, const real max, const string distribution = "lin
|
||||||
return min + (max - min) * randomNormalized(distribution);
|
return min + (max - min) * randomNormalized(distribution);
|
||||||
}
|
}
|
||||||
|
|
||||||
char randomChar(const string chars)
|
dchar randomChar(const dstring chars)
|
||||||
{
|
{
|
||||||
return chars[randomLong(0, chars.length - 1)];
|
return chars[randomLong(0, chars.length - 1)];
|
||||||
}
|
}
|
||||||
|
@ -84,17 +82,19 @@ Node genString(bool root = false)
|
||||||
{
|
{
|
||||||
auto range = config["string"]["range"];
|
auto range = config["string"]["range"];
|
||||||
|
|
||||||
|
auto alphabet = config["string"]["alphabet"].as!dstring;
|
||||||
|
|
||||||
const chars = randomLong(range["min"].as!uint, range["max"].as!uint,
|
const chars = randomLong(range["min"].as!uint, range["max"].as!uint,
|
||||||
range["dist"].as!string);
|
range["dist"].as!string);
|
||||||
|
|
||||||
char[] result = new char[chars];
|
dchar[] result = new dchar[chars];
|
||||||
result[0] = randomChar(alphabet);
|
result[0] = randomChar(alphabet);
|
||||||
foreach(i; 1 .. chars)
|
foreach(i; 1 .. chars)
|
||||||
{
|
{
|
||||||
result[i] = randomChar(alphabet ~ digits);
|
result[i] = randomChar(alphabet);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Node(cast(string)result);
|
return Node(result.to!string);
|
||||||
}
|
}
|
||||||
|
|
||||||
Node genInt(bool root = false)
|
Node genInt(bool root = false)
|
||||||
|
|
Loading…
Reference in a new issue