| 807 | |
| 808 | |
| 809 | def test_fused_ensure_only_executed_once(): |
| 810 | counter = [] |
| 811 | |
| 812 | def counter_func(a, b): |
| 813 | counter.append(None) |
| 814 | return func(a, b) |
| 815 | |
| 816 | a = Task("key-1", counter_func, "a", "a") |
| 817 | b = Task("key-2", func2, a.ref(), "b") |
| 818 | c = Task("key-3", func2, a.ref(), "c") |
| 819 | d = Task("key-4", func, b.ref(), c.ref()) |
| 820 | for perm in itertools.permutations([a, b, c, d]): |
| 821 | fused = Task.fuse(*perm) |
| 822 | counter.clear() |
| 823 | assert fused() == func(func2(func("a", "a"), "b"), func2(func("a", "a"), "c")) |
| 824 | assert len(counter) == 1 |
| 825 | |
| 826 | |
| 827 | def test_fused_dont_hold_in_memory_too_long(): |