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.
| Category | Male 18–25 | Female 18–25 |
|---|---|---|
| Excellent | ≥ 39 cm | ≥ 43 cm |
| Good | ≥ 34 cm | ≥ 38 cm |
| Above Average | ≥ 29 cm | ≥ 34 cm |
| Average | ≥ 24 cm | ≥ 30 cm |
| Below Average | ≥ 18 cm | ≥ 25 cm |
| Poor | ≥ 13 cm | ≥ 20 cm |
| Very Poor | ≥ 0 cm | ≥ 0 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.