def METHOD_NAME(author):
    """
    Testing the "?" model
    """
    print(">>> Testing -----------------------------------------------------\n")
    # -----------------------------------------------------------------------
    # set required values
    print(" >> Pre-Setting (randomly) required values for testing purposes:")
    print()
    print(" * Assigning (random) author, model version and parameters...")
    version = ""
    if not author:
        version = random.choice(["2009", "2014"])
        author = "ELVIDGE" + str(version)
    else:
        version = author[7:]
    satellite = random.choice(list(COEFFICIENTS[author].keys()))
    year = random.choice(list(COEFFICIENTS[author][satellite].keys()))
    c0 = COEFFICIENTS[author][satellite][year][0]
    c1 = COEFFICIENTS[author][satellite][year][1]
    print(f"   Author: {author}")
    print(f"   Version: {version}")
    print(f"   Satellite: {satellite}")
    print(f"   Year: {year}")
    print(f"   c0: {c0}")
    print(f"   c1: {c1}")
    c2 = float()
    if "WU" not in author:
        print()
        print(" * Assiging a random c2 coefficient...")
        c2 = COEFFICIENTS[author][satellite][year][2]
        print(f"   {c2}")
    #    R2 = coefficients[author][satellite][year][3]
    #    print " Associated R^2 value: ", R2
    print()
    # -----------------------------------------------------------------------
    print(" >> Testing model class:")
    print()
    print(
        "   Usage:  <ModelName>(satellite, year, model version)\n"
        "   where:  DN: input Digital Number value (integer)\n"
        "           Coefficients: a pair or triplet of floating point values (tuple)\n"
        "   eg:     liu2010_model = Liu2012(F10, 1992, 2009)"
    )
    print()
    if "ELVIDGE" in author:
        METHOD_NAME = Elvidge(satellite, year, version)
    elif "LIU" in author:
        METHOD_NAME = Liu2012(satellite, year)
    elif "WU" in author:
        METHOD_NAME = Wu2013(satellite, year)
    print(" * Testing 'citation'  method:\n\n  ", METHOD_NAME.citation)
    print()
    print(" * Testing '__str__' of class:\n\n  ", METHOD_NAME)
    print(" * Testing 'satellite': ", METHOD_NAME.satellite)
    print(" * Testing 'year':      ", METHOD_NAME.year)
    print(" * Testing 'veify_year': ", METHOD_NAME.verify_year(author, satellite, year))
    print(" * Testing 'coefficients': ", METHOD_NAME.coefficients)
    print(" * Testing 'r2': ", METHOD_NAME.r2)
    print(" * Testing 'report_r2' method: ", METHOD_NAME.report_r2())
    dn = random_digital_number()
    print(" > A random digital number: ", dn)
    print(" * Testing 'is_dn_valid': ", METHOD_NAME.is_dn_valid(dn))
    print(" * Testing 'calibrate' method:  ", METHOD_NAME.calibrate(dn))
    print(" * Testing '_model' (hidden): ", METHOD_NAME._model)
    print(" * Testing 'mapcalc': ", METHOD_NAME.mapcalc)
    print(" * Testing 'get_mapcalc': ", METHOD_NAME.get_mapcalc())
    print()
    # -----------------------------------------------------------------------
    print(" >> Testing helper functions: ")
    print()
    dn = random_digital_number()
    print(
        " * Testing 'random_digital_number()' method (and type()): ", dn, "|", type(dn)
    )
    print(
        " * Testing 'calibrate_digital_number' method: ",
        calibrate_digital_number(dn, c0, c1, c2),
    )
    # -----------------------------------------------------------------------
    print(" * Testing three random Digital number values:\n")
    for dn in random_digital_numbers(3):
        print("   (Random) DN: ", dn)
        print("   Coefficients: ", METHOD_NAME.coefficients)
        print("   Model: ", METHOD_NAME.calibrate(dn), "\n")