import argparse

import parsl
from parsl.app.app import python_app
from parsl.tests.configs.local_threads import config


def test_python_memoization(n=2):
    """Testing python memoization when func bodies differ
    This is the canonical use case.
    """
    @python_app
    def random_uuid(x, cache=True):
        import uuid
        return str(uuid.uuid4())

    x = random_uuid(0)
    print(x.result())

    @python_app
    def random_uuid(x, cache=True):
        import uuid
        print("hi")
        return str(uuid.uuid4())

    y = random_uuid(0)
    assert x.result() != y.result(), "Memoized results were not used"


if __name__ == '__main__':

    parsl.clear()
    dfk = parsl.load(config)

    parser = argparse.ArgumentParser()
    parser.add_argument("-c", "--count", default="10",
                        help="Count of apps to launch")
    parser.add_argument("-d", "--debug", action='store_true',
                        help="Count of apps to launch")
    args = parser.parse_args()

    if args.debug:
        parsl.set_stream_logger()

    x = test_python_memoization(n=4)

@@ -258,32 +258,44 @@
 %0A    @python_app
+(cache=True)
 %0A    def random_
@@ -296,36 +296,24 @@
 andom_uuid(x
-, cache=True
 ):%0A        i
@@ -376,24 +376,202 @@
 dom_uuid(0)%0A
+    x.result()  # allow x to complete to allow completion-time memoization to happen%0A    z = random_uuid(0)%0A    assert x.result() == z.result(), %22Memoized results were not used%22%0A
     print(x.
@@ -596,16 +596,28 @@
 thon_app
+(cache=True)
 %0A    def
@@ -634,20 +634,8 @@
 id(x
-, cache=True
 ):%0A 
@@ -786,27 +786,35 @@
 esults were 
-not
+incorrectly
  used%22%0A%0A%0Aif 

Fix memo test that did not correctly enable caching (#1893)