void printQ(Queue<T> const & q) { std::cout << "Front " << q.lenF() << ": "; lazyPrint(q.fStream()); std::cout << "Rear " << q.lenR() << ": "; lazyPrint(q.rStream()); std::cout << std::endl; }
Stream<int> test1() { Stream<int> s0; Stream<int> s1(1, s0); lazyPrint(s1); Stream<int> s2(2, s1); Stream<int> s3(3, s2); Stream<int> s4(4, s3); std::cout << s1.get() << std::endl; lazyPrint(s4); return s4; }
void main() { forcePrint(testZip()); std::cout << testUnit() << std::endl; auto s = testCat(); lazyPrint(s); forcePrint(s); }
Stream<int> test3() { auto s4 = test1(); auto rv = s4.reverse(); std::cout << "Reversed\n"; lazyPrint(rv); forcePrint(rv); auto cat = concat(s4, rv); return cat; }
Stream<int> test() { auto cat = test3(); Stream<int> s(10, cat); std::cout << "Cat + 10\n"; lazyPrint(s); forcePrint(s); auto t2 = cat.take(5); return t2; }
void lazyPrint(Stream<T> const & s) { if (s.isEmpty()) { std::cout << std::endl; } else if (s.isForced()) { T v = s.get(); auto tail = s.pop_front(); std::cout << v << " "; lazyPrint(tail); } else { std::cout << "?\n"; } }