using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
public static class Implementations
public static void GreenTea(int n)
for(var number=1; number < n; number++){
var textToPrint = GetGreenTeaTextForNumber(number);
Console.WriteLine(textToPrint);
public static string GetGreenTeaTextForNumber(int number){
var textToPrint = string.Empty;
if(IsDivisibleBy(number, 3)){
if(IsDivisibleBy(number, 5)){
if(string.IsNullOrEmpty(textToPrint)){
textToPrint = number.ToString();
private static bool IsDivisibleBy(int n, int divisor){
public static IEnumerable<T> FirstHalf<T>(this IEnumerable<T> tt)
return tt.Take(tt.Count()/2);
public static void Main()
AssertGreenTeaHardcodingResults();
AssertGreenTeaWithoutHardcodingResults();
AssertFirstHalfIsCorrect();
Console.WriteLine("All tests succeeded.");
private static void AssertGreenTeaHardcodingResults(){
AssertGreenTeaIsCorrect(1, "1");
AssertGreenTeaIsCorrect(2, "2");
AssertGreenTeaIsCorrect(3, "Green");
AssertGreenTeaIsCorrect(4, "4");
AssertGreenTeaIsCorrect(5, "Tea");
AssertGreenTeaIsCorrect(6, "Green");
AssertGreenTeaIsCorrect(7, "7");
AssertGreenTeaIsCorrect(10, "Tea");
AssertGreenTeaIsCorrect(12, "Green");
AssertGreenTeaIsCorrect(13, "13");
AssertGreenTeaIsCorrect(15, "GreenTea");
AssertGreenTeaIsCorrect(30, "GreenTea");
AssertGreenTeaIsCorrect(0, string.Empty);
private static void AssertGreenTeaWithoutHardcodingResults(){
private static void AssertFirstHalfIsCorrect(){
AssertFirstHalfIsCorrect(new string [] { }, new string [] { });
AssertFirstHalfIsCorrect(new string [] { "one element" }, new string [] { });
AssertFirstHalfIsCorrect(new string [] { "North", "South", "East", "West" }, new string [] { "North", "South" });
AssertFirstHalfIsCorrect(new string [] { "red", "green", "blue" }, new string [] { "red" });
public static void AssertGreenTeaIsCorrect(int n)
Implementations.GreenTea(n);
public static void AssertGreenTeaIsCorrect(int n, string expectedResult){
Assert.AreEqual(expectedResult, Implementations.GetGreenTeaTextForNumber(n));
public static void AssertFirstHalfIsCorrect(IEnumerable<string> input, IEnumerable<string> expectedResult)
var result = input.FirstHalf();
Assert.IsTrue(result.SequenceEqual(expectedResult));