////////////////////////////////////////////////////
1 import std.math : approxEqual; 2 3 string ini = ` 4 value1 = 1 ;value1 comment 5 value2 = hello world ;value2 comment 6 7 value3 = 1.1 8 9 value3 = 3.1415 ; value3 comment 10 11 ;value4 comment 12 value4 = 3.14159263358979361680130282241663053355296142399311 13 14 ;dfgg 15 16 ; this is a comment 17 value5=value5 18 value6 = value6 19 ; dfgdfgdgd sdfs s 20 value7= Some text with spaces 21 22 value7+ = " Some text with spaces " 23 24 value8_ = 985642 25 value8=9856428642 26 27 28 29 boolval1 = on 30 boolval2 = 1 31 boolval3 = true 32 33 boolval4 = off 34 boolval5 = 0 35 boolval6 = false 36 boolval7 = any else 37 `; 38 39 40 IniConfigs cfg; 41 42 assert(cfg.empty()); 43 assert(!cfg.size()); 44 45 try { 46 cfg = ini; 47 } catch (IniConfigsException e) { 48 assert(0, e.msg); 49 } 50 51 52 assert(!cfg.empty()); 53 assert(17 == cfg.size()); 54 55 cfg.add(` 56 value9 = 15 57 value10 = -15 58 `); 59 60 assert(19 == cfg.size()); 61 62 assert(15 == cfg.get!ubyte ("value9")); 63 assert(15 == cfg.get!ushort ("value9")); 64 assert(15 == cfg.get!uint ("value9")); 65 assert(15 == cfg.get!ulong ("value9")); 66 67 assert(-15 == cfg.get!byte ("value10")); 68 assert(-15 == cfg.get!int ("value10")); 69 assert(-15 == cfg.get!short ("value10")); 70 assert(-15 == cfg.get!long ("value10")); 71 72 73 assert( approxEqual(3.1415, cfg.get!float ("value3")) ); 74 assert( approxEqual(3.1415, cfg.get!double ("value3")) ); 75 assert( approxEqual(3.1415, cfg.get!real ("value3")) ); 76 77 assert( approxEqual(3.14159263358979361680130282241663053355296142399311, cfg.get!float ("value4"), 1e-20) ); 78 assert( approxEqual(3.14159263358979361680130282241663053355296142399311, cfg.get!double ("value4"), 1e-40) ); 79 assert( approxEqual(3.14159263358979361680130282241663053355296142399311, cfg.get!real ("value4"), 1e-60) ); 80 81 82 const string name1 = "value1"; 83 const string name1_ = "value1_"; 84 int val1 = cfg.get(name1, 5); 85 int val1_ = cfg.get(name1_, 5); 86 87 assert(1 == val1); 88 assert(5 == val1_); 89 90 assert("hello world" == cfg.get!string("value2", "default value") ); 91 assert("default value" == cfg.get!string("value2+", "default value") ); 92 93 94 assert("3.1415" == cfg.get!string("value3")); 95 assert("" == cfg.get!string("value3+")); 96 97 assert(approxEqual(3.1415, cfg.get("value3", 2.718281828459))); 98 assert(approxEqual(2.71828,cfg.get("value3+", 2.718281828459))); 99 assert(approxEqual(3.14159,cfg.get("value4", 2.718281828459))); 100 101 assert(cfg.has("value3")); 102 assert(!cfg.has("value3+")); 103 104 assert("Some text with spaces" == cfg.get!string("value7", "value7")); 105 assert(" Some text with spaces " == cfg.get!string("value7+")); 106 cfg.add(`empty_str = ""`); 107 assert("" == cfg.get!string("empty_str") ); 108 109 110 assert(985642 == cfg.get("value8_", 0) ); 111 assert(9856428642 == cfg.get("value8", size_t(0)) ); 112 assert(9856428642 == cfg.get!size_t("value8", 0) ); 113 114 115 assert(false == cfg.get("boolval0", false) ); 116 assert(true == cfg.get("boolval1", false) ); 117 assert(true == cfg.get("boolval2", false) ); 118 assert(true == cfg.get("boolval3", false) ); 119 120 assert(false == cfg.get("boolval4", true) ); 121 assert(false == cfg.get("boolval5", true) ); 122 assert(false == cfg.get("boolval6", true) ); 123 assert(false == cfg.get("boolval7", true) ); 124 125 assert(true == cfg.get!bool("boolval2") ); 126 assert(false == cfg.get!bool("boolval0") );