Skip to content

Instantly share code, notes, and snippets.

@martinsson
martinsson / TicTacToe.java
Last active October 25, 2017 20:53
TicTacToe as TDD As If You Meant It
public boolean playerWon(String boardAsString, char player) {
char[] board = boardAsString.toCharArray();
Stream<Stream<Integer>> winningCombinations = Stream.of(
// rows
Stream.of(0, 1, 2),
Stream.of(3, 4, 5),
Stream.of(6, 7, 8),
// columns
Stream.of(0, 3, 6),
Stream.of(1, 4, 7),
@martinsson
martinsson / TicTacToe.java
Last active December 11, 2017 17:38
One-liner solution to the TicTacToe kata ;o)
// Not what I'd call good readable code, but it amuses me ;D
private boolean playerWon(char player, char[] board) {
return of(
// rows
of(0, 1, 2), of(3, 4, 5), of(6, 7, 8),
// columns
of(0, 3, 6), of(1, 4, 7), of(2, 5, 8),
// diagonals
of(0, 4, 8),of(2, 4, 6)
@martinsson
martinsson / ConsoleUI.java
Last active May 26, 2017 15:56
Hexagonal Ui loopback testing
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
public class ConsoleUI {
private PrintWriter writer;
private BufferedReader reader;
public ConsoleUI(PrintWriter out, BufferedReader reader) {
@martinsson
martinsson / AwesomeUnitTest.java
Created April 8, 2017 21:02
Unit test state of the art...
@Test
public void testReadXml() {
try {
ApplicationTargets applicationTargetList = roleXmlReader.readXml();
if (applicationTargetList != null) {
if (applicationTargetList.getApplicationTargetList() == null
&& applicationTargetList.getApplicationTargetList()
.size() == 0) {
fail("Error while reading XML file");
}
@martinsson
martinsson / RomanSpec.hs
Created March 31, 2017 11:44
Make sure an invalid RomanNumber doesn't compile
import Test.Hspec.QuickCheck
class RomanDigit rd where
toArabic :: rd -> Int
data Ones = I | II | III
instance RomanDigit Ones where
toArabic I = 1
toArabic II = 2
toArabic III =3
@martinsson
martinsson / set_spec.hs
Created October 30, 2016 13:26
Set dojo in Haskell (WIP)
import Test.Hspec
import Data.List
main = hspec $ do
describe "set" $ do
it "one card is not a set" $ do
containsset [(Rectangle, Full, Blue, One)] `shouldBe` False
it "all One Full Blue is a set" $ do
containsset [(Rectangle, Full, Blue, One), (Circle, Full, Blue, One), (Triangle, Full, Blue, One)] `shouldBe` True
it "all One Blue Rectangle is a set" $ do
@martinsson
martinsson / lambda-version.js
Created December 30, 2015 12:41
Use lambdas for readability!
function isSelectableZone(drawObject) {
return !drawObject.selectionZone.unselectable
}
function isThereAtLeastOneSelectableZone(drawObjects) {
return lambdas.any(drawObjects, isSelectableZone)
}
// I personally use lodash for javascript; so the above line would have been
// return lodash.any(drawObjects, isSelectableZone)
it('contains the path of the pdf', function() {
var submitToQueueSpy = sinon.spy();
var langBuilder = new LangBuilder(submitToQueueSpy, pdfUtility);
langBuilder.buildLang(parentEntityKey, pdPath);
var expectedPayload = {originalFilepath: pdPath};
sinon.assert.calledWith(submitToQueueSpy, sinon.match(expectedPayload))
})
@martinsson
martinsson / AccontCreationController.java
Created November 18, 2013 23:56
Hexagonal Architecture (user side), Model-View-Presenter
@ActionMapping(params = "action=doFormAction")
public void doAction(@ModelAttribute AccountBean accountBean, HttpRequest request, HttpResponse response) throws IOException {
CreationResponse creationResponse = new HttpCreationResponse(response);
accountService.createAccount(accountBean, creationResponse);
}
@martinsson
martinsson / AccountCreationController.java
Created November 18, 2013 00:29
Layered architecture, conditional logic duplication.
@ActionMapping(params = "action=doFormAction")
public void doAction(@ModelAttribute AccountBean accountBean, HttpRequest request,
HttpResponse response) throws IOException {
boolean compteCree = false;
try {
compteCree = accountService.createAccount(accountBean);
} catch (TechnicalException e) {