Skip to content

Instantly share code, notes, and snippets.

@DiegoCoronel
Created January 31, 2015 14:48
Show Gist options
  • Save DiegoCoronel/75b97fc654663fe13790 to your computer and use it in GitHub Desktop.
Save DiegoCoronel/75b97fc654663fe13790 to your computer and use it in GitHub Desktop.
FizzBuzz Ceylon
//Testes
import ceylon.test {
test,
assertEquals
}
import fizzbuzz {
FizzBuzz
}
test
shared void amostragemDevePossuirApenasNumeros() {
value fizzBuzz = FizzBuzz(10);
assertEquals(fizzBuzz[1], "1");
assertEquals(fizzBuzz[2], "2");
assertEquals(fizzBuzz[4], "4");
assertEquals(fizzBuzz[7], "7");
}
test
shared void amostragemDevePossuirApenasBuzz() {
value fizzBuzz = FizzBuzz(30);
assertEquals( fizzBuzz[5], "buzz");
assertEquals( fizzBuzz[10], "buzz");
assertEquals( fizzBuzz[20], "buzz");
assertEquals( fizzBuzz[25], "buzz");
}
test
shared void amostragemDevePossuirApenasFizz() {
value fizzBuzz = FizzBuzz(30);
assertEquals( fizzBuzz[3], "fizz");
assertEquals( fizzBuzz[6], "fizz");
assertEquals( fizzBuzz[9], "fizz");
assertEquals( fizzBuzz[12], "fizz");
}
test
shared void amostragemDevePossuirApenasFizzBuzz() {
value fizzBuzz = FizzBuzz(30);
assertEquals( fizzBuzz[15], "fizzbuzz");
assertEquals( fizzBuzz[30], "fizzbuzz");
}
test
shared void itemForaDosLimitesDeveSerNulo() {
value fizzBuzz = FizzBuzz(30);
assertEquals( fizzBuzz[-1], null);
assertEquals( fizzBuzz[0], null);
assertEquals( fizzBuzz[31], null);
}
//Implementação
shared class FizzBuzz(Integer limite)
satisfies Iterable<String, Null> & Correspondence<Integer, String> {
shared actual Iterator<String> iterator() {
object iterable satisfies Iterator<String> {
variable Integer current = 1;
shared actual String|Finished next() {
if(current > limite) {
return finished;
}
String result;
if(isFizzBuzz(current)) {
result = "fizzbuzz";
} else if(isFizz(current)) {
result = "fizz";
} else if(isBuzz(current)) {
result = "buzz";
} else {
result = current.string;
}
current++;
return result;
}
}
return iterable;
}
shared Boolean isFizz(Integer i) => i % 3 == 0;
shared Boolean isBuzz(Integer i) => i % 5 == 0;
shared Boolean isFizzBuzz(Integer i) => isFizz(i) && isBuzz(i);
defines(Integer key) => 1 <= key <= limite;
get(Integer key) => if (defines(key)) then skip(key-1).first else null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment