Đơn vị kiểm tra một đại diện bàn cờ


9

Vì vậy, đây là một chút câu hỏi ngoại lệ.

Tôi đang viết một thư viện cờ vua, chủ yếu từ đầu. Bạn có thể tìm thấy nhiều mã ở đây , với ý định sử dụng nó cho GUI và / hoặc động cơ. (Trò chơi là Grand Chess nhưng với mục đích của câu hỏi này, nó không thực sự quan trọng.)

Tôi hiện đang viết bài kiểm tra đơn vị để xác minh rằng các chức năng của tôi hoạt động như mong đợi. Và tôi đã tự hỏi nếu có một số loại thư viện hoặc cơ sở dữ liệu của các vị trí được đề xuất để kiểm tra tôi có thể sử dụng và làm việc từ đó, được phân loại theo liệu họ có phải là Người kiểm tra, Bế tắc, Kiểm tra, Pháp lý, Bất hợp pháp, v.v.

tl; dr Tôi đang tìm kiếm một danh sách các vị trí để kiểm tra mã của tôi.

Bạn có thể tìm thấy các bài kiểm tra hiện tại của tôi ở đây, tôi thêm vào chúng vài ngày một lần. Tuy nhiên, tôi muốn đảm bảo các bài kiểm tra là toàn diện trước khi tôi gỡ lỗi mã. (Một nửa trong số họ hiện đang thất bại).

Chỉnh sửa: để làm rõ: Tôi không tìm kiếm các bài kiểm tra động cơ ("di chuyển tốt nhất"). Tôi đang tìm kiếm các đại diện hội đồng quản trị ("là người kiểm tra vị trí này"). Tôi đã có một vài câu đố xếp hàng để thử nghiệm động cơ.


Bạn đang mã hóa một biến thể. Bộ dữ liệu cờ tiêu chuẩn sẽ không làm việc cho bạn. Vì vậy, tôi sợ bạn là của riêng bạn.
SmallChess

@StudentT Tôi đang tìm kiếm thứ gì đó tôi có thể bắt đầu. một cơ sở dữ liệu thông thường sẽ làm tốt, vì bạn biết, tôi có thể chỉnh sửa nó.
asibahi

1
Có NHIỀU bộ thử nghiệm như vậy, bạn có vui vì những thứ như perft, bài tập chiến thuật trong cờ vua tiêu chuẩn không?
SmallChess

@StudentT Tôi không thể tìm thấy bất cứ điều gì thông qua Google, vì vậy tại sao tôi hỏi ở đây. Bất kỳ thông tin sẽ rất hữu ích.
asibahi

Những gì bạn muốn kiểm tra có ít tp làm với đại diện hội đồng quản trị. Bạn sẽ muốn kiểm tra đại diện bảng sau khi thực hiện / di chuyển hoặc nhập vị trí. Phát hiện bạn đời / bế tắc đòi hỏi phải có chức năng đánh giá và kiểm tra vị trí về tính hợp pháp phải là một chức năng của chính nó có nhiều việc phải làm hơn là kiểm tra đại diện của hội đồng quản trị.
Queeg

Câu trả lời:


1

Khi đọc câu hỏi của bạn, phản ứng ruột của tôi là phạm vi của bạn quá phức tạp để kiểm tra đơn vị. Tôi khuyên bạn nên đọc nhanh qua Sách điện tử miễn phí Đơn vị Kiểm tra đơn giản. Tuy nhiên, tôi không có kinh nghiệm viết mã cờ vua (có thể mô hình của bạn khác) - mặc dù tôi làm phần mềm để kiếm sống.

Một bài kiểm tra đơn vị nên rất đơn giản và kiểm tra một hàm thực hiện 1 điều duy nhất. Sau đó, bạn có thể kết hợp các chức năng với một số kỳ vọng hợp lý rằng chúng sẽ hoạt động. Ví dụ, tôi mong đợi một bài kiểm tra đơn vị cho mỗi phần để xác định xem một động thái cụ thể có hợp pháp không. Một bài kiểm tra đơn vị cho mỗi phần để xác định xem nó có đưa nhà vua vào kiểm tra hay không. Một bài kiểm tra cho từng mảnh để xác định nơi nó đang tấn công, v.v.

Kiểm tra một vị trí có vẻ như là một bài kiểm tra đơn vị rất phức tạp và sẽ khó thực hiện hơn nhiều. Thay vào đó, hãy viết các bài kiểm tra nhỏ hơn đối với các chức năng nhỏ hơn và sau đó biết rằng những công việc riêng lẻ đó - đánh giá một vị trí chỉ là vấn đề lặp lại các chức năng đơn giản.

