# Implement a prefix sum and a prefix list on arbitrary ‹Iterable› # instances, using the iterator approach (class with an ‹__iter__› # method). # # Examples: # # dump( prefixes( [ 1, 2, 3 ] ) ) # [] [1] [1, 2] [1, 2, 3] # dump( prefix_sum( [ 1, 2, 3 ] ) ) # [ 1, 3, 6 ] def prefixes( list_in ): pass def prefix_sum( list_in ): pass def test_main() -> None: import types pref = [ [], [ 1 ], [ 1, 2 ], [ 1, 2, 3 ], [ 1, 2, 3, 4 ] ] assert not isinstance( prefixes( [] ), types.GeneratorType ) for i in prefixes( [ 1, 2, 3, 4 ] ): assert i in pref pref.remove( i ) assert not pref lst = [ 1, 2, 3, 4, 5 ] out = [ 1, 3, 6, 10, 15 ] count = 0 for item in prefix_sum( lst ): count += 1 # is iterable assert count == 5 assert list( prefix_sum( lst ) ) == out if __name__ == "__main__": test_main()