From e897eee6d6157314ef3396a4afca3c331eee9fe1 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Wed, 3 Mar 2021 10:51:41 -0500 Subject: make set_depends run dub describe, track json output - traded $PWD for project root as ./, i.e. from dub describe json - dub describe deletes parts of dependencies that are unreferenced by the project build; these are available elsewhere and there is little reason to keep them --- .../D-YAML/examples/constructor/dub.json | 10 - .../D-YAML/examples/constructor/input.yaml | 8 - src/ext_depends/D-YAML/examples/constructor/main.d | 91 ------ .../D-YAML/examples/getting_started/dub.json | 10 - .../D-YAML/examples/getting_started/input.yaml | 2 - .../D-YAML/examples/getting_started/main.d | 18 -- .../D-YAML/examples/representer/dub.json | 10 - src/ext_depends/D-YAML/examples/representer/main.d | 43 --- src/ext_depends/D-YAML/examples/resolver/dub.json | 10 - .../D-YAML/examples/resolver/input.yaml | 8 - src/ext_depends/D-YAML/examples/resolver/main.d | 36 --- src/ext_depends/D-YAML/examples/tojson/dub.json | 8 - .../D-YAML/examples/tojson/source/app.d | 54 ---- .../D-YAML/examples/yaml_bench/dub.json | 10 - .../D-YAML/examples/yaml_bench/yaml_bench.d | 179 ------------ .../D-YAML/examples/yaml_gen/config.yaml | 46 --- src/ext_depends/D-YAML/examples/yaml_gen/dub.json | 10 - .../D-YAML/examples/yaml_gen/yaml_gen.d | 316 -------------------- .../D-YAML/examples/yaml_stats/dub.json | 10 - .../D-YAML/examples/yaml_stats/small.yaml | 4 - .../D-YAML/examples/yaml_stats/yaml_stats.d | 106 ------- src/ext_depends/D-YAML/testsuite/dub.json | 8 - src/ext_depends/D-YAML/testsuite/source/app.d | 323 --------------------- 23 files changed, 1320 deletions(-) delete mode 100644 src/ext_depends/D-YAML/examples/constructor/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/constructor/input.yaml delete mode 100644 src/ext_depends/D-YAML/examples/constructor/main.d delete mode 100644 src/ext_depends/D-YAML/examples/getting_started/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/getting_started/input.yaml delete mode 100644 src/ext_depends/D-YAML/examples/getting_started/main.d delete mode 100644 src/ext_depends/D-YAML/examples/representer/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/representer/main.d delete mode 100644 src/ext_depends/D-YAML/examples/resolver/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/resolver/input.yaml delete mode 100644 src/ext_depends/D-YAML/examples/resolver/main.d delete mode 100644 src/ext_depends/D-YAML/examples/tojson/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/tojson/source/app.d delete mode 100644 src/ext_depends/D-YAML/examples/yaml_bench/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/yaml_bench/yaml_bench.d delete mode 100644 src/ext_depends/D-YAML/examples/yaml_gen/config.yaml delete mode 100644 src/ext_depends/D-YAML/examples/yaml_gen/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/yaml_gen/yaml_gen.d delete mode 100644 src/ext_depends/D-YAML/examples/yaml_stats/dub.json delete mode 100644 src/ext_depends/D-YAML/examples/yaml_stats/small.yaml delete mode 100644 src/ext_depends/D-YAML/examples/yaml_stats/yaml_stats.d delete mode 100644 src/ext_depends/D-YAML/testsuite/dub.json delete mode 100644 src/ext_depends/D-YAML/testsuite/source/app.d (limited to 'src/ext_depends/D-YAML') diff --git a/src/ext_depends/D-YAML/examples/constructor/dub.json b/src/ext_depends/D-YAML/examples/constructor/dub.json deleted file mode 100644 index 1aca4ee..0000000 --- a/src/ext_depends/D-YAML/examples/constructor/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "constructor", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "*"} - } -} diff --git a/src/ext_depends/D-YAML/examples/constructor/input.yaml b/src/ext_depends/D-YAML/examples/constructor/input.yaml deleted file mode 100644 index 8d56926..0000000 --- a/src/ext_depends/D-YAML/examples/constructor/input.yaml +++ /dev/null @@ -1,8 +0,0 @@ -scalar-red: !color FF0000 -scalar-orange: !color FFFF00 -mapping-red: !color-mapping {r: 255, g: 0, b: 0} -mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 diff --git a/src/ext_depends/D-YAML/examples/constructor/main.d b/src/ext_depends/D-YAML/examples/constructor/main.d deleted file mode 100644 index 50826f1..0000000 --- a/src/ext_depends/D-YAML/examples/constructor/main.d +++ /dev/null @@ -1,91 +0,0 @@ -import std.stdio; -import std.string; -import dyaml; - -struct Color -{ - ubyte red; - ubyte green; - ubyte blue; - - this(ubyte r, ubyte g, ubyte b) @safe - { - red = r; - green = g; - blue = b; - } - - this(const Node node, string tag) @safe - { - if (tag == "!color-mapping") - { - //Will throw if a value is missing, is not an integer, or is out of range. - red = node["r"].as!ubyte; - green = node["g"].as!ubyte; - blue = node["b"].as!ubyte; - } - else - { - string value = node.as!string; - - if(value.length != 6) - { - throw new Exception("Invalid color: " ~ value); - } - //We don't need to check for uppercase chars this way. - value = value.toLower(); - - //Get value of a hex digit. - uint hex(char c) - { - import std.ascii; - if(!std.ascii.isHexDigit(c)) - { - throw new Exception("Invalid color: " ~ value); - } - - if(std.ascii.isDigit(c)) - { - return c - '0'; - } - return c - 'a' + 10; - } - - red = cast(ubyte)(16 * hex(value[0]) + hex(value[1])); - green = cast(ubyte)(16 * hex(value[2]) + hex(value[3])); - blue = cast(ubyte)(16 * hex(value[4]) + hex(value[5])); - } - } -} - -void main(string[] args) -{ - auto red = Color(255, 0, 0); - auto orange = Color(255, 255, 0); - - string path = "input.yaml"; - if (args.length > 1) - { - path = args[1]; - } - - try - { - auto root = Loader.fromFile(path).load(); - - if(root["scalar-red"].as!Color == red && - root["mapping-red"].as!Color == red && - root["scalar-orange"].as!Color == orange && - root["mapping-orange"].as!Color == orange) - { - writeln("SUCCESS"); - return; - } - } - catch(YAMLException e) - { - writeln(e.msg); - } - - writeln("FAILURE"); -} diff --git a/src/ext_depends/D-YAML/examples/getting_started/dub.json b/src/ext_depends/D-YAML/examples/getting_started/dub.json deleted file mode 100644 index 844c006..0000000 --- a/src/ext_depends/D-YAML/examples/getting_started/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "getting-started", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/getting_started/input.yaml b/src/ext_depends/D-YAML/examples/getting_started/input.yaml deleted file mode 100644 index 8b093ae..0000000 --- a/src/ext_depends/D-YAML/examples/getting_started/input.yaml +++ /dev/null @@ -1,2 +0,0 @@ -Hello World : [Hello, World] -Answer : 42 diff --git a/src/ext_depends/D-YAML/examples/getting_started/main.d b/src/ext_depends/D-YAML/examples/getting_started/main.d deleted file mode 100644 index 2cc242c..0000000 --- a/src/ext_depends/D-YAML/examples/getting_started/main.d +++ /dev/null @@ -1,18 +0,0 @@ -import std.stdio; -import dyaml; - -void main() -{ - //Read the input. - Node root = Loader.fromFile("input.yaml").load(); - - //Display the data read. - foreach(string word; root["Hello World"]) - { - writeln(word); - } - writeln("The answer is ", root["Answer"].as!int); - - //Dump the loaded document to output.yaml. - dumper().dump(File("output.yaml", "w").lockingTextWriter, root); -} diff --git a/src/ext_depends/D-YAML/examples/representer/dub.json b/src/ext_depends/D-YAML/examples/representer/dub.json deleted file mode 100644 index c46c42f..0000000 --- a/src/ext_depends/D-YAML/examples/representer/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "representer", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/representer/main.d b/src/ext_depends/D-YAML/examples/representer/main.d deleted file mode 100644 index 18ec4c5..0000000 --- a/src/ext_depends/D-YAML/examples/representer/main.d +++ /dev/null @@ -1,43 +0,0 @@ -import std.stdio; -import dyaml; - -struct Color -{ - ubyte red; - ubyte green; - ubyte blue; - - Node opCast(T: Node)() const - { - static immutable hex = "0123456789ABCDEF"; - - //Using the color format from the Constructor example. - string scalar; - foreach(channel; [red, green, blue]) - { - scalar ~= hex[channel / 16]; - scalar ~= hex[channel % 16]; - } - - //Representing as a scalar, with custom tag to specify this data type. - return Node(scalar, "!color"); - } -} - -void main() -{ - try - { - auto dumper = dumper(); - - auto document = Node([Color(255, 0, 0), - Color(0, 255, 0), - Color(0, 0, 255)]); - - dumper.dump(File("output.yaml", "w").lockingTextWriter, document); - } - catch(YAMLException e) - { - writeln(e.msg); - } -} diff --git a/src/ext_depends/D-YAML/examples/resolver/dub.json b/src/ext_depends/D-YAML/examples/resolver/dub.json deleted file mode 100644 index 30b55d8..0000000 --- a/src/ext_depends/D-YAML/examples/resolver/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "resolver", - "targetType": "executable", - "sourceFiles": ["main.d"], - "mainSourceFile": "main.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/resolver/input.yaml b/src/ext_depends/D-YAML/examples/resolver/input.yaml deleted file mode 100644 index 99b9a5a..0000000 --- a/src/ext_depends/D-YAML/examples/resolver/input.yaml +++ /dev/null @@ -1,8 +0,0 @@ -scalar-red: FF0000 -scalar-orange: FFFF00 -mapping-red: !color-mapping {r: 255, g: 0, b: 0} -mapping-orange: - !color-mapping - r: 255 - g: 255 - b: 0 diff --git a/src/ext_depends/D-YAML/examples/resolver/main.d b/src/ext_depends/D-YAML/examples/resolver/main.d deleted file mode 100644 index f3c08a1..0000000 --- a/src/ext_depends/D-YAML/examples/resolver/main.d +++ /dev/null @@ -1,36 +0,0 @@ -import std.regex; -import std.stdio; -import dyaml; - -int main(string[] args) -{ - string path = "input.yaml"; - if (args.length > 1) - { - path = args[1]; - } - - try - { - - auto loader = Loader.fromFile("input.yaml"); - loader.resolver.addImplicitResolver("!color", regex("[0-9a-fA-F]{6}"), - "0123456789abcdefABCDEF"); - - auto root = loader.load(); - - if(root["scalar-red"].tag == "!color" && - root["scalar-orange"].tag == "!color") - { - writeln("SUCCESS"); - return 0; - } - } - catch(YAMLException e) - { - writeln(e.msg); - } - - writeln("FAILURE"); - return 1; -} diff --git a/src/ext_depends/D-YAML/examples/tojson/dub.json b/src/ext_depends/D-YAML/examples/tojson/dub.json deleted file mode 100644 index ba014b8..0000000 --- a/src/ext_depends/D-YAML/examples/tojson/dub.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "tojson", - "targetType": "executable", - "dependencies": - { - "dyaml": "*" - } -} diff --git a/src/ext_depends/D-YAML/examples/tojson/source/app.d b/src/ext_depends/D-YAML/examples/tojson/source/app.d deleted file mode 100644 index 654274f..0000000 --- a/src/ext_depends/D-YAML/examples/tojson/source/app.d +++ /dev/null @@ -1,54 +0,0 @@ -module dyaml.tojson; -import std.datetime; -import std.json; -import std.stdio; -import dyaml; - -void main() -{ - auto doc = Loader.fromFile(stdin).load(); - auto json = doc.toJSON; - writeln(json.toPrettyString); -} - -JSONValue toJSON(Node node) -{ - JSONValue output; - final switch (node.type) - { - case NodeType.sequence: - output = JSONValue(string[].init); - foreach (Node seqNode; node) - { - output.array ~= seqNode.toJSON(); - } - break; - case NodeType.mapping: - output = JSONValue(string[string].init); - foreach (Node keyNode, Node valueNode; node) - { - output[keyNode.as!string] = valueNode.toJSON(); - } - break; - case NodeType.string: - output = node.as!string; - break; - case NodeType.integer: - output = node.as!long; - break; - case NodeType.decimal: - output = node.as!real; - break; - case NodeType.boolean: - output = node.as!bool; - break; - case NodeType.timestamp: - output = node.as!SysTime.toISOExtString(); - break; - case NodeType.merge: - case NodeType.null_: - case NodeType.binary: - case NodeType.invalid: - } - return output; -} diff --git a/src/ext_depends/D-YAML/examples/yaml_bench/dub.json b/src/ext_depends/D-YAML/examples/yaml_bench/dub.json deleted file mode 100644 index b4e778f..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_bench/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "benchmark", - "targetType": "executable", - "sourceFiles": ["yaml_bench.d"], - "mainSourceFile": "yaml_bench.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/yaml_bench/yaml_bench.d b/src/ext_depends/D-YAML/examples/yaml_bench/yaml_bench.d deleted file mode 100644 index bb8446e..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_bench/yaml_bench.d +++ /dev/null @@ -1,179 +0,0 @@ - -module dyaml.yaml_bench; -//Benchmark that loads, and optionally extracts data from and/or emits a YAML file. - -import std.algorithm; -import std.conv; -import std.datetime.systime; -import std.datetime.stopwatch; -import std.file; -import std.getopt; -import std.range; -import std.stdio; -import std.string; -import dyaml; - -///Get data out of every node. -void extract(ref Node document) @safe -{ - void crawl(ref Node root) @safe - { - final switch (root.nodeID) - { - case NodeID.scalar: - switch(root.tag) - { - case "tag:yaml.org,2002:null": auto value = root.as!YAMLNull; break; - case "tag:yaml.org,2002:bool": auto value = root.as!bool; break; - case "tag:yaml.org,2002:int": auto value = root.as!long; break; - case "tag:yaml.org,2002:float": auto value = root.as!real; break; - case "tag:yaml.org,2002:binary": auto value = root.as!(ubyte[]); break; - case "tag:yaml.org,2002:timestamp": auto value = root.as!SysTime; break; - case "tag:yaml.org,2002:str": auto value = root.as!string; break; - default: writeln("Unrecognozed tag: ", root.tag); - } - break; - case NodeID.sequence: - foreach(ref Node node; root) - { - crawl(node); - } - break; - case NodeID.mapping: - foreach(ref Node key, ref Node value; root) - { - crawl(key); - crawl(value); - } - break; - case NodeID.invalid: - assert(0); - } - } - - crawl(document); -} - -void main(string[] args) //@safe -{ - import std.array : array; - bool get = false; - bool dump = false; - bool reload = false; - bool quiet = false; - bool verbose = false; - bool scanOnly = false; - uint runs = 1; - - auto help = getopt( - args, - "get|g", "Extract data from the file (using Node.as()).", &get, - "dump|d", "Dump the loaded data (to YAML_FILE.dump).", &dump, - "runs|r", "Repeat parsing the file NUM times.", &runs, - "reload", "Reload the file from the diskl on every repeat By default,"~ - " the file is loaded to memory once and repeatedly parsed from memory.", &reload, - "quiet|q", "Don't print anything.", &quiet, - "verbose|v", "Print even more.", &verbose, - "scan-only|s", "Do not execute the entire parsing process, only scanning. Overrides '--dump'", &scanOnly - ); - - if (help.helpWanted || (args.length < 2)) - { - defaultGetoptPrinter( - "D:YAML benchmark\n"~ - "Copyright (C) 2011-2018 Ferdinand Majerech, Cameron \"Herringway\" Ross\n"~ - "Usage: yaml_bench [OPTION ...] [YAML_FILE]\n\n"~ - "Loads and optionally extracts data and/or dumps a YAML file.\n", - help.options - ); - return; - } - - string file = args[1]; - - auto stopWatch = StopWatch(AutoStart.yes); - void[] fileInMemory; - if(!reload) { fileInMemory = std.file.read(file); } - void[] fileWorkingCopy = fileInMemory.dup; - auto loadTime = stopWatch.peek(); - stopWatch.reset(); - try - { - // Instead of constructing a resolver/constructor with each Loader, - // construct them once to remove noise when profiling. - auto resolver = Resolver.withDefaultResolvers; - - auto constructTime = stopWatch.peek(); - - Node[] nodes; - - void runLoaderBenchmark() //@safe - { - // Loading the file rewrites the loaded buffer, so if we don't reload from - // disk, we need to use a copy of the originally loaded file. - if(reload) { fileInMemory = std.file.read(file); } - else { fileWorkingCopy[] = fileInMemory[]; } - void[] fileToLoad = reload ? fileInMemory : fileWorkingCopy; - - auto loader = Loader.fromBuffer(fileToLoad); - if(scanOnly) - { - loader.scanBench(); - return; - } - - loader.resolver = resolver; - nodes = loader.array; - } - void runDumpBenchmark() @safe - { - if(dump) - { - dumper().dump(File(file ~ ".dump", "w").lockingTextWriter, nodes); - } - } - void runGetBenchmark() @safe - { - if(get) foreach(ref node; nodes) - { - extract(node); - } - } - auto totalTime = benchmark!(runLoaderBenchmark, runDumpBenchmark, runGetBenchmark)(runs); - if (!quiet) - { - auto enabledOptions = - only( - get ? "Get" : "", - dump ? "Dump" : "", - reload ? "Reload" : "", - scanOnly ? "Scan Only": "" - ).filter!(x => x != ""); - if (!enabledOptions.empty) - { - writefln!"Options enabled: %-(%s, %)"(enabledOptions); - } - if (verbose) - { - if (!reload) - { - writeln("Time to load file: ", loadTime); - } - writeln("Time to set up resolver: ", constructTime); - } - writeln("Runs: ", runs); - foreach(time, func, enabled; lockstep(totalTime[], only("Loader", "Dumper", "Get"), only(true, dump, get))) - { - if (enabled) - { - writeln("Average time spent on ", func, ": ", time / runs); - writeln("Total time spent on ", func, ": ", time); - } - } - } - } - catch(YAMLException e) - { - writeln("ERROR: ", e.msg); - } -} diff --git a/src/ext_depends/D-YAML/examples/yaml_gen/config.yaml b/src/ext_depends/D-YAML/examples/yaml_gen/config.yaml deleted file mode 100644 index 5484686..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_gen/config.yaml +++ /dev/null @@ -1,46 +0,0 @@ -root-type: map -documents: 2 -complex-keys: false -collection-keys: false -min-nodes-per-document: 4096 -encoding: utf-8 -indent: 4 -text-width: 40 - -#Note: setting collection probabilities too high can lead to stack overflow as -#we end up with extremely deeply nested structures - -string: - probability: 20 - alphabet: " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_0123456789ábćčďéěǵǧȟíǐǰḱǩĺľḿńňóǒôäṕŕřśšť" - range: {min: 1, max: 40, dist: cubic} -int: - probability: 10 - range: {min: -10000000, max: 10000000, dist: linear} -float: - probability: 10 - range: {min: -10000000.0, max: 10000000.0, dist: linear} -bool: - probability: 10 -timestamp: - probability: 10 - round-chance: 0.9 - range: {min: 0, max: 1231200000000000000, dist: linear} -binary: - probability: 4 - range: {min: 1, max: 400, dist: quadratic} -map: - probability: 2 - range: {min: 1, max: 20, dist: cubic} -omap: - probability: 1 - range: {min: 1, max: 20, dist: cubic} -pairs: - probability: 1 - range: {min: 1, max: 20, dist: cubic} -seq: - probability: 2 - range: {min: 1, max: 20, dist: cubic} -set: - probability: 1 - range: {min: 1, max: 20, dist: cubic} diff --git a/src/ext_depends/D-YAML/examples/yaml_gen/dub.json b/src/ext_depends/D-YAML/examples/yaml_gen/dub.json deleted file mode 100644 index 1f5a2d1..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_gen/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "yaml_gen", - "targetType": "executable", - "sourceFiles": ["yaml_gen.d"], - "mainSourceFile": "yaml_gen.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/yaml_gen/yaml_gen.d b/src/ext_depends/D-YAML/examples/yaml_gen/yaml_gen.d deleted file mode 100644 index b970c31..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_gen/yaml_gen.d +++ /dev/null @@ -1,316 +0,0 @@ - -///Random YAML generator. Used to generate benchmarking inputs. - -import std.algorithm; -import std.conv; -import std.datetime; -import std.math; -import std.random; -import std.stdio; -import std.string; -import dyaml; - - -Node config; -Node function(bool)[string] generators; -auto typesScalar = ["string", "int", "float", "bool", "timestamp", "binary"]; -auto typesScalarKey = ["string", "int", "float", "timestamp"]; -auto typesCollection = ["map","omap", "pairs", "seq", "set"]; -ulong minNodesDocument; -ulong totalNodes; - -static this() -{ - generators["string"] = &genString; - generators["int"] = &genInt; - generators["float"] = &genFloat; - generators["bool"] = &genBool; - generators["timestamp"] = &genTimestamp; - generators["binary"] = &genBinary; - generators["map"] = &genMap; - generators["omap"] = &genOmap; - generators["pairs"] = &genPairs; - generators["seq"] = &genSeq; - generators["set"] = &genSet; -} - -real randomNormalized(const string distribution = "linear") -{ - auto generator = Random(unpredictableSeed()); - const r = uniform!"[]"(0.0L, 1.0L, generator); - switch(distribution) - { - case "linear": - return r; - case "quadratic": - return r * r; - case "cubic": - return r * r * r; - default: - writeln("Unknown random distribution: ", distribution, - ", falling back to linear"); - return randomNormalized("linear"); - } -} - -long randomLong(const long min, const long max, const string distribution = "linear") -{ - return min + cast(long)round((max - min) * randomNormalized(distribution)); -} - -real randomReal(const real min, const real max, const string distribution = "linear") -{ - return min + (max - min) * randomNormalized(distribution); -} - -dchar randomChar(const dstring chars) -{ - return chars[randomLong(0, chars.length - 1)]; -} - -string randomType(string[] types) -{ - auto probabilities = new uint[types.length]; - foreach(index, type; types) - { - probabilities[index] = config[type]["probability"].as!uint; - } - return types[dice(probabilities)]; -} - -Node genString(bool root = false) -{ - auto range = config["string"]["range"]; - - auto alphabet = config["string"]["alphabet"].as!dstring; - - const chars = randomLong(range["min"].as!uint, range["max"].as!uint, - range["dist"].as!string); - - dchar[] result = new dchar[chars]; - result[0] = randomChar(alphabet); - foreach(i; 1 .. chars) - { - result[i] = randomChar(alphabet); - } - - return Node(result.to!string); -} - -Node genInt(bool root = false) -{ - auto range = config["int"]["range"]; - - const result = randomLong(range["min"].as!int, range["max"].as!int, - range["dist"].as!string); - - return Node(result); -} - -Node genFloat(bool root = false) -{ - auto range = config["float"]["range"]; - - const result = randomReal(range["min"].as!real, range["max"].as!real, - range["dist"].as!string); - - return Node(result); -} - -Node genBool(bool root = false) -{ - return Node([true, false][randomLong(0, 1)]); -} - -Node genTimestamp(bool root = false) -{ - auto range = config["timestamp"]["range"]; - - auto hnsecs = randomLong(range["min"].as!ulong, range["max"].as!ulong, - range["dist"].as!string); - - if(randomNormalized() <= config["timestamp"]["round-chance"].as!real) - { - hnsecs -= hnsecs % 10000000; - } - - return Node(SysTime(hnsecs)); -} - -Node genBinary(bool root = false) -{ - auto range = config["binary"]["range"]; - - const bytes = randomLong(range["min"].as!uint, range["max"].as!uint, - range["dist"].as!string); - - ubyte[] result = new ubyte[bytes]; - foreach(i; 0 .. bytes) - { - result[i] = cast(ubyte)randomLong(0, 255); - } - - return Node(result); -} - -Node nodes(const bool root, Node range, const string tag, const bool set = false) -{ - auto types = config["collection-keys"].as!bool ? typesCollection : []; - types ~= (set ? typesScalarKey : typesScalar); - - Node[] nodes; - if(root) - { - while(!(totalNodes >= minNodesDocument)) - { - nodes.assumeSafeAppend; - nodes ~= generateNode(randomType(types)); - } - } - else - { - const elems = randomLong(range["min"].as!uint, range["max"].as!uint, - range["dist"].as!string); - - nodes = new Node[elems]; - foreach(i; 0 .. elems) - { - nodes[i] = generateNode(randomType(types)); - } - } - - return Node(nodes, tag); -} - -Node genSeq(bool root = false) -{ - return nodes(root, config["seq"]["range"], "tag:yaml.org,2002:seq"); -} - -Node genSet(bool root = false) -{ - return nodes(root, config["seq"]["range"], "tag:yaml.org,2002:set", true); -} - -Node pairs(bool root, bool complex, Node range, string tag) -{ - Node[] keys, values; - - if(root) - { - while(!(totalNodes >= minNodesDocument)) - { - const key = generateNode(randomType(typesScalarKey ~ (complex ? typesCollection : []))); - // Maps can't contain duplicate keys - if(tag.endsWith("map") && keys.canFind(key)) { continue; } - keys.assumeSafeAppend; - values.assumeSafeAppend; - keys ~= key; - values ~= generateNode(randomType(typesScalar ~ typesCollection)); - } - } - else - { - const pairs = randomLong(range["min"].as!uint, range["max"].as!uint, - range["dist"].as!string); - - keys = new Node[pairs]; - values = new Node[pairs]; - outer: foreach(i; 0 .. pairs) - { - auto key = generateNode(randomType(typesScalarKey ~ (complex ? typesCollection : []))); - // Maps can't contain duplicate keys - while(tag.endsWith("map") && keys[0 .. i].canFind(key)) - { - key = generateNode(randomType(typesScalarKey ~ (complex ? typesCollection : []))); - } - keys[i] = key; - values[i] = generateNode(randomType(typesScalar ~ typesCollection)); - } - } - - return Node(keys, values, tag); -} - -Node genMap(bool root = false) -{ - Node range = config["map"]["range"]; - const complex = config["complex-keys"].as!bool; - - return pairs(root, complex, range, "tag:yaml.org,2002:map"); -} - -Node genOmap(bool root = false) -{ - Node range = config["omap"]["range"]; - const complex = config["complex-keys"].as!bool; - - return pairs(root, complex, range, "tag:yaml.org,2002:omap"); -} - -Node genPairs(bool root = false) -{ - Node range = config["pairs"]["range"]; - const complex = config["complex-keys"].as!bool; - - return pairs(root, complex, range, "tag:yaml.org,2002:pairs"); -} - -Node generateNode(const string type, bool root = false) -{ - ++totalNodes; - return generators[type](root); -} - -Node[] generate(const string configFileName) -{ - config = Loader.fromFile(configFileName).load(); - - minNodesDocument = config["min-nodes-per-document"].as!long; - - Node[] result; - foreach(i; 0 .. config["documents"].as!uint) - { - result ~= generateNode(config["root-type"].as!string, true); - totalNodes = 0; - } - - return result; -} - - -void main(string[] args) -{ - //Help message. - if(args.length == 1) - { - writeln("Usage: yaml_gen FILE [CONFIG_FILE]\n"); - writeln("Generates a random YAML file and writes it to FILE."); - writeln("If provided, CONFIG_FILE overrides the default config file."); - return; - } - - string configFile = args.length >= 3 ? args[2] : "config.yaml"; - - try - { - //Generate and dump the nodes. - Node[] generated = generate(configFile); - - auto dumper = dumper(); - auto encoding = config["encoding"]; - - dumper.indent = config["indent"].as!uint; - dumper.textWidth = config["text-width"].as!uint; - switch(encoding.as!string) - { - case "utf-16": dumper.dump!wchar(File(args[1], "w").lockingTextWriter, generated); break; - case "utf-32": dumper.dump!dchar(File(args[1], "w").lockingTextWriter, generated); break; - default: dumper.dump!char(File(args[1], "w").lockingTextWriter, generated); break; - } - } - catch(YAMLException e) - { - writeln("ERROR: ", e.msg); - } -} diff --git a/src/ext_depends/D-YAML/examples/yaml_stats/dub.json b/src/ext_depends/D-YAML/examples/yaml_stats/dub.json deleted file mode 100644 index c86f091..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_stats/dub.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "yaml_stats", - "targetType": "executable", - "sourceFiles": ["yaml_stats.d"], - "mainSourceFile": "yaml_stats.d", - "dependencies": - { - "dyaml": { "version" : "*" } - } -} diff --git a/src/ext_depends/D-YAML/examples/yaml_stats/small.yaml b/src/ext_depends/D-YAML/examples/yaml_stats/small.yaml deleted file mode 100644 index 4f5c0ea..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_stats/small.yaml +++ /dev/null @@ -1,4 +0,0 @@ -- 1 -- 2 : 'a' - 3 : 'b' -- 4 : [1.0, 2.1, 3.2] diff --git a/src/ext_depends/D-YAML/examples/yaml_stats/yaml_stats.d b/src/ext_depends/D-YAML/examples/yaml_stats/yaml_stats.d deleted file mode 100644 index b3f6c17..0000000 --- a/src/ext_depends/D-YAML/examples/yaml_stats/yaml_stats.d +++ /dev/null @@ -1,106 +0,0 @@ - -///Example D:YAML application that displays statistics about YAML documents. - -import std.stdio; -import std.string; -import dyaml; - - -///Collects statistics about a YAML document and returns them as string. -string statistics(ref Node document) -{ - size_t nodes; - size_t scalars, sequences, mappings; - size_t seqItems, mapPairs; - - size_t[string] tags; - - void crawl(ref Node root) - { - ++nodes; - if((root.tag in tags) is null) - { - tags[root.tag] = 0; - } - ++tags[root.tag]; - final switch (root.nodeID) - { - case NodeID.scalar: - ++scalars; - return; - case NodeID.sequence: - ++sequences; - seqItems += root.length; - foreach(ref Node node; root) - { - crawl(node); - } - return; - case NodeID.mapping: - ++mappings; - mapPairs += root.length; - foreach(ref Node key, ref Node value; root) - { - crawl(key); - crawl(value); - } - return; - case NodeID.invalid: - assert(0); - } - } - - crawl(document); - - string tagStats = "\nTag statistics:\n"; - foreach(tag, count; tags) - { - tagStats ~= format("\n%s : %s", tag, count); - } - - return format( "\nNodes: %s" ~ - "\n\nScalars: %s" ~ - "\nSequences: %s" ~ - "\nMappings: %s" ~ - "\n\nAverage sequence length: %s" ~ - "\nAverage mapping length: %s" ~ - "\n\n%s", - nodes, scalars, sequences, mappings, - sequences == 0.0 ? 0.0 : cast(real)seqItems / sequences, - mappings == 0.0 ? 0.0 : cast(real)mapPairs / mappings, - tagStats); -} - -void main(string[] args) -{ - //Help message - if(args.length == 1) - { - writeln("Usage: yaml_stats [YAML_FILE ...]\n"); - writeln("Analyzes YAML files with provided filenames and displays statistics."); - return; - } - - //Print stats about every document in every file. - foreach(file; args[1 .. $]) - { - writeln("\nFile ", file); - writeln("------------------------------------------------------------"); - try - { - auto loader = Loader.fromFile(file); - - size_t idx = 0; - foreach(ref document; loader) - { - writeln("\nDocument ", idx++); - writeln("----------------------------------------"); - writeln(statistics(document)); - } - } - catch(YAMLException e) - { - writeln("ERROR: ", e.msg); - } - } -} diff --git a/src/ext_depends/D-YAML/testsuite/dub.json b/src/ext_depends/D-YAML/testsuite/dub.json deleted file mode 100644 index fece639..0000000 --- a/src/ext_depends/D-YAML/testsuite/dub.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "testsuite", - "targetType": "executable", - "dependencies": - { - "dyaml": "*" - } -} diff --git a/src/ext_depends/D-YAML/testsuite/source/app.d b/src/ext_depends/D-YAML/testsuite/source/app.d deleted file mode 100644 index 6c26b32..0000000 --- a/src/ext_depends/D-YAML/testsuite/source/app.d +++ /dev/null @@ -1,323 +0,0 @@ -module dyaml.testsuite; - -import dyaml; -import dyaml.event; - -import std.algorithm; -import std.conv; -import std.file; -import std.format; -import std.json; -import std.path; -import std.range; -import std.stdio; -import std.string; -import std.typecons; -import std.utf; - -auto dumpEventString(string str) @safe -{ - string[] output; - try - { - auto events = Loader.fromString(str).parse(); - foreach (event; events) - { - string line; - final switch (event.id) - { - case EventID.scalar: - line = "=VAL "; - if (event.anchor != "") - { - line ~= text("&", event.anchor, " "); - } - if (event.tag != "") - { - line ~= text("<", event.tag, "> "); - } - switch(event.scalarStyle) - { - case ScalarStyle.singleQuoted: - line ~= "'"; - break; - case ScalarStyle.doubleQuoted: - line ~= '"'; - break; - case ScalarStyle.literal: - line ~= "|"; - break; - case ScalarStyle.folded: - line ~= ">"; - break; - default: - line ~= ":"; - break; - } - if (event.value != "") - { - line ~= text(event.value.substitute("\n", "\\n", `\`, `\\`, "\r", "\\r", "\t", "\\t", "\b", "\\b")); - } - break; - case EventID.streamStart: - line = "+STR"; - break; - case EventID.documentStart: - line = "+DOC"; - if (event.explicitDocument) - { - line ~= text(" ---"); - } - break; - case EventID.mappingStart: - line = "+MAP"; - if (event.anchor != "") - { - line ~= text(" &", event.anchor); - } - if (event.tag != "") - { - line ~= text(" <", event.tag, ">"); - } - break; - case EventID.sequenceStart: - line = "+SEQ"; - if (event.anchor != "") - { - line ~= text(" &", event.anchor); - } - if (event.tag != "") - { - line ~= text(" <", event.tag, ">"); - } - break; - case EventID.streamEnd: - line = "-STR"; - break; - case EventID.documentEnd: - line = "-DOC"; - if (event.explicitDocument) - { - line ~= " ..."; - } - break; - case EventID.mappingEnd: - line = "-MAP"; - break; - case EventID.sequenceEnd: - line = "-SEQ"; - break; - case EventID.alias_: - line = text("=ALI *", event.anchor); - break; - case EventID.invalid: - assert(0, "Invalid EventID produced"); - } - output ~= line; - } - } - catch (Exception) {} //Exceptions should just stop adding output - return output.join("\n"); -} - -enum TestState -{ - success, - skipped, - failure -} - -struct TestResult -{ - string name; - TestState state; - string failMsg; - - const void toString(OutputRange)(ref OutputRange writer) - if (isOutputRange!(OutputRange, char)) - { - ubyte statusColour; - string statusString; - final switch (state) { - case TestState.success: - statusColour = 32; - statusString = "Succeeded"; - break; - case TestState.failure: - statusColour = 31; - statusString = "Failed"; - break; - case TestState.skipped: - statusColour = 93; - statusString = "Skipped"; - break; - } - writer.formattedWrite!"[\033[%s;1m%s\033[0m] %s"(statusColour, statusString, name); - if (state != TestState.success) - { - writer.formattedWrite!" (%s)"(failMsg.replace("\n", " ")); - } - } -} - -TestResult runTests(string tml) @safe -{ - TestResult output; - output.state = TestState.success; - auto splitFile = tml.splitter("\n--- "); - output.name = splitFile.front.findSplit("=== ")[2]; - bool loadFailed, shouldFail; - string failMsg; - JSONValue json; - Node[] nodes; - string yamlString; - Nullable!string compareYAMLString; - Nullable!string events; - ulong testsRun; - - void fail(string msg) @safe - { - output.state = TestState.failure; - output.failMsg = msg; - } - void skip(string msg) @safe - { - output.state = TestState.skipped; - output.failMsg = msg; - } - void parseYAML(string yaml) @safe - { - yamlString = yaml; - try { - nodes = Loader.fromString(yamlString).array; - } - catch (Exception e) - { - loadFailed = true; - failMsg = e.msg; - } - } - void compareLineByLine(const string a, const string b, const string msg) @safe - { - foreach (line1, line2; zip(a.lineSplitter, b.lineSplitter)) - { - if (line1 != line2) - { - fail(text(msg, " Got ", line1, ", expected ", line2)); - break; - } - } - } - foreach (section; splitFile.drop(1)) - { - auto splitSection = section.findSplit("\n"); - auto splitSectionHeader = splitSection[0].findSplit(":"); - const splitSectionName = splitSectionHeader[0].findSplit("("); - const sectionName = splitSectionName[0]; - const sectionParams = splitSectionName[2].findSplit(")")[0]; - string sectionData = splitSection[2]; - if (sectionData != "") - { - //< means dedent. - if (sectionParams.canFind("<")) - { - sectionData = sectionData[4..$].substitute("\n ", "\n", "", " ", "", "\t").toUTF8; - } - else - { - sectionData = sectionData.substitute("", " ", "", "\t").toUTF8; - } - //Not sure what + means. - } - switch(sectionName) - { - case "in-yaml": - parseYAML(sectionData); - break; - case "in-json": - json = parseJSON(sectionData); - break; - case "test-event": - events = sectionData; - break; - case "error": - shouldFail = true; - testsRun++; - break; - case "out-yaml": - compareYAMLString = sectionData; - break; - case "emit-yaml": - // TODO: Figure out how/if to implement this - //fail("Unhandled test - emit-yaml"); - break; - case "lex-token": - // TODO: Should this be implemented? - //fail("Unhandled test - lex-token"); - break; - case "from": break; - case "tags": break; - default: assert(false, text("Unhandled section ", sectionName, "in ", output.name)); - } - } - if (!loadFailed && !compareYAMLString.isNull && !shouldFail) - { - Appender!string buf; - dumper().dump(buf); - compareLineByLine(buf.data, compareYAMLString.get, "Dumped YAML mismatch"); - testsRun++; - } - if (!loadFailed && !events.isNull && !shouldFail) - { - const compare = dumpEventString(yamlString); - compareLineByLine(compare, events.get, "Event mismatch"); - testsRun++; - } - if (loadFailed && !shouldFail) - { - fail(failMsg); - } - if (shouldFail && !loadFailed) - { - fail("Invalid YAML accepted"); - } - if ((testsRun == 0) && (output.state != TestState.failure)) - { - skip("No tests run"); - } - return output; -} - -// Can't be @safe due to dirEntries() -void main(string[] args) @system -{ - string path = "yaml-test-suite/test"; - - void printResult(string id, TestResult result) - { - writeln(id, " ", result); - } - - if (args.length > 1) - { - path = args[1]; - } - - ulong total; - ulong successes; - foreach (file; dirEntries(path, "*.tml", SpanMode.shallow)) - { - auto result = runTests(readText(file)); - if (result.state == TestState.success) - { - debug(verbose) printResult(file.baseName, result); - successes++; - } - else - { - printResult(file.baseName, result); - } - total++; - } - writefln!"%d/%d tests passed"(successes, total); -} -- cgit v1.2.3