Nếu bạn muốn kiểm tra một vị trí để di chuyển tốt (không bị ép buộc), tôi nghĩ rằng thử nghiệm đơn vị sẽ hạn chế một cách giả tạo sự phát triển lâu dài và sức mạnh của động cơ cờ vua của bạn ... kết quả nhị phân của thử nghiệm đơn vị sẽ buộc động cơ của bạn tạo ra cùng di chuyển mọi lúc.

Tôi cũng sẽ xem xét thêm các bài kiểm tra đơn vị cho con đường 'trực tiếp nhất' đến một người bạn đời có các kết thúc đã biết. Tôi cũng muốn thêm các bài kiểm tra đơn vị để đi qua các lỗ đã biết. Các bài kiểm tra đơn vị giữa trò chơi sẽ khó hơn nhiều - có thể cắm vào một vị trí và đánh giá rằng công cụ tạo ra kết quả có thể sử dụng (đó là phản hồi nhị phân).

Đối với câu hỏi đánh giá một nhóm vị trí cho động cơ của bạn, bạn có thể làm tốt hơn nhiều khi đặt câu hỏi này trên https://stackoverflow.com/ bằng thẻ "cờ vua".


Cảm ơn câu trả lời. Tuy nhiên, như bạn có thể nói từ cuộc trò chuyện bình luận dưới câu hỏi, tôi không muốn kiểm tra các thuật toán động cơ. Tôi thậm chí còn không đến được với họ. Tôi đang tìm cách kiểm tra xem mã của tôi có nhận ra vị trí đứng trên bảng là người kiểm tra hay là bế tắc hay không, đó là "chỉ" đếm các động thái hợp pháp và liệu nhà vua có kiểm tra hay không. Trong thực tế kể từ khi tôi đăng câu hỏi đó, tôi đã tiếp tục soạn một bộ sưu tập nhỏ các vị trí để sử dụng làm trường hợp kiểm tra đơn vị. Tôi có thể gửi nó như là câu trả lời. (Tôi hoàn toàn ngạc nhiên khi ai đó đưa ra một khoản tiền thưởng cho việc này, tbh.)
asibahi 22/03/2017

Điều này không trả lời câu hỏi.
SmallChess

1
Hơn nữa, các lưu ý về kiểm tra đơn vị là sai.
SmallChess

@asibahi Tôi không có đủ đại diện để đăng trong phần bình luận đó, vì vậy tôi phải thêm câu trả lời. Tôi thực sự nghĩ rằng bạn sẽ được phục vụ tốt hơn trong một diễn đàn lập trình (stackexchange) với câu hỏi này. Nhưng trên nhận xét này ... bạn đã xác định các bài kiểm tra đơn vị riêng lẻ -> Đối với mỗi bài kiểm tra mảnh có một động thái hợp pháp. Nếu lặp đi lặp lại trả về sai cho mỗi phần, bạn có bế tắc hoặc người kiểm tra nếu bạn đang kiểm tra. Bạn không cần một bộ sưu tập lớn các vị trí cho điều đó. Bằng cách kiểm tra từng mảnh riêng lẻ cho trạng thái hiện tại của nó, bạn có thể lặp lại qua nhiều mảnh để đánh giá vị trí.
Paul

0

Mặc dù đây là một câu hỏi cũ, tôi nghĩ rằng khái niệm được trình bày trong blog này có thể hữu ích: http://scionsoftware.com/blog/write-tests-by-playing-chess

Ý tưởng là bạn sẽ chơi một ván cờ trên GUI và có một cơ chế để nắm bắt trạng thái của bàn cờ bằng cách nối tiếp vào một tệp.

Bạn có thể đặt tên cho các tệp đó theo các trường hợp kiểm tra và đưa chúng vào bất kỳ phương thức kiểm tra nào bạn xác định: IsCheckmate; Là hợp pháp; IsDraw

Một trong những lý do chính mà bạn muốn sử dụng UI tự nhiên để tạo các trường hợp thử nghiệm này, ngoài việc dễ dàng tạo ra, là điều kiện đủ cũng dựa vào số lần di chuyển: castling, en passant, vẽ điều kiện.


0

Tôi không biết bất kỳ cơ sở dữ liệu kiểm tra đơn vị nào cho động cơ cờ vua (nói chung), và vâng, viết kiểm tra đơn vị toàn diện là gần như không thể.

Bạn có thể khám phá kỹ thuật thử nghiệm thay thế như thử nghiệm dựa trên thuộc tính (QuickCheck trong Haskell, tôi không biết môi trường F # nhưng nó chắc chắn tồn tại một cái gì đó giống như đối với F #), có thể tự động tạo ra một lượng lớn "vị trí" và kiểm tra chúng sử dụng tài sản được xác định bởi bạn.

Hy vọng điều này sẽ giúp một chút :)!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.