# Copyright (C) 2022, H. Conrad Cunningham
# Exploring Languages with Interpreters and Functional Programming

# Modified modular programming example from Ch. 2
# Main Coutning Module importing Geom

#234567890123456789012345678901234567890123456789012345678901234567890

# 2022-03-08: Developed from 2018-07-04 modular example
# 2022-03-10: Renamed incr() to be adv()
# 2022-03-13: Added more smoke testing

# python3 CountingModG.py

# from Arith import incr, get_count, has_more
from Geom import reset, adv, get_count, has_more

def counter():
    while has_more():
        count = get_count()
        print(f'{count}')
        adv()

# Smoke testing
if __name__ == '__main__':
    print('Begin smoke testing with default like reset(1,100,2)')
    counter()
    print(f'reset(1,100,3)')
    reset(1,100,3)
    counter()
    print(f'reset(-1,100,2)')
    reset(-1,100,2)
    counter()
    print(f'reset(1,-100,2)')
    reset(1,-100,2)
    counter()
    print(f'reset(-1,-100,2)')
    reset(-1,-100,2)
    counter()
    print(f'reset(1,100,-2)')
    reset(1,100,-2)
    counter()
    print(f'reset(-1,-100,-2)')
    reset(-1,-100,-2)
    counter()
    print(f'reset(100,1,2) should give empty sequence')
    reset(100,1,2)
    counter()
    print(f'reset(1,100,0) should give error')
    reset(1,100,0)
    counter()
    print('End smoke testing')


