import pytest
from Q1 import check_dns

def test_valid_dns():
    assert check_dns("example.com") == True
    assert check_dns("subdomain.example.com") == True
    assert check_dns("sub-domain.example-123.com") == True
    assert check_dns("a.com") == True
    assert check_dns("1.com") == True

def test_invalid_length():
    assert check_dns("a" * 256) == False
    assert check_dns("subdomain." + "a" * 64 + ".com") == False

def test_invalid_characters():
    assert check_dns("invalid_domain_!") == False
    assert check_dns("example#.com") == False
    assert check_dns("example_.com") == False
    assert check_dns("-.com") == False

def test_single_character():
    assert check_dns("a.com") == True
    assert check_dns("1.com") == True
    assert check_dns("-.com") == False

def test_empty_string():
    assert check_dns("") == False

def test_missing_dot():
    assert check_dns("example") == False
    assert check_dns("exampledomaincom") == False

def test_start_with_dot():
    assert check_dns(".example.com") == False

def test_end_with_dot():
    assert check_dns("example.com.") == False

def test_consecutive_dots():
    assert check_dns("example..com") == False
    assert check_dns("sub..domain.com") == False

def test_long_labels():
    assert check_dns("a" * 64 + ".com") == False
    assert check_dns("subdomain." + "a" * 63 + ".com") == True

def test_mixed_case():
    assert check_dns("Example.com") == False
    assert check_dns("exAmple.cOm") == False
