DEV Community

Oleksandr Viktor
Oleksandr Viktor

Posted on

How Grok 3 and xUnit Tests Helped Craft an Ideal `Results` Class

In the world of software development, creating robust, reliable code is both an art and a science. For Oleksandr Viktor (UkrGuru), a passionate developer whose life revolves around programming, this pursuit led to an impressive collaboration with Grok 3—an AI assistant from xAI—and the power of xUnit testing. Together, they transformed an initial open-source Results class into a near-perfect utility for parsing data, now battle-tested and ready for developers everywhere.

The Starting Point

The journey began with an open-source Results class, available at https://github.com/UkrGuru/Sql/blob/main/src/Results.cs. Designed as part of the UkrGuru.Sql project, this class aimed to parse various data types—primitives, enums, JSON elements, and more—into a target type T. While functional, it had room for improvement, particularly in handling edge cases like char[] conversions and enum parsing.

Enter Grok 3 and xUnit

Oleksandr enlisted Grok 3 to rigorously evaluate the Results class, leveraging its ability to analyze code and suggest improvements. Paired with xUnit—a popular .NET testing framework—the duo embarked on a marathon of test-driven refinement. Grok 3 generated dozens of tests targeting potential weaknesses: type safety, null handling, JSON parsing quirks, enum edge cases, and overflow scenarios. Each test aimed to expose flaws, but Oleksandr’s code proved resilient, passing challenge after challenge with strategic fixes.

Key Fixes That Made It Ideal

Two standout improvements emerged from this process:

  1. char[] Handling:

    • Initial Code: char[] chars => (T)(object)new string(chars)
    • Problem: This threw InvalidCastException for non-string targets (e.g., double), limiting flexibility.
    • Fix: char[] chars => (T)Convert.ChangeType(new string(chars), typeof(T))
    • Result: Using Convert.ChangeType, the code now converts char[] to a wide range of types (e.g., "123" to 123.0 for double), throwing appropriate exceptions only when truly invalid—enhancing type safety and versatility.
  2. Enum Parsing:

    • Initial Code: Type t when t.IsEnum => (T)Enum.Parse(t, value.ToString()!)
    • Problem: Threw generic ArgumentException for invalid values, lacking specificity.
    • Fix:
     Type t when t.IsEnum => (T?)(Enum.TryParse(t, Convert.ToString(value), out object? result) && Enum.IsDefined(t, result)
             ? result : throw new ArgumentException($"'{value}' is not a valid value for enum {t.Name}"))
    
  • Result: Now uses TryParse with IsDefined for robust parsing, throwing a custom, informative exception (e.g., "'3' is not a valid value for enum TestEnum")—improving error clarity and reliability.

The Power of Collaboration

Grok 3’s relentless test generation—spanning malformed JSON, negative TimeSpan values, overflow conditions, and more—pushed Oleksandr to refine his code iteratively. xUnit tests provided the proving ground, ensuring each fix held up under scrutiny. Oleksandr’s insight—that .NET 9’s default strict JSON parsing (throwing JsonException for invalid data like "not-a-number")—explained the class’s strict behavior without needing explicit options, sealing its perfection.

Why Developers Should Use It

The resulting Results class is a gem for .NET developers:

  • Versatility: Handles primitives, enums, JSON, and char[] with ease.
  • Robustness: Throws specific exceptions for invalid inputs, aligning with a fail-fast philosophy.
  • Simplicity: Clean, concise switch expressions make it maintainable.
  • Open Source: Freely available at GitHub—fork it, use it, improve it!

Whether you’re parsing database results, JSON payloads, or custom inputs, this class—forged through Grok 3’s AI-driven testing and Oleksandr’s expertise—offers a reliable, battle-tested solution. Developers seeking a parsing utility that balances flexibility with strictness should give it a spin—it’s as close to ideal as code gets!

Image description

Top comments (1)

Collapse
 
ukrguru profile image
Oleksandr Viktor

I want to add that in 4 hours of communication with Grok3, he not only helped me create 50 new tests for the Results class, but we were able to find a common language of mutual understanding, which will adapt to the final result ...