input: Write a function named `extract_top_words` that takes a string `text` as input and returns a list of the top 10 most frequent words in the text, along with their counts. If the text contains fewer than 10 unique words, return all the words with their counts. The result should be a list of tuples, where each tuple contains a word and its count.
  assert extract_top_words("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.") == [('dolor', 1), ('Lorem', 1), ('ipsum', 1), ('sit', 1), ('amet,', 1), ('consectetur', 1), ('adipiscing', 1), ('elit,', 1), ('sed', 1), ('do', 1)]
  assert extract_top_words("The quick brown fox jumps over the lazy dog. The dog barks and the fox runs away.") == [('the', 4), ('fox', 2), ('dog', 2), ('over', 1), ('lazy', 1), ('quick', 1), ('brown', 1), ('jumps', 1), ('runs', 1), ('away.', 1)]
  assert extract_top_words("") == []
  assert extract_top_words("a a a a b b b c c d") == [('a', 4), ('b', 3), ('c', 2), ('d', 1)]
output: def extract_top_words(text):
      if not text:
          return []
      
      words = text.split()
      word_count = {}
      
      for word in words:
          word = word.lower()
          if word in word_count:
              word_count[word] += 1
          else:
              word_count[word] = 1
      
      sorted_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
      
      return sorted_words[:10]