diff --git a/.gitignore b/.gitignore index 23f0bd6..523aee0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ *.o *.core -example/format -example/listdir -example/range -example/signal -example/stream1 -example/stream2 +examples/format +examples/listdir +examples/range +examples/signal +examples/stream1 +examples/stream2 +examples/range_pipe test_runner diff --git a/Makefile b/Makefile index 91abf2a..e6eeba5 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ EXAMPLES_OBJ = \ examples/format \ examples/listdir \ examples/range \ + examples/range_pipe \ examples/signal \ examples/stream1 \ examples/stream2 diff --git a/examples/range_pipe.cc b/examples/range_pipe.cc new file mode 100644 index 0000000..391e778 --- /dev/null +++ b/examples/range_pipe.cc @@ -0,0 +1,56 @@ +#include +#include +#include + +using namespace ostd; + +int main() { + /* algorithm: map - prints 0.5 to 9.5 each on new line */ + writeln("range map test"); + for (float f: range(10) | map([](int v) { return v + 0.5f; })) + writeln(f); + + /* algorithm: filter - prints 10, 15, 8 each on new line */ + writeln("range filter test"); + auto il = { 5, 5, 5, 5, 5, 10, 15, 4, 8, 2 }; + for (int i: iter(il) | filter([](int v) { return v > 5; })) + writeln(i); + + /* prints ABCDEF (ASCII 65, 66, 67, 68, 69, 70) */ + writeln("string gen test"); + String s(range(6) | map([](int v) -> char { return v + 65; })); + writeln(s); + + /* join a few ranges together - prints 11, 22, 33 ... 99 each on new line */ + writeln("range join test"); + auto x = { 11, 22, 33 }; + auto y = { 44, 55, 66 }; + auto z = { 77, 88, 99 }; + for (auto i: iter(x) | join(iter(y), iter(z))) + writeln(i); + + /* chunk a range into subranges - prints + * {11, 22, 33} + * {44, 55, 66} + * {77, 88, 99} + */ + writeln("range chunk test"); + auto cr = { 11, 22, 33, 44, 55, 66, 77, 88, 99 }; + for (auto r: iter(cr) | chunks(3)) + writeln(r); + + /* take test, prints only first 4 */ + writeln("range take test"); + for (auto r: iter(cr) | take(4)) + writeln(r); + + /* {11, 44, 77}, {22, 55, 88}, {33, 66, 99} */ + writeln("range zip test"); + for (auto v: iter(x) | zip(iter(y), iter(z))) + writeln(v); + + /* 2-tuple zip uses Pair */ + writeln("2-tuple range zip"); + for (auto v: iter({ 5, 10, 15, 20 }) | zip(iter({ 6, 11, 16, 21 }))) + writeln(v.first, ", ", v.second); +}