libostd/examples/range.cc

70 lines
1.9 KiB
C++
Raw Normal View History

2016-01-31 23:19:23 +01:00
#include <ostd/range.hh>
#include <ostd/io.hh>
#include <ostd/algorithm.hh>
using namespace ostd;
int main() {
/* range iter - prints 0 to 9 each on new line */
2016-01-31 23:19:23 +01:00
writeln("range iter test");
for (int i: range(10)) {
2016-01-31 23:19:23 +01:00
writeln(i);
}
2016-01-31 23:19:23 +01:00
/* algorithm: map - prints 0.5 to 9.5 each on new line */
2016-01-31 23:19:23 +01:00
writeln("range map test");
for (float f: map(range(10), [](int v) { return v + 0.5f; })) {
2016-02-02 00:10:05 +01:00
writeln(f);
}
2016-01-31 23:19:23 +01:00
/* algorithm: filter - prints 10, 15, 8 each on new line */
2016-01-31 23:19:23 +01:00
writeln("range filter test");
2016-02-04 20:08:02 +01:00
auto il = { 5, 5, 5, 5, 5, 10, 15, 4, 8, 2 };
for (int i: filter(iter(il), [](int v) { return v > 5; })) {
2016-01-31 23:19:23 +01:00
writeln(i);
}
2016-01-31 23:19:23 +01:00
/* prints ABCDEF (ASCII 65, 66, 67, 68, 69, 70) */
2016-03-28 01:01:09 +02:00
writeln("string gen test");
2017-01-30 00:54:06 +01:00
auto s = make_string(map(range(6), [](int v) -> char { return v + 65; }));
2016-02-02 00:10:05 +01:00
writeln(s);
/* join a few ranges together - prints 11, 22, 33 ... 99 each on new line */
2016-03-28 01:01:09 +02:00
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}
*/
2016-03-28 01:01:09 +02:00
writeln("range chunk test");
auto cr = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
for (auto r: iter(cr).chunks(3)) {
writeln(r);
}
2016-03-28 00:49:27 +02:00
2016-04-01 19:49:26 +02:00
/* take test, prints only first 4 */
writeln("range take test");
for (auto r: iter(cr).take(4)) {
2016-04-01 19:49:26 +02:00
writeln(r);
}
2016-04-01 19:49:26 +02:00
2016-03-28 00:49:27 +02:00
/* {11, 44, 77}, {22, 55, 88}, {33, 66, 99} */
2016-03-28 01:01:09 +02:00
writeln("range zip test");
for (auto v: iter(x).zip(iter(y), iter(z))) {
2016-03-28 00:49:27 +02:00
writeln(v);
}
2016-03-28 00:49:27 +02:00
/* 2-tuple zip uses std::pair */
2016-03-28 01:01:09 +02:00
writeln("2-tuple range zip");
for (auto v: iter({ 5, 10, 15, 20 }).zip(iter({ 6, 11, 16, 21 }))) {
2016-03-28 00:49:27 +02:00
writeln(v.first, ", ", v.second);
}
2016-02-07 22:17:15 +01:00
}