Guest User

Untitled

a guest
Oct 2nd, 2016
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 32.37 KB | None | 0 0
  1. package game;
  2.  
  3. import org.testng.annotations.Test;
  4.  
  5. import static game.BonusType.*;
  6. import static game.Move.*;
  7.  
  8. @Test
  9. public class BestMoveFinderTest extends AbstractBMFTest {
  10.  
  11.     @Test
  12.     void testWall() {
  13.         board("" +
  14.                 ".....\n" +
  15.                 "Xm...\n" +
  16.                 "0....\n" +
  17.                 ".....\n" +
  18.                 "....."
  19.         );
  20.         check(move(2, 1));
  21.     }
  22.  
  23.     @Test
  24.     void movement() {
  25.         board("" +
  26.                 "....0\n" +
  27.                 "Xm...\n" +
  28.                 "0....\n" +
  29.                 ".....\n" +
  30.                 "....."
  31.         );
  32.         check(move(2, 1));
  33.     }
  34.  
  35.     @Test
  36.     void bfs() {
  37.         board("" +
  38.                 ".mX..\n" +
  39.                 "..X0.\n" +
  40.                 "..X..\n" +
  41.                 "..X..\n" +
  42.                 "....."
  43.         );
  44.         check(move(1, 1));
  45.     }
  46.  
  47.     @Test
  48.     void testBomb() {
  49.         board("" +
  50.                 "0mX..\n" +
  51.                 ".....\n" +
  52.                 ".....\n" +
  53.                 "....0\n" +
  54.                 "...0."
  55.         );
  56.         check(bomb(1, 1));
  57.     }
  58.  
  59.     @Test
  60.     void testBug() {
  61.         board("" +
  62.                 "m....\n" +
  63.                 "0....\n" +
  64.                 ".....\n" +
  65.                 ".....\n" +
  66.                 "0...."
  67.         );
  68.         addBomb(0, 0, 7);
  69.         check(move(0, 1));
  70.     }
  71.  
  72.     @Test
  73.     void testBestTargetIsBlocked() {
  74.         board("" +
  75.                 "mX...\n" +
  76.                 ".....\n" +
  77.                 "...0.\n" +
  78.                 "..0.0\n" +
  79.                 "...0."
  80.         );
  81.         check(move(1, 0));
  82.     }
  83.  
  84.     @Test
  85.     void avoidExplosion() {
  86.         board("" +
  87.                 "b..0.\n" +
  88.                 "XmX..\n" +
  89.                 "..X..\n" +
  90.                 "..X..\n" +
  91.                 "..X.."
  92.         );
  93.         addBomb().timer(2);
  94.         check(move(1, 1));
  95.     }
  96.  
  97.     @Test
  98.     void avoidExplosion2() {
  99.         board("" +
  100.                 ".....\n" +
  101.                 "mX...\n" +
  102.                 ".0...\n" +
  103.                 "X....\n" +
  104.                 "....."
  105.         );
  106.         addBomb(1, 0, 3);
  107.         check(move(0, 0));
  108.     }
  109.  
  110.     @Test
  111.     void cantGoThroughBomb() {
  112.         board("" +
  113.                 "mX...\n" +
  114.                 ".....\n" +
  115.                 ".....\n" +
  116.                 ".....\n" +
  117.                 "....0"
  118.         );
  119.         addBomb(1, 0, 3);
  120.         check(bomb(0, 0));
  121.     }
  122.  
  123.     @Test
  124.     void dontBlockYourself() {
  125.         board("" +
  126.                 ".....\n" +
  127.                 "mX...\n" +
  128.                 ".0...\n" +
  129.                 "0....\n" +
  130.                 "....."
  131.         );
  132.         checkForbidden(bomb(2, 0));
  133.     }
  134.  
  135.     @Test
  136.     void bombChain() {
  137.         board("" +
  138.                 "0.X..\n" +
  139.                 "X.X..\n" +
  140.                 ".mX..\n" +
  141.                 ".....\n" +
  142.                 ".....\n" +
  143.                 ".....\n" +
  144.                 ".....\n" +
  145.                 "....."
  146.         );
  147.         addBomb(height() - 1, 1, 2);
  148.         addBomb(height() - 2, 1, 8).range(20);
  149.         checkForbidden(move(1, 1));
  150.     }
  151.  
  152.     @Test
  153.     void dontIdle() {
  154.         board("" +
  155.                 "0mX..\n" +
  156.                 ".....\n" +
  157.                 ".....\n" +
  158.                 ".....\n" +
  159.                 ".....\n" +
  160.                 ".....\n" +
  161.                 ".....\n" +
  162.                 "0...."
  163.         );
  164.         check(bomb(1, 1));
  165.     }
  166.  
  167.     @Test
  168.     void testBug2() {
  169.         board("" +
  170.                 "...0\n" +
  171.                 "0.0.\n" +
  172.                 "X.X.\n" +
  173.                 "....\n" +
  174.                 ".0.."
  175.         );
  176.         me(1, 1);
  177.         addBomb(2, 1, 8);
  178.         check(bomb(0, 1));
  179.     }
  180.  
  181.     @Test
  182.     void stealScore() {
  183.         board("" +
  184.                 "0...\n" +
  185.                 "....\n" +
  186.                 "....\n" +
  187.                 "....\n" +
  188.                 "0..."
  189.         );
  190.         me(0, 1);
  191.         addBomb(0, 2, 8).ownerId(1);
  192.         check(bomb(1, 1));
  193.     }
  194.  
  195.     @Test
  196.     void testBug3() {
  197.         board("" +
  198.                 "...000.000...\n" +
  199.                 ".X.X0X.X0X.X.\n" +
  200.                 "00.00...00000\n" +
  201.                 "0X.X0X.X0X.X0\n" +
  202.                 "0...00.000.00\n" +
  203.                 ".X.X0X.X0X.X.\n" +
  204.                 ".....0.000.00\n" +
  205.                 ".X.X0X.X0X.X0\n" +
  206.                 "........00000\n" +
  207.                 ".X.X0X.X0X.X.\n" +
  208.                 "....00.000..."
  209.         );
  210.         me(6, 2);
  211.         addBomb(6, 2, 4);
  212.         addBomb(4, 3, 1);
  213.         checkForbidden(move(6, 2));
  214.     }
  215.  
  216.     @Test
  217.     void dontIdle2() {
  218.         round(0);
  219.         board("" +
  220.                 "m.0..\n" +
  221.                 ".X...\n" +
  222.                 "0....\n" +
  223.                 ".....\n" +
  224.                 "....."
  225.         );
  226.         checkForbidden(move(0, 0));
  227.     }
  228.  
  229.     @Test
  230.     void dontIdle3() {
  231.         board("" +
  232.                 "m....\n" +
  233.                 ".....\n" +
  234.                 ".....\n" +
  235.                 ".....\n" +
  236.                 "....."
  237.         );
  238.         addBomb(0, 0, 8);
  239.         checkForbidden(move(0, 0));
  240.     }
  241.  
  242.     @Test
  243.     void dontIdle4() {
  244.         board("" +
  245.                 "...00...00m..\n" +
  246.                 ".X.X.X0X.X.X.\n" +
  247.                 "..0.......0..\n" +
  248.                 ".X0X.X0X.X0X.\n" +
  249.                 "..0.......0..\n" +
  250.                 "0X.X.X.X.X.X0\n" +
  251.                 "..0.......0..\n" +
  252.                 ".X0X.X0X.X0X.\n" +
  253.                 "..0.......00.\n" +
  254.                 ".X.X.X0X.X.X.\n" +
  255.                 "..000...00..."
  256.         );
  257.         me(0, width() - 3).bombRange(3);
  258.         addBomb(0, width() - 3, 5);
  259.         checkForbidden(move(0, width() - 3));
  260.     }
  261.  
  262.     @Test
  263.     void considerBombsLeft() {
  264.         board("" +
  265.                 "0m...\n" +
  266.                 ".....\n" +
  267.                 ".....\n" +
  268.                 ".....\n" +
  269.                 ".....\n" +
  270.                 "0...."
  271.         );
  272.         me().bombsLeft(0);
  273.         check(move(0, 1));
  274.     }
  275.  
  276.     @Test
  277.     void dontBlowUpBonuses() {
  278.         board("" +
  279.                 "0Rm..\n" +
  280.                 "XX...\n" +
  281.                 ".....\n" +
  282.                 ".....\n" +
  283.                 ".....\n" +
  284.                 "0...."
  285.         );
  286.         checkForbidden(bomb(1, 2));
  287.     }
  288.  
  289.     @Test
  290.     void dontBlowUpBonuses2() {
  291.         board("" +
  292.                 "0Rm..\n" +
  293.                 "XX...\n" +
  294.                 ".....\n" +
  295.                 ".....\n" +
  296.                 ".....\n" +
  297.                 "....."
  298.         );
  299.         check(move(0, 1));
  300.     }
  301.  
  302.     @Test
  303.     void bugWithBonuses() {
  304.         board("" +
  305.                 ".0...\n" +
  306.                 "0m...\n" +
  307.                 "XRX..\n" +
  308.                 "X.X..\n" +
  309.                 "X.X..\n" +
  310.                 "....."
  311.         );
  312.         addBomb(1, 2, 3);
  313.         checkForbidden(bomb(2, 1));
  314.     }
  315.  
  316.     @Test
  317.     void enemiesAreDangerous() {
  318.         board("" +
  319.                 "0m0..\n" +
  320.                 ".e...\n" +
  321.                 ".....\n" +
  322.                 ".....\n" +
  323.                 ".....\n" +
  324.                 "....."
  325.         );
  326.         me().bombsLeft(0);
  327.         check(move(1, 1));
  328.     }
  329.  
  330.     @Test
  331.     void goThrough() {
  332.         board("" +
  333.                 ".me..\n" +
  334.                 ".X...\n" +
  335.                 ".....\n" +
  336.                 ".....\n" +
  337.                 "....0"
  338.         );
  339.         check(move(0, 2));
  340.     }
  341.  
  342.     @Test
  343.     void dontSuicide() {
  344.         board("" +
  345.                 ".....\n" +
  346.                 ".X.X.\n" +
  347.                 ".....\n" +
  348.                 ".XXX0\n" +
  349.                 ".....\n" +
  350.                 "....."
  351.         );
  352.         me(2, 1);
  353.         enemy(2, 2);
  354.         addBomb(0, 2, 2).range(10);
  355.         checkForbidden(move(2, 2));
  356.     }
  357.  
  358.     @Test
  359.     void testBug4() {
  360.         board("" +
  361.                 ".............\n" +
  362.                 ".X.X.X.X.X.X.\n" +
  363.                 ".............\n" +
  364.                 ".X.X.X.X.X0X.\n" +
  365.                 ".............\n" +
  366.                 ".X.X.X.X.X.X.\n" +
  367.                 ".............\n" +
  368.                 ".X.X.X.X.X0X.\n" +
  369.                 ".............\n" +
  370.                 ".X.X.X.X.X.X.\n" +
  371.                 "............."
  372.         );
  373.         me(6, 6);
  374.         addBomb(6, 10, 2).range(2);
  375.         addBomb(6, 10, 2).range(5);
  376.         checkForbidden(move(6, 6));
  377.     }
  378.  
  379.     @Test
  380.     void dontSuicide2() {
  381.         board("" +
  382.                 "..0..\n" +
  383.                 ".0.0.\n" +
  384.                 ".X.X.\n" +
  385.                 "...0."
  386.         );
  387.         me(2, 2);
  388.         addBomb(2, 2, 6);
  389.         addBomb(3, 0, 3).range(5);
  390.         checkForbidden(move(1, 2));
  391.     }
  392.  
  393.     @Test
  394.     void moveToExplosion() {
  395.         board("" +
  396.                 ".....0\n" +
  397.                 "......\n" +
  398.                 "......\n" +
  399.                 "......"
  400.         );
  401.         me(0, 0);
  402.         addBomb(1, 1, 1);
  403.         check(move(0, 1));
  404.     }
  405.  
  406.     @Test
  407.     void enemyDiesRightNow() {
  408.         board("" +
  409.                 "b...0.\n" +
  410.                 "...0.0\n" +
  411.                 "...X.X\n" +
  412.                 "...X.X\n" +
  413.                 "...X.X\n" +
  414.                 "...X.X\n" +
  415.                 "...X.X\n" +
  416.                 "...X.X\n" +
  417.                 "...XmX\n" +
  418.                 "...X.X\n" +
  419.                 "...X.X\n" +
  420.                 "...X.X\n" +
  421.                 "...0.0"
  422.         );
  423.         addBomb().timer(1);
  424.         enemy(0, 1).bombRange(20);
  425.         check(move(7, width() - 2));
  426.     }
  427.  
  428.     @Test
  429.     void anyLastWords() {
  430.         board("" +
  431.                 ".....\n" +
  432.                 ".....\n" +
  433.                 ".....\n" +
  434.                 "....."
  435.         );
  436.         me(1, 1);
  437.         addBomb(0, 1, 1);
  438.         addBomb(2, 1, 1);
  439.         addBomb(1, 0, 1);
  440.         addBomb(1, 2, 1);
  441.         check(bomb(1, 1));
  442.     }
  443.  
  444.     @Test
  445.     void dontSuicide3() {
  446.         board("" +
  447.                 "....0\n" +
  448.                 "X.X..\n" +
  449.                 "XXX..\n" +
  450.                 "....."
  451.         );
  452.         me(1, 1);
  453.         addBomb(0, 0, 2);
  454.         enemy(0, 1);
  455.         checkForbidden(move(0, 1));
  456.     }
  457.  
  458.     @Test
  459.     void dontSuicide4() {
  460.         round(1);
  461.         board("" +
  462.                 "..00.0.0.00..\n" +
  463.                 ".X.X.X0X.X.X.\n" +
  464.                 "00.000.000.0.\n" +
  465.                 ".X.X.X0X.X.X.\n" +
  466.                 "0..00...00..0\n" +
  467.                 ".X0X.X0X.X0X.\n" +
  468.                 "0..00...00..0\n" +
  469.                 ".X.X.X0X.X.X.\n" +
  470.                 ".0.000.000.0.\n" +
  471.                 ".X.X.X0X.X.X.\n" +
  472.                 "..00.0.0.00.."
  473.         );
  474.         me(3, 12).bombsLeft(0);
  475.         addBomb(0, 12, 2);
  476.         checkForbidden(move(2, 12));
  477.     }
  478.  
  479.     @Test
  480.     void trickyCaseWithBonus() {
  481.         board("" +
  482.                 "X....\n" +
  483.                 "0.0.."
  484.         );
  485.  
  486.         me(0, 1);
  487.         addBomb(0, 1, 4);
  488.         bonus(0, 2, RANGE);
  489.         checkForbidden(move(0, 1));
  490.     }
  491.  
  492.     @Test
  493.     void efficientBombing() {
  494.         board("" +
  495.                 ".0...\n" +
  496.                 "0.0..\n" +
  497.                 ".m...\n" +
  498.                 "....."
  499.         );
  500.  
  501.         check(move(1, 1));
  502.     }
  503.  
  504.     @Test
  505.     void testBug5() {
  506.         round(25);
  507.         board("" +
  508.                 ".....0.0.....\n" +
  509.                 ".X.X0X.X0X.X.\n" +
  510.                 ".00..0.0..00.\n" +
  511.                 ".X.X0X0X0X.X.\n" +
  512.                 "00..0.0.0..00\n" +
  513.                 "0X0X0X.X0X0X0\n" +
  514.                 "00..0.0.0..00\n" +
  515.                 ".X.X0X0X0X.X.\n" +
  516.                 "00...0.0..00.\n" +
  517.                 ".X.X0X.X0X.X.\n" +
  518.                 ".......0....."
  519.         );
  520.         me(0, 10).bombRange(2).bombsLeft(1);
  521.         checkForbidden(bomb(0, 9));
  522.     }
  523.  
  524.     @Test
  525.     void depthBug() {
  526.         board("" +
  527.                 "0....\n" +
  528.                 ".....\n" +
  529.                 ".....\n" +
  530.                 "....."
  531.         );
  532.         depth(3);
  533.         me(0, 1);
  534.         checkForbidden(move(0, 1));
  535.     }
  536.  
  537.     @Test
  538.     void bombCooldownBug() {
  539.         board("" +
  540.                 "0....\n" +
  541.                 ".0...\n" +
  542.                 ".....\n" +
  543.                 "....."
  544.         );
  545.         depth(2);
  546.         me(0, 2).bombsLeft(0);
  547.         addBomb(height() - 1, width() - 1, 1);
  548.         check(move(0, 1));
  549.     }
  550.  
  551.     @Test
  552.     void boxDestruction() {
  553.         board("" +
  554.                 "0X..0\n" +
  555.                 "bX...\n" +
  556.                 ".m...\n" +
  557.                 "....."
  558.         );
  559.         depth(2);
  560.         addBomb().timer(1);
  561.         checkForbidden(move(2, 0));
  562.     }
  563.  
  564.     @Test
  565.     void rangeBonus() {
  566.         board("" +
  567.                 ".....0\n" +
  568.                 "0X....\n" +
  569.                 ".X....\n" +
  570.                 ".X0...\n" +
  571.                 ".X...."
  572.         );
  573.         depth(2);
  574.         me(0, 1);
  575.         bonus(0, 2, RANGE);
  576.         check(move(0, 2));
  577.     }
  578.  
  579.     @Test
  580.     void avoidBombs() {
  581.         board("" +
  582.                 "..\n" +
  583.                 ".."
  584.         );
  585.         depth(2);
  586.         me(0, 1);
  587.         addBomb(0, 0, 3);
  588.         check(move(1, 1));
  589.     }
  590.  
  591.     @Test
  592.     void testBugWithBombsLeft() {
  593.         round(8);
  594.         board("" +
  595.                 ".....0.0.....\n" +
  596.                 ".X.X0X.X0X.X.\n" +
  597.                 "0000.....0000\n" +
  598.                 "0X.X.X.X.X.X0\n" +
  599.                 ".0.........0.\n" +
  600.                 "0X.X.X.X.X.X0\n" +
  601.                 ".0.........0.\n" +
  602.                 "0X.X.X.X.X.X0\n" +
  603.                 "0000.....0000\n" +
  604.                 ".X.X0X.X0X.X.\n" +
  605.                 ".....0.0....."
  606.         );
  607.         depth(3);
  608.         me(0, 9).bombRange(2).bombsLeft(0);
  609.         addBomb(0, 12, 1).range(2);
  610.         check(move(0, 8));
  611.     }
  612.  
  613.     @Test(enabled = false)
  614.     void enemyCanMove() {
  615.         board("" +
  616.                 "bem...\n" +
  617.                 ".X.X..\n" +
  618.                 ".X.X..\n" +
  619.                 ".X.X..\n" +
  620.                 ".X.X..\n" +
  621.                 "..0..."
  622.         );
  623.         addBomb().timer(5);
  624.         enemy().bombRange(20);
  625.         check(move(0, 3));
  626.     }
  627.  
  628.     @Test
  629.     void testBug862954821() {
  630.         round(17);
  631.         board("" +
  632.                 ".............\n" +
  633.                 ".X.X0X0X.X.X.\n" +
  634.                 "..0.00.00.0.0\n" +
  635.                 "0X0X0X.X0X0X0\n" +
  636.                 "0.0..0.0..0.0\n" +
  637.                 ".X0X.X.X.X0X.\n" +
  638.                 "0.0..0.0..0.0\n" +
  639.                 "0X0X0X.X0X0X0\n" +
  640.                 "0.0.00.00.0.0\n" +
  641.                 ".X.X.X0X.X.X.\n" +
  642.                 "............."
  643.         );
  644.         me(1, 0).bombRange(2).bombsLeft(0);
  645.         enemy(10, 9).bombRange(2).bombsLeft(0);
  646.         enemy(1, 8).bombRange(2).bombsLeft(1);
  647.         enemy(10, 5).bombRange(2).bombsLeft(0);
  648.         addBomb(0, 4, 1).range(2).ownerId(0);
  649.         addBomb(9, 12, 5).range(2).ownerId(1);
  650.         addBomb(9, 2, 5).range(2).ownerId(3);
  651.         bonus(2, 0, RANGE);
  652.         bonus(10, 6, COUNT);
  653.         bonus(0, 6, COUNT);
  654.         checkForbidden(move(1, 0));
  655.     }
  656.  
  657.     @Test
  658.     void collectBonuses() {
  659.         board("" +
  660.                 "Rm....\n" +
  661.                 ".X....\n" +
  662.                 "......\n" +
  663.                 "......\n" +
  664.                 ".....0"
  665.         );
  666.         check(move(0, 0));
  667.     }
  668.  
  669.     @Test
  670.     void enemyDoesntSuicide() {
  671.         board("" +
  672.                 "b..X..\n" +
  673.                 ".X.X..\n" +
  674.                 ".X.X..\n" +
  675.                 ".X.X..\n" +
  676.                 ".....0"
  677.         );
  678.         me(0, 2);
  679.         addBomb().timer(3);
  680.         enemy(0, 2).bombRange(20);
  681.         check(move(1, 2));
  682.     }
  683.  
  684.     @Test
  685.     void testBug1550130457() {
  686.         round(43);
  687.         board("" +
  688.                 ".......0.....\n" +
  689.                 ".X.X.X.X0X.X.\n" +
  690.                 ".....0.000.0.\n" +
  691.                 ".X.X0X0X0X.X.\n" +
  692.                 "....00.000...\n" +
  693.                 ".X.X.X0X.X.X.\n" +
  694.                 "..0000.00....\n" +
  695.                 ".X.X0X0X0X.X.\n" +
  696.                 ".0.000.0.....\n" +
  697.                 ".X.X0X.X.X.X.\n" +
  698.                 ".....0......."
  699.         );
  700.         enemy(4, 3).bombRange(4).bombsLeft(1).id(0);
  701.         me(8, 8).bombRange(3).bombsLeft(3).id(1);
  702.         addBomb(0, 4, 2).range(3).ownerId(0);
  703.         addBomb(2, 2, 6).range(3).ownerId(0);
  704.         addBomb(10, 8, 6).range(3).ownerId(1);
  705.         bonus(3, 0, COUNT);
  706.         bonus(7, 0, COUNT);
  707.         bonus(3, 12, COUNT);
  708.         bonus(4, 10, RANGE);
  709.         bonus(5, 2, RANGE);
  710.         bonus(5, 10, RANGE);
  711.         bonus(6, 9, RANGE);
  712.         check(bomb(8, 9));
  713.     }
  714.  
  715.     @Test
  716.     void testBug1227684981() {
  717.         round(65);
  718.         board("" +
  719.                 ".........00..\n" +
  720.                 ".X.X.X.X.X0X.\n" +
  721.                 "..........0..\n" +
  722.                 ".X.X.X.X.X.X.\n" +
  723.                 ".............\n" +
  724.                 ".X.X.X.X.X.X.\n" +
  725.                 "....0........\n" +
  726.                 ".X.X.X.X.X.X.\n" +
  727.                 "..0..........\n" +
  728.                 ".X0X.X.X.X.X.\n" +
  729.                 "..00..0......"
  730.         );
  731.         enemy(4, 2).bombRange(8).bombsLeft(3).id(0);
  732.         me(4, 6).bombRange(8).bombsLeft(5).id(1);
  733.         addBomb(3, 4, 6).range(8).ownerId(0);
  734.         addBomb(6, 6, 6).range(8).ownerId(1);
  735.         addBomb(4, 4, 7).range(8).ownerId(0);
  736.         bonus(10, 9, COUNT);
  737.         bonus(0, 3, COUNT);
  738.         bonus(3, 10, RANGE);
  739.         bonus(7, 2, RANGE);
  740.         bonus(7, 4, COUNT);
  741.         bonus(8, 3, RANGE);
  742.         bonus(2, 9, RANGE);
  743.         bonus(3, 8, COUNT);
  744.         checkForbidden(bomb(4, 7));
  745.     }
  746.  
  747.     @Test
  748.     void scoreCalculationBug() {
  749.         board("" +
  750.                 ".m....\n" +
  751.                 "0.....\n" +
  752.                 "......\n" +
  753.                 "......\n" +
  754.                 "......"
  755.         );
  756.         depth(1);
  757.         addBomb(0, 0, 5).ownerId(1);
  758.         addBomb(1, 1, 5).ownerId(0);
  759.         check(move(0, 2));
  760.     }
  761.  
  762.     @Test
  763.     void preventEnemyFromScoring() {
  764.         board("" +
  765.                 ".m0...\n" +
  766.                 "......\n" +
  767.                 "......\n" +
  768.                 "......\n" +
  769.                 "......"
  770.         );
  771.         depth(1);
  772.         addBomb(0, 0, 5).ownerId(1);
  773.         addBomb(0, 3, 5).ownerId(0);
  774.         check(bomb(1, 1));
  775.     }
  776.  
  777.     @Test
  778.     void scoreCalculationBug2() {
  779.         board("" +
  780.                 "b0mX..\n" +
  781.                 "......\n" +
  782.                 "......\n" +
  783.                 "......\n" +
  784.                 ".....0"
  785.         );
  786.         depth(1);
  787.         addBomb().timer(3).ownerId(1);
  788.         check(move(1, 2));
  789.     }
  790.  
  791.     @Test
  792.     void collectBonuses2() {
  793.         board("" +
  794.                 "m.....\n" +
  795.                 "......\n" +
  796.                 "......\n" +
  797.                 "......\n" +
  798.                 "R....."
  799.         );
  800.         depth(1);
  801.         check(move(1, 0));
  802.     }
  803.  
  804.     @Test
  805.     void testBug391438578() {
  806.         round(25);
  807.         board("" +
  808.                 ".............\n" +
  809.                 ".X.X.X0X.X.X.\n" +
  810.                 ".0.....0....0\n" +
  811.                 ".X.X.X0X.X.X.\n" +
  812.                 ".00..0.00..0.\n" +
  813.                 ".X0X.X.X.X0X.\n" +
  814.                 ".00.00.00..0.\n" +
  815.                 ".X.X.X0X.X.X.\n" +
  816.                 "00...0.0....0\n" +
  817.                 ".X.X.X0X.X.X.\n" +
  818.                 "............."
  819.         );
  820.         me(4, 4).bombRange(3).bombsLeft(0).id(0);
  821.         enemy(9, 8).bombRange(2).bombsLeft(0).id(1);
  822.         enemy(0, 9).bombRange(2).bombsLeft(0).id(2);
  823.         addBomb(2, 11, 1).range(2).ownerId(2);
  824.         addBomb(2, 2, 2).range(2).ownerId(0);
  825.         addBomb(6, 10, 2).range(2).ownerId(1);
  826.         addBomb(4, 10, 4).range(2).ownerId(2);
  827.         addBomb(8, 10, 6).range(2).ownerId(1);
  828.         bonus(2, 0, COUNT);
  829.         checkForbidden(move(4, 3));
  830.     }
  831.  
  832.     @Test
  833.     void testBug166046037() {
  834.         round(44);
  835.         board("" +
  836.                 ".............\n" +
  837.                 ".X.X.X.X.X.X.\n" +
  838.                 ".......0.....\n" +
  839.                 ".X.X.X0X.X.X.\n" +
  840.                 ".......0.....\n" +
  841.                 ".X.X.X.X.X.X.\n" +
  842.                 ".0...0.0.....\n" +
  843.                 ".X.X.X0X.X.X.\n" +
  844.                 "0......0.....\n" +
  845.                 ".X.X.X.X.X.X.\n" +
  846.                 "............."
  847.         );
  848.         me(4, 3).bombRange(3).bombsLeft(3).id(0).maxBombs(4);
  849.         enemy(7, 4).bombRange(2).bombsLeft(2).id(1);
  850.         enemy(6, 6).bombRange(3).bombsLeft(1).id(2);
  851.         addBomb(2, 6, 1).range(2).ownerId(2);
  852.         addBomb(6, 0, 4).range(3).ownerId(0);
  853.         bonus(2, 12, COUNT);
  854.         bonus(6, 11, COUNT);
  855.         bonus(8, 12, COUNT);
  856.         bonus(6, 8, RANGE);
  857.         bonus(4, 11, COUNT);
  858.         bonus(4, 8, RANGE);
  859.         bonus(6, 4, RANGE);
  860.         bonus(9, 6, RANGE);
  861.         bonus(1, 6, RANGE);
  862.         bonus(5, 2, COUNT);
  863.         bonus(8, 1, COUNT);
  864.         checkForbidden(move(4, 2));
  865.     }
  866.  
  867.     @Test
  868.     void testBug1789771412() {
  869.         round(25);
  870.         board("" +
  871.                 ".............\n" +
  872.                 ".X.X.X0X.X.X.\n" +
  873.                 ".0.....0....0\n" +
  874.                 ".X.X.X0X.X.X.\n" +
  875.                 ".00..0.00..0.\n" +
  876.                 ".X0X.X.X.X0X.\n" +
  877.                 ".00..0.00..0.\n" +
  878.                 ".X.X.X0X.X.X.\n" +
  879.                 "00.....0....0\n" +
  880.                 ".X.X.X0X.X.X.\n" +
  881.                 "............."
  882.         );
  883.         me(6, 4).bombRange(4).bombsLeft(0).maxBombs(1).id(0);
  884.         enemy(8, 4).bombRange(2).bombsLeft(1).maxBombs(1).id(1);
  885.         enemy(0, 9).bombRange(2).bombsLeft(0).maxBombs(2).id(2);
  886.         addBomb(2, 11, 1).range(2).ownerId(2);
  887.         addBomb(2, 2, 2).range(2).ownerId(0);
  888.         addBomb(4, 10, 4).range(2).ownerId(2);
  889.         bonus(2, 0, COUNT);
  890.         bonus(8, 11, COUNT);
  891.         checkForbidden(move(6, 3));
  892.     }
  893.  
  894.     @Test
  895.     void testBug1480314834() {
  896.         round(12);
  897.         board("" +
  898.                 "...0.....0...\n" +
  899.                 ".X0X.X.X.X0X.\n" +
  900.                 "000..000..000\n" +
  901.                 ".X0X0X.X0X0X.\n" +
  902.                 "000000.000000\n" +
  903.                 ".X.X.X.X.X.X.\n" +
  904.                 "000000.000000\n" +
  905.                 ".X0X0X.X0X0X.\n" +
  906.                 "000..000..000\n" +
  907.                 ".X0X.X.X.X0X.\n" +
  908.                 "..00.....0..."
  909.         );
  910.         me(0, 1).bombRange(2).bombsLeft(0).maxBombs(1).id(0);
  911.         enemy(10, 10).bombRange(2).bombsLeft(2).maxBombs(2).id(1);
  912.         enemy(0, 10).bombRange(2).bombsLeft(2).maxBombs(2).id(2);
  913.         addBomb(1, 0, 4).range(2).ownerId(0);
  914.         bonus(0, 2, COUNT);
  915.         check(move(0, 2));
  916.     }
  917.  
  918.     @Test
  919.     void moveThroughExplodedBomb() {
  920.         board("" +
  921.                 ".m0\n" +
  922.                 "bX.\n" +
  923.                 "X.."
  924.         );
  925.         depth(1);
  926.         addBomb().timer(2);
  927.         check(bomb(0, 1));
  928.     }
  929.  
  930.     @Test
  931.     void moveThroughExplodedBomb2() {
  932.         board("" +
  933.                 ".m0\n" +
  934.                 "bX.\n" +
  935.                 "X.."
  936.         );
  937.         depth(1);
  938.         addBomb().timer(8);
  939.         check(move(0, 1));
  940.     }
  941.  
  942.     @Test
  943.     void moveThroughExplodedBomb3() {
  944.         board("" +
  945.                 ".m0\n" +
  946.                 "bX.\n" +
  947.                 "X.."
  948.         );
  949.         depth(1);
  950.         addBomb().timer(7);
  951.         check(bomb(0, 1));
  952.     }
  953.  
  954.     @Test
  955.     void testBug247272092() {
  956.         round(27);
  957.         board("" +
  958.                 ".............\n" +
  959.                 ".X.X.X.X.X.X.\n" +
  960.                 ".00..000..000\n" +
  961.                 ".X0X0X.X0X0X.\n" +
  962.                 "000000.000000\n" +
  963.                 ".X.X.X.X.X.X.\n" +
  964.                 "000000.000000\n" +
  965.                 ".X0X0X.X0X0X.\n" +
  966.                 "000..000..00.\n" +
  967.                 ".X0X.X.X.X.X.\n" +
  968.                 "..00........."
  969.         );
  970.         me(1, 2).bombRange(3).bombsLeft(2).maxBombs(3).id(0);
  971.         addBomb(2, 0, 3).range(3).ownerId(0);
  972.         checkForbidden(bomb(1, 2));
  973.     }
  974.  
  975.     @Test
  976.     void moveYourAss() {
  977.         board("" +
  978.                 ".0....\n" +
  979.                 "mX....\n" +
  980.                 "......\n" +
  981.                 "......\n" +
  982.                 ".....b"
  983.         );
  984.         depth(3);
  985.         me().bombsLeft(0);
  986.         addBomb().timer(8);
  987.         check(move(0, 0));
  988.     }
  989.  
  990.     @Test
  991.     void preferBoxWithBonus() {
  992.         board("" +
  993.                 "m.0...\n" +
  994.                 ".X....\n" +
  995.                 "2.....\n" +
  996.                 "......\n" +
  997.                 "......"
  998.         );
  999.         depth(3);
  1000.         check(move(1, 0));
  1001.     }
  1002.  
  1003.     @Test
  1004.     void testBug1808556513() {
  1005.         round(14);
  1006.         board("" +
  1007.                 "...2.0.0.21..\n" +
  1008.                 ".X1X0X.X0X1X.\n" +
  1009.                 ".211.....11..\n" +
  1010.                 "0X1X2X.X2X1X.\n" +
  1011.                 "..022...220..\n" +
  1012.                 ".X.X1X.X1X.X.\n" +
  1013.                 "..022...220..\n" +
  1014.                 ".X1X2X.X2X1X.\n" +
  1015.                 "..11.....11..\n" +
  1016.                 ".X1X0X.X0X1X.\n" +
  1017.                 "..12.0.0.21.."
  1018.         );
  1019.         enemy(0, 2).bombRange(3).bombsLeft(0).maxBombs(1).id(0);
  1020.         enemy(8, 11).bombRange(2).bombsLeft(1).maxBombs(2).id(1);
  1021.         enemy(2, 11).bombRange(2).bombsLeft(1).maxBombs(2).id(2);
  1022.         me(8, 1).bombRange(2).bombsLeft(1).maxBombs(2).id(3);
  1023.         addBomb(2, 0, 5).range(2).ownerId(0);
  1024.         addBomb(10, 12, 6).range(2).ownerId(1);
  1025.         addBomb(0, 12, 6).range(2).ownerId(2);
  1026.         addBomb(10, 0, 6).range(2).ownerId(3);
  1027.         check(move(8, 0));
  1028.     }
  1029.  
  1030.     @Test
  1031.     void enemyWontPlaceBombForYou() {
  1032.         round(9);
  1033.         board("" +
  1034.                 ".............\n" +
  1035.                 ".X.X2X1X2X.X.\n" +
  1036.                 ".11210.01211.\n" +
  1037.                 "1X.X.X2X.X.X1\n" +
  1038.                 "012.20.02.210\n" +
  1039.                 ".X.X0X.X0X.X.\n" +
  1040.                 "012.20.02.210\n" +
  1041.                 "1X.X.X2X.X.X1\n" +
  1042.                 "211210.01211.\n" +
  1043.                 ".X.X2X1X2X.X.\n" +
  1044.                 "............."
  1045.         );
  1046.         enemy(0, 3).bombRange(2).bombsLeft(1).maxBombs(1).id(0);
  1047.         enemy(9, 10).bombRange(2).bombsLeft(1).maxBombs(1).id(1);
  1048.         me(0, 8).bombRange(2).bombsLeft(1).maxBombs(1).id(2);
  1049.         bonus(2, 0, COUNT);
  1050.         bonus(2, 12, COUNT);
  1051.         bonus(8, 12, COUNT);
  1052.         checkForbidden(move(0, 7));
  1053.     }
  1054.  
  1055.     @Test
  1056.     void testBug1593516110() {
  1057.         round(89);
  1058.         board("" +
  1059.                 ".............\n" +
  1060.                 ".X.X.X.X.X.X.\n" +
  1061.                 ".............\n" +
  1062.                 ".X.X.X.X.X.X.\n" +
  1063.                 "01...........\n" +
  1064.                 ".X.X.X.X.X.X.\n" +
  1065.                 "0....0.......\n" +
  1066.                 ".X.X.X.X.X.X.\n" +
  1067.                 ".............\n" +
  1068.                 ".X.X.X.X.X.X.\n" +
  1069.                 "............."
  1070.         );
  1071.         enemy(8, 6).bombRange(4).bombsLeft(7).maxBombs(7).id(0);
  1072.         enemy(5, 2).bombRange(7).bombsLeft(3).maxBombs(5).id(1);
  1073.         me(6, 3).bombRange(9).bombsLeft(8).maxBombs(9).id(2);
  1074.         addBomb(6, 1, 3).range(7).ownerId(1);
  1075.         addBomb(6, 2, 4).range(7).ownerId(1);
  1076.         addBomb(4, 2, 4).range(9).ownerId(2);
  1077.         bonus(2, 1, RANGE);
  1078.         bonus(3, 0, RANGE);
  1079.         bonus(9, 6, RANGE);
  1080.         bonus(7, 6, COUNT);
  1081.         bonus(7, 0, RANGE);
  1082.         checkForbidden(move(6, 4));
  1083.     }
  1084.  
  1085.     @Test
  1086.     void scoreCalculationBug3() {
  1087.         board("" +
  1088.                 "bm0\n" +
  1089.                 "..."
  1090.         );
  1091.         depth(3);
  1092.         addBomb().timer(3).ownerId(1);
  1093.         check(bomb(1, 1));
  1094.     }
  1095.  
  1096.     @Test
  1097.     void testBoxDestruction() {
  1098.         board("" +
  1099.                 "00m..\n" +
  1100.                 ".bX..\n" +
  1101.                 "..X..\n" +
  1102.                 "..X.."
  1103.         );
  1104.         depth(3);
  1105.         addBomb().timer(8);
  1106.         check(bomb(0, 3));
  1107.     }
  1108.  
  1109.     @Test
  1110.     void testBoxWithBonusDestruction() {
  1111.         board("" +
  1112.                 "01m..\n" +
  1113.                 ".bX..\n" +
  1114.                 "..X..\n" +
  1115.                 "..X.."
  1116.         );
  1117.         depth(3);
  1118.         addBomb().timer(8);
  1119.         checkForbidden(bomb(0, 3));
  1120.     }
  1121.  
  1122.     @Test
  1123.     void boxWithBonusDestruction() {
  1124.         board("" +
  1125.                 "Xm1b.\n" +
  1126.                 "..X..\n" +
  1127.                 "..X..\n" +
  1128.                 "..X..\n" +
  1129.                 "0...."
  1130.         );
  1131.         depth(3);
  1132.         addBomb().timer(1);
  1133.         check(move(0, 1));
  1134.     }
  1135.  
  1136.     @Test
  1137.     void testBug1790060502() {
  1138.         round(63);
  1139.         board("" +
  1140.                 ".............\n" +
  1141.                 ".X.X.X.X.X.X.\n" +
  1142.                 ".............\n" +
  1143.                 ".X.X.X.X.X.X2\n" +
  1144.                 ".............\n" +
  1145.                 ".X.X1X.X.X.X.\n" +
  1146.                 ".............\n" +
  1147.                 "2X.X0X.X.X.X2\n" +
  1148.                 "020.2........\n" +
  1149.                 ".X.X.X.X.X.X.\n" +
  1150.                 "..1.12......."
  1151.         );
  1152.         enemy(4, 2).bombRange(5).bombsLeft(2).maxBombs(4).id(0);
  1153.         enemy(8, 6).bombRange(5).bombsLeft(4).maxBombs(6).id(1);
  1154.         me(2, 12).bombRange(5).bombsLeft(4).maxBombs(5).id(2);
  1155.         addBomb(10, 7, 2).range(5).ownerId(1);
  1156.         addBomb(3, 0, 4).range(5).ownerId(0);
  1157.         addBomb(4, 0, 7).range(5).ownerId(0);
  1158.         addBomb(0, 12, 7).range(5).ownerId(2);
  1159.         addBomb(8, 5, 8).range(5).ownerId(1);
  1160.         bonus(6, 6, RANGE);
  1161.         bonus(7, 6, RANGE);
  1162.         bonus(6, 2, RANGE);
  1163.         bonus(0, 5, COUNT);
  1164.         bonus(3, 6, RANGE);
  1165.         checkForbidden(move(2, 12));
  1166.     }
  1167.  
  1168.     @Test
  1169.     void collectCountBonus() {
  1170.         board("" +
  1171.                 "....C\n" +
  1172.                 "...mX\n" +
  1173.                 "....0\n" +
  1174.                 "....."
  1175.         );
  1176.         depth(3);
  1177.         check(move(0, 3));
  1178.     }
  1179.  
  1180.     @Test
  1181.     void collectCountBonus2() {
  1182.         board("" +
  1183.                 "....0\n" +
  1184.                 "...mX\n" +
  1185.                 ".....\n" +
  1186.                 ".....\n" +
  1187.                 ".....\n" +
  1188.                 ".....\n" +
  1189.                 ".....\n" +
  1190.                 ".....\n" +
  1191.                 ".....\n" +
  1192.                 "....C"
  1193.         );
  1194.         depth(3);
  1195.         check(move(2, 3));
  1196.     }
  1197.  
  1198.     @Test
  1199.     void collectCountBonus3() {
  1200.         board("" +
  1201.                 "2XX1\n" +
  1202.                 "..m.\n" +
  1203.                 "....\n" +
  1204.                 "...."
  1205.         );
  1206.         depth(3);
  1207.         check(move(1, 1));
  1208.     }
  1209.  
  1210.     @Test
  1211.     void testBug1114226226() {
  1212.         round(79);
  1213.         board("" +
  1214.                 "..........1..\n" +
  1215.                 ".X.X.X.X.X.X.\n" +
  1216.                 ".........22.0\n" +
  1217.                 ".X.X.X.X.X.X2\n" +
  1218.                 "..........120\n" +
  1219.                 "2X.X.X.X.X.X2\n" +
  1220.                 ".............\n" +
  1221.                 "2X.X.X.X.X.X.\n" +
  1222.                 ".............\n" +
  1223.                 ".X.X.X.X.X.X.\n" +
  1224.                 "............."
  1225.         );
  1226.         me(4, 2).bombRange(7).bombsLeft(5).maxBombs(6).id(0);
  1227.         enemy(6, 11).bombRange(11).bombsLeft(2).maxBombs(4).id(1);
  1228.         addBomb(8, 10, 3).range(11).ownerId(1);
  1229.         addBomb(6, 0, 5).range(7).ownerId(0);
  1230.         addBomb(8, 12, 5).range(11).ownerId(1);
  1231.         bonus(3, 0, COUNT);
  1232.         bonus(2, 7, RANGE);
  1233.         bonus(4, 9, RANGE);
  1234.         bonus(10, 2, RANGE);
  1235.         checkForbidden(move(4, 1));
  1236.     }
  1237.  
  1238.     @Test
  1239.     void cooldownFactorBug() {
  1240.         board("" +
  1241.                 "C...\n" +
  1242.                 "Xm..\n" +
  1243.                 "....\n" +
  1244.                 "....\n" +
  1245.                 "....\n" +
  1246.                 "....\n" +
  1247.                 "0..."
  1248.         );
  1249.         depth(3);
  1250.         me().bombsLeft(10);
  1251.         check(move(2, 1));
  1252.     }
  1253.  
  1254.     @Test
  1255.     void dontIdleWithBombs() {
  1256.         board("" +
  1257.                 "0X..\n" +
  1258.                 "mX..\n" +
  1259.                 ".X..\n" +
  1260.                 ".X..\n" +
  1261.                 "....\n" +
  1262.                 "....\n" +
  1263.                 "...."
  1264.         );
  1265.         depth(3);
  1266.         me().bombsLeft(10).bombRange(20);
  1267.         check(bomb(2, 0));
  1268.     }
  1269.  
  1270.     @Test
  1271.     void scoreIdleFactor() {
  1272.         board("" +
  1273.                 "mX..\n" +
  1274.                 ".0..\n" +
  1275.                 "....\n" +
  1276.                 "....\n" +
  1277.                 "....\n" +
  1278.                 "....\n" +
  1279.                 "...."
  1280.         );
  1281.         depth(3);
  1282.         me().bombsLeft(10);
  1283.         check(bomb(1, 0));
  1284.     }
  1285. }
Advertisement
Add Comment
Please, Sign In to add comment