using System.Collections.Generic;
public class CharacterCounter
public static Dictionary<char, int> CountCharacterOccurrences(string input)
if (string.IsNullOrEmpty(input))
return new Dictionary<char, int>();
Dictionary<char, int> charCounts = new Dictionary<char, int>();
foreach (char c in input)
char lowerC = char.ToLower(c);
if (charCounts.ContainsKey(lowerC))
public class CharacterCounterTests
public void CountCharacterOccurrences_EmptyString_ReturnsEmptyDictionary()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("");
Assert.That(result, Is.Empty);
public void CountCharacterOccurrences_NullString_ReturnsEmptyDictionary()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences(null);
Assert.That(result, Is.Empty);
public void CountCharacterOccurrences_SingleCharacter_ReturnsDictionaryWithCountOne()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("a");
Assert.That(result, Is.EqualTo(new Dictionary<char, int>() { { 'a', 1 } }));
public void CountCharacterOccurrences_SimpleString_ReturnsCorrectCounts()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("hello");
Assert.That(result, Is.EqualTo(new Dictionary<char, int>() { { 'h', 1 }, { 'e', 1 }, { 'l', 2 }, { 'o', 1 } }));
public void CountCharacterOccurrences_StringWithSpaces_ReturnsCorrectCounts()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("hello world");
Assert.That(result, Is.EqualTo(new Dictionary<char, int>() { { 'h', 1 }, { 'e', 1 }, { 'l', 3 }, { 'o', 2 }, { ' ', 1 }, { 'w', 1 }, { 'r', 1 }, { 'd', 1 } }));
public void CountCharacterOccurrences_CaseInsensitiveString_ReturnsCorrectCounts()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("Hello");
Assert.That(result, Is.EqualTo(new Dictionary<char, int>() { { 'h', 1 }, { 'e', 1 }, { 'l', 2 }, { 'o', 1 } }));
public void CountCharacterOccurrences_StringWithSpecialCharacters_ReturnsCorrectCounts()
Dictionary<char, int> result = CharacterCounter.CountCharacterOccurrences("a!@#a");
Assert.That(result, Is.EqualTo(new Dictionary<char, int>() { { 'a', 2 }, { '!', 1 }, { '@', 1 }, { '#', 1 } }));
public static void Main()
new NUnitLite.AutoRun().Execute(["--noc" ]);