assertEquals(roles, sm.getRoles());
assertEquals(9, sm.getLegalJointMoves(state).size());
assertEquals(9, sm.getLegalMoves(state, xRole).size());
assertEquals(1, sm.getLegalMoves(state, oRole).size());
Move noop = new Move(GdlPool.getConstant("noop"));
assertEquals(noop, sm.getLegalMoves(state, oRole).get(0));
Move m11 = move("mark 1 1");
assertTrue(sm.getLegalMoves(state, xRole).contains(m11));
state = sm.getNextState(state, Arrays.asList(new Move[] {m11, noop}));
assertFalse(sm.isTerminal(state));
Move m13 = move("mark 1 3");
assertTrue(sm.getLegalMoves(state, oRole).contains(m13));
state = sm.getNextState(state, Arrays.asList(new Move[] {noop, m13}));
assertFalse(sm.isTerminal(state));
Move m31 = move("mark 3 1");
assertTrue(sm.getLegalMoves(state, xRole).contains(m31));
state = sm.getNextState(state, Arrays.asList(new Move[] {m31, noop}));
assertFalse(sm.isTerminal(state));
Move m22 = move("mark 2 2");
assertTrue(sm.getLegalMoves(state, oRole).contains(m22));
state = sm.getNextState(state, Arrays.asList(new Move[] {noop, m22}));
assertFalse(sm.isTerminal(state));
Move m21 = move("mark 2 1");
assertTrue(sm.getLegalMoves(state, xRole).contains(m21));
state = sm.getNextState(state, Arrays.asList(new Move[] {m21, noop}));
assertTrue(sm.isTerminal(state));
assertEquals(100, sm.getGoal(state, xRole));
assertEquals(0, sm.getGoal(state, oRole));