From: Scott Worley Date: Sun, 3 Jan 2016 19:51:56 +0000 (-0800) Subject: Print paths X-Git-Url: http://git.scottworley.com/slidingtile/commitdiff_plain/49358f3664c36c346dba758ae1b7da9106c42e3b?hp=5d2f7c7cebb5423fa9618a28871a81671c380041 Print paths --- diff --git a/sliding_tile_lib.cc b/sliding_tile_lib.cc index b43cbba..82402a5 100644 --- a/sliding_tile_lib.cc +++ b/sliding_tile_lib.cc @@ -118,3 +118,21 @@ std::vector Step::successors(std::shared_ptr shared_this) { } return suc; } + +std::ostream& operator<<(std::ostream& os, const Step& step) { + if (step.prev != nullptr) { + os << *step.prev; + signed char this_hole = step.board.hole(); + signed char prev_hole = step.prev->board.hole(); + os << int(step.board.board[prev_hole]) << " "; + switch (this_hole - prev_hole) { + case -1: os << "right"; break; + case 1: os << "left"; break; + case -BOARD_DIM: os << "down"; break; + case BOARD_DIM: os << "up"; break; + default: os << "somehow!"; break; + } + os << std::endl; + } + return os; +} diff --git a/sliding_tile_lib.h b/sliding_tile_lib.h index 0bd3da3..c926761 100644 --- a/sliding_tile_lib.h +++ b/sliding_tile_lib.h @@ -30,6 +30,7 @@ struct Step { std::vector successors(std::shared_ptr shared_this); static signed char adjacent[BOARD_SIZE][5]; }; +std::ostream& operator<<(std::ostream& os, const Step& step); #endif /* _SLIDING_TILE_LIB_H */ diff --git a/sliding_tile_lib_test.cc b/sliding_tile_lib_test.cc index aea4ab7..d57c7a4 100644 --- a/sliding_tile_lib_test.cc +++ b/sliding_tile_lib_test.cc @@ -3,6 +3,7 @@ #include "gtest/gtest.h" #include "gmock/gmock.h" #include +#include using testing::Field; using testing::ElementsAreArray; @@ -136,3 +137,23 @@ TEST(Step, FourSuccessors) { Field(&Step::board, Field(&Board::board, ElementsAreArray({1,0,3,4,5,2,6,7,8,9,10,11,12,13,14,15}))), Field(&Step::board, Field(&Board::board, ElementsAreArray({1,2,3,4,5,9,6,7,8,0,10,11,12,13,14,15}))))); } + +TEST(Step, Output) { + auto s1 = std::shared_ptr(new Step{{{1,2,3,4,5,7,11,8,9,6,0,12,13,10,14,15}}, nullptr}); + auto s2 = std::shared_ptr(new Step{{{1,2,3,4,5,7,0,8,9,6,11,12,13,10,14,15}}, s1}); + auto s3 = std::shared_ptr(new Step{{{1,2,3,4,5,0,7,8,9,6,11,12,13,10,14,15}}, s2}); + auto s4 = std::shared_ptr(new Step{{{1,2,3,4,5,6,7,8,9,0,11,12,13,10,14,15}}, s3}); + auto s5 = std::shared_ptr(new Step{{{1,2,3,4,5,6,7,8,9,10,11,12,13,0,14,15}}, s4}); + auto s6 = std::shared_ptr(new Step{{{1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,15}}, s5}); + auto s7 = std::shared_ptr(new Step{{{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}}, s6}); + std::ostringstream actual; + actual << *s7; + std::ostringstream expected; + expected << "11 down" << std::endl + << "7 right" << std::endl + << "6 up" << std::endl + << "10 up" << std::endl + << "14 left" << std::endl + << "15 left" << std::endl; + EXPECT_EQ(expected.str(), actual.str()); +}