using Invercargill; using Invercargill.Convert; void cache_tests() { Test.add_func("/invercargill/operator/cache", () => { var runs = 0; var enumerable = range(0, 64).act(() => runs++).cache().assert_promotion(); var count = enumerable.count(); var min = enumerable.min(); var max = enumerable.max(); var average = enumerable.average(); assert_cmpint(64, CompareOperator.EQ, count); assert_cmpint(0, CompareOperator.EQ, min); assert_cmpint(63, CompareOperator.EQ, max); assert_cmpint(31, CompareOperator.EQ, average); assert_cmpint(64, CompareOperator.EQ, runs); }); Test.add_func("/invercargill/cache/once", () => { var runs = 0; CachedGet func = () => once(() => ++runs); var enumerable = range(0, 64).select(i => func()).to_vector(); assert_cmpint(1, CompareOperator.EQ, runs); assert_true(enumerable.all(i => i == 1)); }); }