Skip to content

Commit 09eb51b

Browse files
committed
✨ (mine-sweeper): add PlaceMines, CalculateAdjacentMines, NewGame
1 parent a1f6b5d commit 09eb51b

File tree

1 file changed

+240
-0
lines changed

1 file changed

+240
-0
lines changed

internal/game/game_test.go

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,3 +367,243 @@ func TestGameInit(t *testing.T) {
367367
})
368368
}
369369
}
370+
371+
func TestCalculateAdjacentMines(t *testing.T) {
372+
type field struct {
373+
board *Board
374+
rows int
375+
cols int
376+
minesNumber int
377+
}
378+
tests := []struct {
379+
name string
380+
input field
381+
want *Board
382+
}{
383+
{
384+
name: "Test CalculateAdjacentMines with specific input board, row = 5, col = 5, mineNumber = 4",
385+
input: field{
386+
rows: 5,
387+
cols: 5,
388+
minesNumber: 4,
389+
board: &Board{
390+
rows: 5,
391+
cols: 5,
392+
minePositionShuffler: func(coords []coord) {},
393+
cells: [][]*Cell{
394+
{
395+
{
396+
IsMine: false,
397+
},
398+
{
399+
IsMine: true,
400+
},
401+
{
402+
IsMine: false,
403+
},
404+
{
405+
IsMine: false,
406+
},
407+
{
408+
IsMine: false,
409+
},
410+
},
411+
{
412+
{
413+
IsMine: false,
414+
},
415+
{
416+
IsMine: false,
417+
},
418+
{
419+
IsMine: false,
420+
},
421+
{
422+
IsMine: true,
423+
},
424+
{
425+
IsMine: false,
426+
},
427+
},
428+
{
429+
{
430+
IsMine: false,
431+
},
432+
{
433+
IsMine: false,
434+
},
435+
{
436+
IsMine: true,
437+
},
438+
{
439+
IsMine: false,
440+
},
441+
{
442+
IsMine: false,
443+
},
444+
},
445+
{
446+
{
447+
IsMine: false,
448+
},
449+
{
450+
IsMine: false,
451+
},
452+
{
453+
IsMine: false,
454+
},
455+
{
456+
IsMine: false,
457+
},
458+
{
459+
IsMine: false,
460+
},
461+
},
462+
{
463+
{
464+
IsMine: true,
465+
},
466+
{
467+
IsMine: false,
468+
},
469+
{
470+
IsMine: false,
471+
},
472+
{
473+
IsMine: false,
474+
},
475+
{
476+
IsMine: false,
477+
},
478+
},
479+
},
480+
},
481+
},
482+
want: &Board{
483+
rows: 5,
484+
cols: 5,
485+
minePositionShuffler: func(coords []coord) {},
486+
cells: [][]*Cell{
487+
{
488+
{
489+
IsMine: false,
490+
AdjacenetMines: 1,
491+
},
492+
{
493+
IsMine: true,
494+
AdjacenetMines: 0,
495+
},
496+
{
497+
IsMine: false,
498+
AdjacenetMines: 2,
499+
},
500+
{
501+
IsMine: false,
502+
AdjacenetMines: 1,
503+
},
504+
{
505+
IsMine: false,
506+
AdjacenetMines: 1,
507+
},
508+
},
509+
{
510+
{
511+
IsMine: false,
512+
AdjacenetMines: 1,
513+
},
514+
{
515+
IsMine: false,
516+
AdjacenetMines: 2,
517+
},
518+
{
519+
IsMine: false,
520+
AdjacenetMines: 3,
521+
},
522+
{
523+
IsMine: true,
524+
AdjacenetMines: 0,
525+
},
526+
{
527+
IsMine: false,
528+
AdjacenetMines: 1,
529+
},
530+
},
531+
{
532+
{
533+
IsMine: false,
534+
AdjacenetMines: 0,
535+
},
536+
{
537+
IsMine: false,
538+
AdjacenetMines: 1,
539+
},
540+
{
541+
IsMine: true,
542+
AdjacenetMines: 0,
543+
},
544+
{
545+
IsMine: false,
546+
AdjacenetMines: 2,
547+
},
548+
{
549+
IsMine: false,
550+
AdjacenetMines: 1,
551+
},
552+
},
553+
{
554+
{
555+
IsMine: false,
556+
AdjacenetMines: 1,
557+
},
558+
{
559+
IsMine: false,
560+
AdjacenetMines: 2,
561+
},
562+
{
563+
IsMine: false,
564+
AdjacenetMines: 1,
565+
},
566+
{
567+
IsMine: false,
568+
AdjacenetMines: 1,
569+
},
570+
{
571+
IsMine: false,
572+
AdjacenetMines: 0,
573+
},
574+
},
575+
{
576+
{
577+
IsMine: true,
578+
AdjacenetMines: 0,
579+
},
580+
{
581+
IsMine: false,
582+
AdjacenetMines: 1,
583+
},
584+
{
585+
IsMine: false,
586+
AdjacenetMines: 0,
587+
},
588+
{
589+
IsMine: false,
590+
AdjacenetMines: 0,
591+
},
592+
{
593+
IsMine: false,
594+
AdjacenetMines: 0,
595+
},
596+
},
597+
},
598+
},
599+
},
600+
}
601+
for _, tt := range tests {
602+
t.Run(tt.name, func(t *testing.T) {
603+
game := NewGame(tt.input.rows, tt.input.cols, tt.input.minesNumber)
604+
game.Init(tt.input.board, func(coords []coord) {})
605+
game.board.CalculateAdjacentMines()
606+
assert.Equal(t, tt.want.cells, game.board.cells)
607+
})
608+
}
609+
}

0 commit comments

Comments
 (0)