Commit Graph

114 Commits

Author SHA1 Message Date
Aryadev Chavali
6119410496 card: new -> make_joker and make_playing-card
Always better to be explicit with our constructor names.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f40596bc1d modes:pair:tests: implement test::new 2026-04-05 04:45:51 +01:00
Aryadev Chavali
cb2c220a5b modes:pair:tests:exhaustive_pairs: refactor for accuracy 2026-04-05 04:45:51 +01:00
Aryadev Chavali
e9c37d49e3 modes:pair:ord: make improper pairs worse than proper pairs
If the highcard of two pairs are equivalent, but one is improper while
the other is proper, the proper pair is always greater.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
40046fa98c modes:single:tests: Full stops on // TEST comments. 2026-04-05 04:45:51 +01:00
Aryadev Chavali
27f9f79416 modes:mod:Hand: is_proper and is_improper indicator functions
A "proper" hand is one that has no wild cards - an "improper" hand is
one that does have at least one wild card.

~is_proper~ should be implemented for any Hand - ~is_improper~ falls
out for free.

Implemented for Single and Pair.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
b76ad869ea modes:single:tests: commentary, reflexive testing on differing decks 2026-04-05 04:45:51 +01:00
Aryadev Chavali
298499207b main: permit dead code (no warnings) when building.
I want my build to tell me if there's anything wrong with it.  Dead
Code warnings distract me from checking that.

OTOH when I'm running Clippy I want it to catch everything.  Hence
this change.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
534da2ed71 modes:pair: test skeletons for pairs. 2026-04-05 04:45:51 +01:00
Aryadev Chavali
994ebea678 modes:single: rename some tests 2026-04-05 04:45:51 +01:00
Aryadev Chavali
6a86f7d62b modes:single|pair: Use square brackets instead of braces for display
Helps distinguish from the Debug print.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
30a7c466e5 modes:pair: Implement Hand for Pair
The footstool condition here is super simple since we just utilise the
Single footstool condition against Pair::1 of both pairs.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
0328a828c8 modes:pair: document that Pair::1 is always a playing card in Pair::new 2026-04-05 04:45:51 +01:00
Aryadev Chavali
0267a6f567 modes:pair: adjust Ord impl for Pair
Instead of doing a deep-check where we compare their best member
before their worst member, we just compare by the best member.

This allows (Joker, 4S) to be equal to (4C, 4S).
2026-04-05 04:45:51 +01:00
Aryadev Chavali
a24d85572d modes:single|pair: make fields of Single and Pair public
So strange that this isn't default for tuple-like constructors.  I can
kinda get it for record-like constructors, but not for this.  Better
safe than sorry I guess?
2026-04-05 04:45:51 +01:00
Aryadev Chavali
5ef0b7e58a modes:pair: implement Eq and Ord for Pair
If we auto-derived Ord it would look at Pair::0 first, when it should
look at Pair::1.  Hence the custom implementation.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
599fb44edb modes:pair: implement Display for Pair 2026-04-05 04:45:51 +01:00
Aryadev Chavali
da60b41b97 modes:*: doc strings 2026-04-05 04:45:51 +01:00
Aryadev Chavali
439b787040 modes:pair: add doc string for Pair::new 2026-04-05 04:45:51 +01:00
Aryadev Chavali
fea8f1716d *: fix doc strings 2026-04-05 04:45:51 +01:00
Aryadev Chavali
e1db8af26c modes:pair: Added pair type
Slightly more complex pattern since we've got two cards, but still
relatively trivial.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f5fa964e55 modes:mod: use matches! instead of assert!(match...)
Give it up for Clippy, MVP of this codebase.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
71f644043a modes:mod|single: fix issue with footstool not taking other by reference 2026-04-05 04:45:51 +01:00
Aryadev Chavali
e401819914 modes:mod: doc for test_non_reflexivity 2026-04-05 04:45:51 +01:00
Aryadev Chavali
e46ece2622 modes:singles: refactor tests using the generic non_reflexive test. 2026-04-05 04:45:51 +01:00
Aryadev Chavali
bcd38ecdc4 modes:mod: implemented a generic tester for non_reflexivity
Given two "Hands", we test that the footstool condition on those two
hands are non-reflexive.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
9c5ee74639 modes:single: tests for footstooling and invalid singles 2026-04-05 04:45:51 +01:00
Aryadev Chavali
d2075cd000 modes:single: implement Hand for Singles
Really trivial implementation.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
99bfd9ed37 card: rearrange 2026-04-05 04:45:51 +01:00
Aryadev Chavali
44d8e4eba0 modes:mod: Hand trait
Any hand from any round mode has a chance of footstooling another hand
from that same mode.  This trait (Hand) allows us to implement these
semantics (as well as any other shared semantics) for each round mode.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
9059047c79 helper: little module for helper functions 2026-04-05 04:45:51 +01:00
Aryadev Chavali
04cf388f59 card: move all_same_rank and add documentation 2026-04-05 04:45:51 +01:00
Aryadev Chavali
ca07536b37 modes: new crate representing the API for different round types
Single is our first one - trivial really.  Only thing we need to check
is that the single isn't made up of a joker.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
1c962afb8f delete my old work
The classifier was nice, but punning all my hand types into the same
variant when (really) we're just gonna be using one hand type per
round makes no sense.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
69c012e47a *: young clippy back at it again 2026-04-02 02:25:48 +01:00
Aryadev Chavali
91b40ed412 classifier: refactor for new PlayingCard type 2026-04-02 02:24:23 +01:00
Aryadev Chavali
52285de6be card: refactor to lift PlayingCard as it's own type
Now that playing cards are their own type, we can map a sequence of
Cards over to their PlayingCards, which should make the classifier a
bit nicer.
2026-04-02 02:22:35 +01:00
Aryadev Chavali
e422c75e5c README update 2026-04-01 06:23:09 +01:00
Aryadev Chavali
cd09b3b922 main: a randomised poker hand generator and classifier. 2026-04-01 06:20:22 +01:00
Aryadev Chavali
e5d5e4037f classifier: it's your boy, clippy 2026-04-01 06:20:22 +01:00
Aryadev Chavali
9dc4c8241f classifier: classify_poker_hand refactor 2026-04-01 06:20:22 +01:00
Aryadev Chavali
2356d78592 card: new card constructor 2026-04-01 06:20:22 +01:00
Aryadev Chavali
b6b54300c2 classifier: cleanliness refactor of is_pair,is_triple,is_straight 2026-04-01 06:20:22 +01:00
Aryadev Chavali
591944b88e classifier:classify: use a stack allocated array for new_cards 2026-04-01 06:20:22 +01:00
Aryadev Chavali
92348bc2c3 classifier: move hand types to their own module 2026-04-01 06:20:22 +01:00
Aryadev Chavali
04c39d4bae classifier: refactor for cleanliness 2026-04-01 06:20:22 +01:00
Aryadev Chavali
14d66cf171 classifier: permit loop-around straights
Our classifier now permits straights like (A(S), 2(D), 3(C), 4(S),
5(H)).
2026-04-01 06:20:22 +01:00
Aryadev Chavali
dd0011d1f2 card|classifier: young clippy up in this mf 2026-04-01 06:20:22 +01:00
Aryadev Chavali
ee6f9c7140 classifier: extract PokerType classifier from classify_poker_hand 2026-04-01 06:20:22 +01:00
Aryadev Chavali
42a7c27c41 classifier: naming refactor 2026-04-01 06:20:22 +01:00