Hi. I would like to build-up a graphical regression tools for board
implementation.
I try to set up things in this document. All suggestions/questions
are welcome.
It is first targeted for myself. Initially it will serve as a proof
builder,
to be distributed with my first attempt at implementing don's
standard.
This implementation of don's standard will be targeted for
readability.
I realize that the standard for unit-testing and non regression is
very high on this list. I don't feel like i can keep-up with such
a standard, unless i got a generic tool that makes the task easier.
So my project is to build a Java graphical utility to help reduce
the time
of creating a new board implementation from scratch (and testing
it). It will use a communication
protocol as simple as possible as an abstraction layer between the
graphical-tool
and the board-implementation. The end goal is to be able to share a
non regression
test-suit between board-implementations.
------------------------
There are two "actors" :
------------------------
- the board-implementation (BI)
- the graphical non regression tool (GRT)
BI : It represents all the data and function for managing the board-
state. It only responds to messages.
GRT : it's a graphical tool that communicate with the BI as a
controler. It sends requests to the BI,
and interpret the answers as is needed.
The developpement will be iterative. My goal here is to share the
specification of the first iteration.
The code name of this first iteration is GRT_V1_it1. It is closely
associated to my attempt to
comply with don's specification in the most readable possible way
(code name BI_V1_it1)
--------------------------------------------------
There are two projects currently to be specified :
--------------------------------------------------
- GRT_V1_it1 : first iteration of the GRT project version 1.
- BI_V1_it1 : a board implementation counterpart to GRT_V1_it1
(complying to don's standard)
++++++++++++++++++++++++++
GRT_V1_it1 specification :
++++++++++++++++++++++++++
In the first iteration GRT is to be able to do the following :
+ Set up the client BI to be connected (ala GOGUI with GTP_clients)
+ Propose to the user a list of dataType to visualize at any time
(I call those VectKey)
+ Propose to the user a list of action to send to the
boardImplementation (I call those ActionKey)
- A typical action would be : "play a stone at x,y"
+ A simple click must enable to send an action. A parameter will be
generated, representing the position
- Typically "play a stone at" is the action and (x,y) is the
parameter representing the stone to play
++++++++++++++++++++++++++++
GRT protocol (V1 iteration1)
++++++++++++++++++++++++++++
In the first iteration :
- the GRT part only sends "requests"
- the BI part only sends "responses"
there are two data type from the communication point of view :
- element : can be viewed as a string
- list : can be viewed as a succession of elements (a list of string)
request :
+ VectKey_list {request for the list of VectKey the BI can handle}
+ Action_list {request for the list of Action the BI can handle}
+ Vect_demand Parameter1(VectKey) {request for the data associated
with VectKey given in argument}
+ Action_board Parameter1(Action) Parameter2(position) {resquest for
the BI to commit the Action at position}
responses :
+ VectKey_list Parameter1(list of VectKey) { send back the list of
supported VectKey }
+ Action_list Parameter1(list of Action) { send back the list of
supported Action }
+ Vect_response { .. see details on it ..}
------
The main difficulty is to specify how to send back the data
representing the internal state of the board implementation.
It has to be both standard and flexible. I usually have three types
of data in the internal states :
+ Global data (example : player whom it is to make a move, current
score evaluation)
+ Whithout edge per intersection data (example : The black and
white stones on the board. Without taking into account the edges)
+ With edge per intersection data (example : The black and white
stones, the empty intersection, the edge intersections)
Then there is the problem of the board_size. In the first
iteration, it is the responsibility of the BI only to know
about the board size.
Here how i chose to represent a Vect_response :
Prequel_size (an integer)
Postquel_size (an integer)
Square_size (the usual board size to be multiplied by itself.
Example 9 for 9x9)
data : a list of elements
The Prequel_size=n indicate that the n first elements should be
"ignored" (or considered as global data)
The Postquel_size=n indicate that the n last elements should be
"ignored" (or considered as global data)
The Square_size enable to format correctly the elements between
Prequel_size and Postquel_size
Example (for a 3x3 board)
Prequel_size=2
Postquel_size=1
Square_size=3
data :
0 0 (prequel)
+ X O
X + +
+ + +
0 (postquel)
-----------------------
Message representation
-----------------------
Obviously messages are made of the following :
First element : message_code
parameters : parameter_data
I want the BI part of the protocol to be as easy as possible to
implements.
So the BI part, i want to be really straight forward. For example,
i'd like
to avoid the whole \n problematic of the GTP_protocol
That's why i choose the following separators :
| (pipe character as the standard element separator [to be always
present at the end of an element)
|| (two pipe character as the standard list termination)
||| (triple pipe character as the standard message termination)
Note that in practice, the final element of a list that end a
message will look as following :
element||||||
the first | is the element termination
the || next are the end of list
and the ||| then are the end of message.
It's not 100% readable, but the goal of the protocol is not to be
readable, it is to be as straight forward as possible
(and very easy to implement on the BI size).
PS : i have to stop there for now. I realize that i have still to
precise how the "position" parameter works.
_________________________________________________________________
Téléphonez gratuitement à tous vos proches avec Windows Live
Messenger ! Téléchargez-le maintenant !
http://www.windowslive.fr/messenger/1.asp_______________________________________________
computer-go mailing list
[email protected]
http://www.computer-go.org/mailman/listinfo/computer-go/