Skip to content
🛠️ToolsShed

Flexibility Test

Evaluate your sit-and-reach flexibility score by age and gender.

About This Test

The sit-and-reach test measures hamstring and lower back flexibility. Sit on the floor with legs extended and reach forward. The distance from your fingertips to your toes indicates your flexibility level.

CategoryMale 18–25Female 18–25
Excellent39 cm43 cm
Good34 cm38 cm
Above Average29 cm34 cm
Average24 cm30 cm
Below Average18 cm25 cm
Poor13 cm20 cm
Very Poor0 cm0 cm

About this tool

The flexibility test, commonly known as the sit-and-reach test, is one of the most widely used assessments of hamstring and lower back flexibility in fitness and clinical settings. This simple yet effective measurement helps you understand your current range of motion and track improvements over time, which is important for mobility, injury prevention, and overall physical well-being.

To use this tool, measure your sit-and-reach distance in centimeters—the distance your fingertips reach forward from your toes while seated with straight legs. Enter your distance along with your age and gender, and the tool instantly compares your result to age and gender-specific normative standards. This gives you a clear picture of whether your flexibility is below average, average, above average, or excellent for your demographic.

Regular flexibility testing helps identify movement imbalances and informs your stretching and mobility routines. Athletes, older adults aiming to maintain independence, and anyone recovering from injury can benefit from tracking this metric over weeks and months to ensure steady progress.

Frequently Asked Questions

Code Implementation

def evaluate_flexibility(
    reach_cm: float, age: int, gender: str
) -> dict:
    """
    Evaluate sit-and-reach flexibility test score.
    Returns rating based on normative data.
    """
    # Normative ranges (cm) [excellent, above_avg, average, below_avg]
    norms = {
        "male": {
            (0, 29):   [27, 17, 6, -5],
            (30, 39):  [25, 15, 4, -6],
            (40, 49):  [23, 13, 2, -7],
            (50, 59):  [20, 10, -1, -9],
            (60, 120): [17, 8, -3, -11],
        },
        "female": {
            (0, 29):   [30, 21, 12, 5],
            (30, 39):  [29, 20, 11, 4],
            (40, 49):  [27, 18, 9, 2],
            (50, 59):  [25, 16, 8, 0],
            (60, 120): [23, 14, 6, -2],
        },
    }

    thresholds = None
    for (low, high), values in norms.get(gender.lower(), {}).items():
        if low <= age <= high:
            thresholds = values
            break

    if thresholds is None:
        return {"error": "Age/gender out of range"}

    excellent, above_avg, average, below_avg = thresholds
    if reach_cm >= excellent:
        rating = "Excellent"
    elif reach_cm >= above_avg:
        rating = "Above Average"
    elif reach_cm >= average:
        rating = "Average"
    elif reach_cm >= below_avg:
        rating = "Below Average"
    else:
        rating = "Poor"

    return {"reach_cm": reach_cm, "rating": rating, "age": age, "gender": gender}

result = evaluate_flexibility(reach_cm=20, age=35, gender="male")
print(result)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.