| @safe unittest | |
| { | |
| import std.container.dlist; | |
| import std.algorithm.comparison : equal; | |
| import std.container : DList; | |
| auto s = DList!int(1, 2, 3); | |
| assert(equal(s[], [1, 2, 3])); | |
| s.removeFront(); | |
| assert(equal(s[], [2, 3])); | |
| s.removeBack(); | |
| assert(equal(s[], [2])); | |
| s.insertFront([4, 5]); | |
| assert(equal(s[], [4, 5, 2])); | |
| s.insertBack([6, 7]); | |
| assert(equal(s[], [4, 5, 2, 6, 7])); | |
| // If you want to apply range operations, simply slice it. | |
| import std.algorithm.searching : countUntil; | |
| import std.range : popFrontN, popBackN, walkLength; | |
| auto sl = DList!int([1, 2, 3, 4, 5]); | |
| assert(countUntil(sl[], 2) == 1); | |
| auto r = sl[]; | |
| popFrontN(r, 2); | |
| popBackN(r, 2); | |
| assert(r.equal([3])); | |
| assert(walkLength(r) == 1); | |
| // DList.Range can be used to remove elements from the list it spans | |
| auto nl = DList!int([1, 2, 3, 4, 5]); | |
| for (auto rn = nl[]; !rn.empty;) | |
| if (rn.front % 2 == 0) | |
| nl.popFirstOf(rn); | |
| else | |
| rn.popFront(); | |
| assert(equal(nl[], [1, 3, 5])); | |
| auto rs = nl[]; | |
| rs.popFront(); | |
| nl.remove(rs); | |
| assert(equal(nl[], [1])); | |
| } | |