input: Write a function to generate n-grams of the given text with a specified window size. The function should return a Counter object containing the count of each n-gram. If the text is empty, return an empty Counter.
  assert generate_ngrams("The quick brown fox jumps over the lazy dog", 3) == Counter({'the quick brown': 3, 'quick brown fox': 2, 'over the lazy': 1, 'brown fox jumps': 1, 'fox jumps over': 1, 'the lazy dog': 1, 'jumps over the': 1, 'quick brown fox jumps': 1})
  assert generate_ngrams("", 3) == Counter()
  assert generate_ngrams("hello world", 2) == Counter({'hello world': 2, 'world world': 1})
  assert generate_ngrams("a b c d e", 3) == Counter({'a b c': 3, 'b c d': 2, 'c d e': 1, 'd e a': 1, 'e a b': 1})
  assert generate_ngrams("test test", 1) == Counter({'test': 2})
output: 
  from collections import Counter
  
  def generate_ngrams(text, window_size):
      if not text:
          return Counter()
      words = text.split()
      ngrams = [tuple(words[i:i+window_size]) for i in range(len(words) - window_size + 1)]
      return Counter([' '.join(ngram) for ngram in ngrams])
  