diff options
| author | Kostya <mail@sartin.in> | 2026-08-16 18:50:15 +0000 |
|---|---|---|
| committer | Kostya <mail@sartin.in> | 2026-08-16 18:50:15 +0000 |
| commit | eed9265be711432f40247f149c07f9e33511192a (patch) | |
| tree | 19bef593ffeacc02c606c73291df637463be1a26 /service/src/test | |
| parent | 07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508 (diff) | |
| download | guess-market-eed9265be711432f40247f149c07f9e33511192a.tar.gz guess-market-eed9265be711432f40247f149c07f9e33511192a.tar.xz guess-market-eed9265be711432f40247f149c07f9e33511192a.zip | |
Split DTOs into api/model, extract order matching into service/matching
Moves Event/Ledger DTOs out of the flat api package into
api/model/{event,ledger}, and moves LocalCatalogContext and order
matching logic into dedicated service/catalog and service/matching
packages, replacing TradingOperation/TradingOperationImpl.
Diffstat (limited to 'service/src/test')
| -rw-r--r-- | service/src/test/java/market/guess/service/mechanism/LmsrTradingMechanismTest.java | 37 | ||||
| -rw-r--r-- | service/src/test/java/market/guess/service/mechanism/OrderBookTradingMechanismTest.java | 51 |
2 files changed, 0 insertions, 88 deletions
diff --git a/service/src/test/java/market/guess/service/mechanism/LmsrTradingMechanismTest.java b/service/src/test/java/market/guess/service/mechanism/LmsrTradingMechanismTest.java deleted file mode 100644 index f5c6af5..0000000 --- a/service/src/test/java/market/guess/service/mechanism/LmsrTradingMechanismTest.java +++ /dev/null | |||
| @@ -1,37 +0,0 @@ | |||
| 1 | package market.guess.service.mechanism; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertArrayEquals; | ||
| 4 | import static org.junit.Assert.assertEquals; | ||
| 5 | |||
| 6 | import java.math.BigDecimal; | ||
| 7 | import org.junit.Test; | ||
| 8 | |||
| 9 | public class LmsrTradingMechanismTest { | ||
| 10 | |||
| 11 | @Test | ||
| 12 | public void openingCostMatchesLmsrFormula() { | ||
| 13 | var mechanism = new LmsrTradingMechanism(100, 2); | ||
| 14 | |||
| 15 | assertEquals(new BigDecimal("69.31"), mechanism.openingCost()); | ||
| 16 | } | ||
| 17 | |||
| 18 | @Test | ||
| 19 | public void pricesStartEven() { | ||
| 20 | var mechanism = new LmsrTradingMechanism(100, 2); | ||
| 21 | |||
| 22 | assertArrayEquals( | ||
| 23 | new BigDecimal[] {new BigDecimal("0.50"), new BigDecimal("0.50")}, mechanism.prices()); | ||
| 24 | } | ||
| 25 | |||
| 26 | @Test | ||
| 27 | public void buyingSharesShiftsCostAndPrice() { | ||
| 28 | var mechanism = new LmsrTradingMechanism(100, 2); | ||
| 29 | |||
| 30 | var execution = mechanism.buy(0, 100); | ||
| 31 | |||
| 32 | assertEquals(100, execution.filledQuantity()); | ||
| 33 | assertEquals(new BigDecimal("62.01"), execution.cost()); | ||
| 34 | assertArrayEquals( | ||
| 35 | new BigDecimal[] {new BigDecimal("0.73"), new BigDecimal("0.27")}, mechanism.prices()); | ||
| 36 | } | ||
| 37 | } | ||
diff --git a/service/src/test/java/market/guess/service/mechanism/OrderBookTradingMechanismTest.java b/service/src/test/java/market/guess/service/mechanism/OrderBookTradingMechanismTest.java deleted file mode 100644 index b4b2da3..0000000 --- a/service/src/test/java/market/guess/service/mechanism/OrderBookTradingMechanismTest.java +++ /dev/null | |||
| @@ -1,51 +0,0 @@ | |||
| 1 | package market.guess.service.mechanism; | ||
| 2 | |||
| 3 | import static org.junit.Assert.assertEquals; | ||
| 4 | |||
| 5 | import java.math.BigDecimal; | ||
| 6 | import market.guess.service.mechanism.OrderBookTradingMechanism.Side; | ||
| 7 | import org.junit.Test; | ||
| 8 | |||
| 9 | public class OrderBookTradingMechanismTest { | ||
| 10 | |||
| 11 | @Test | ||
| 12 | public void limitBuyConsumesRestingAsksInFifoOrderAndLeavesRemainder() { | ||
| 13 | var mechanism = new OrderBookTradingMechanism(false, 100, 1, 2); | ||
| 14 | var price = new BigDecimal("0.60"); | ||
| 15 | |||
| 16 | mechanism.placeOrder(0, Side.SELL, 20, price); | ||
| 17 | mechanism.placeOrder(0, Side.SELL, 40, price); | ||
| 18 | |||
| 19 | var execution = mechanism.placeOrder(0, Side.BUY, 50, price); | ||
| 20 | |||
| 21 | assertEquals(50, execution.filledQuantity()); | ||
| 22 | assertEquals(new BigDecimal("30.00"), execution.cost()); | ||
| 23 | |||
| 24 | var followUp = mechanism.buy(0, 100); | ||
| 25 | assertEquals(10, followUp.filledQuantity()); | ||
| 26 | } | ||
| 27 | |||
| 28 | @Test | ||
| 29 | public void marketBuySweepsMultiplePriceLevelsAndPartiallyFillsWhenBookRunsOut() { | ||
| 30 | var mechanism = new OrderBookTradingMechanism(false, 100, 1, 2); | ||
| 31 | mechanism.placeOrder(0, Side.SELL, 10, new BigDecimal("0.50")); | ||
| 32 | mechanism.placeOrder(0, Side.SELL, 10, new BigDecimal("0.70")); | ||
| 33 | |||
| 34 | var execution = mechanism.buy(0, 15); | ||
| 35 | |||
| 36 | assertEquals(15, execution.filledQuantity()); | ||
| 37 | assertEquals(new BigDecimal("8.50"), execution.cost()); | ||
| 38 | |||
| 39 | var exhausted = mechanism.buy(0, 100); | ||
| 40 | assertEquals(5, exhausted.filledQuantity()); | ||
| 41 | } | ||
| 42 | |||
| 43 | @Test | ||
| 44 | public void pricesReflectMidpointOfBestBidAndAsk() { | ||
| 45 | var mechanism = new OrderBookTradingMechanism(false, 100, 1, 2); | ||
| 46 | mechanism.placeOrder(0, Side.BUY, 10, new BigDecimal("0.40")); | ||
| 47 | mechanism.placeOrder(0, Side.SELL, 10, new BigDecimal("0.60")); | ||
| 48 | |||
| 49 | assertEquals(new BigDecimal("0.50"), mechanism.prices()[0]); | ||
| 50 | } | ||
| 51 | } | ||