@safe pure unittest { import std.format.spec; import std.array : appender; auto a = appender!(string)(); auto fmt = "Number: %6.4e\nString: %s"; auto f = FormatSpec!char(fmt); assert(f.writeUpToNextSpec(a)); assert(a.data == "Number: "); assert(f.trailing == "\nString: %s"); assert(f.spec == 'e'); assert(f.width == 6); assert(f.precision == 4); assert(f.writeUpToNextSpec(a)); assert(a.data == "Number: \nString: "); assert(f.trailing == ""); assert(f.spec == 's'); assert(!f.writeUpToNextSpec(a)); assert(a.data == "Number: \nString: "); } @safe pure unittest { import std.format.spec; import std.array : appender; import std.format.write : formatValue; auto spec = singleSpec("%10.3e"); auto writer = appender!string(); writer.formatValue(42.0, spec); assert(writer.data == " 4.200e+01"); }