|
From: Erik V. <ev...@us...> - 2011-11-22 23:43:31
|
rails/game/action/SellShares.java | 5
test/data/test/1830_SellFullPresCert.report | 257 ++++++
test/data/test/1830_SellHalfPresCert.report | 257 ++++++
test/data/test/1835_NatDoubleShare.report | 874 ++++++++++++++++++++++
test/data/test/1835_NatSingleShare.report | 66 +
test/data/test/1835_SwapPresForDoubleShare.report | 66 +
6 files changed, 1524 insertions(+), 1 deletion(-)
New commits:
commit 5183cc7a7d798f17479525d466fbc4fcc82e149f
Author: Erik Vos <eri...@xs...>
Date: Wed Nov 23 00:36:27 2011 +0100
Restored removed field numberSold from SellShares action.
This proved necessary for backwards compatibility.
Refreshed the related new test cases.
diff --git a/rails/game/action/SellShares.java b/rails/game/action/SellShares.java
index e266a7a..63e66a2 100644
--- a/rails/game/action/SellShares.java
+++ b/rails/game/action/SellShares.java
@@ -32,6 +32,9 @@ public class SellShares extends PossibleAction {
*/
private int presidentExchange = 0;
+ // For backwards compatibility only
+ private int numberSold = 0;
+
public static final long serialVersionUID = 1L;
public SellShares(String companyName, int shareUnits, int number,
@@ -134,7 +137,7 @@ public class SellShares extends PossibleAction {
shareUnits = fields.get("shareUnits", shareUnits);
share = fields.get("share", share);
price = fields.get("price", price);
- int numberSold = fields.get("numberSold", 0); // For backwards compatibility
+ numberSold = fields.get("numberSold", 0); // For backwards compatibility
number = fields.get("number", numberSold);
presidentExchange = fields.get("presidentExchange", 0);
diff --git a/test/data/test/1830_SellFullPresCert.report b/test/data/test/1830_SellFullPresCert.report
index 63f22fb..7baab94 100644
--- a/test/data/test/1830_SellFullPresCert.report
+++ b/test/data/test/1830_SellFullPresCert.report
@@ -8,3 +8,260 @@ StartOfPhase,2
BankSizeIs,9600
StartOfInitialRound
HasPriority,Alice
+BuysItemFor,Alice,SVNRR,20
+BuysItemFor,Bob,C&StL,40
+BuysItemFor,Charlie,D&H,70
+BuysItemFor,Alice,M&H,110
+BuysItemFor,Bob,C&A,160
+ALSO_GETS,Bob,CERT_NAME,PRR,10
+BuysItemFor,Charlie,B&O,220
+ALSO_GETS,Charlie,PRES_CERT_NAME,B&O,20
+Has,Alice,670
+Has,Bob,600
+Has,Charlie,510
+StartStockRound,1
+HasPriority,Alice
+START_COMPANY_LOG,Alice,NYNH,100,200,2,20,BANK
+START_COMPANY_LOG,Bob,PRR,100,200,2,20,BANK
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+FloatsWithCash,PRR,1000
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+FloatsWithCash,B&O,1000
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+FloatsWithCash,NYNH,1000
+BUY_SHARE_LOG,Bob,10,B&O,IPO,100
+BUY_SHARE_LOG,Charlie,10,NYNH,IPO,100
+PASSES,Alice
+PASSES,Bob
+PASSES,Charlie
+
+END_SR,1
+Has,B&O,1000
+Has,NYNH,1000
+Has,PRR,1000
+Has,Alice,70
+Has,Bob,0
+Has,Charlie,10
+START_OR,1.1
+ReceivesFor,Alice,5,SVNRR
+ReceivesFor,Bob,10,C&StL
+ReceivesFor,Charlie,15,D&H
+ReceivesFor,Alice,20,M&H
+ReceivesFor,Bob,25,C&A
+ReceivesFor,Charlie,30,B&O
+
+CompanyOperates,B&O,Charlie
+LaysTileAtFor,B&O,57,J14,SW,80
+LAYS_TOKEN_ON,B&O,J14,40
+CompanyDoesNotPayDividend,B&O
+PRICE_MOVES_LOG,B&O,100,G1,90,F1
+BuysTrain,B&O,2,IPO,80
+PrivateCloses,B&O
+FirstTrainBought,2
+BuysTrain,B&O,2,IPO,80
+BuysTrain,B&O,2,IPO,80
+
+CompanyOperates,NYNH,Alice
+LaysTileAt,NYNH,1,F20,SW
+CompanyDoesNotPayDividend,NYNH
+PRICE_MOVES_LOG,NYNH,100,G1,90,F1
+BuysTrain,NYNH,2,IPO,80
+BuysTrain,NYNH,2,IPO,80
+BuysTrain,NYNH,2,IPO,80
+All 2-trains are sold out, 3-trains now available
+BuysTrain,NYNH,3,IPO,180
+FirstTrainBought,3
+StartOfPhase,3
+BuysPrivateFromFor,NYNH,SVNRR,Alice,40
+BuysPrivateFromFor,NYNH,M&H,Alice,220
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,9,H14,W
+CompanyDoesNotPayDividend,PRR
+PRICE_MOVES_LOG,PRR,100,G1,90,F1
+BuysTrain,PRR,3,IPO,180
+BuysPrivateFromFor,PRR,C&StL,Bob,80
+BuysPrivateFromFor,PRR,C&A,Bob,320
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,Alice,1.1,95
+ORWorthIncrease,Bob,1.1,165
+ORWorthIncrease,Charlie,1.1,-245
+Has,B&O,640
+Has,NYNH,320
+Has,PRR,420
+Has,Alice,355
+Has,Bob,435
+Has,Charlie,55
+StartStockRound,2
+HasPriority,Alice
+SELL_SHARE_LOG,Alice,10,NYNH,90
+PRICE_MOVES_LOG,NYNH,90,F1,82,F2
+START_COMPANY_LOG,Alice,C&O,67,134,2,20,BANK
+SELL_SHARE_LOG,Bob,10,B&O,90
+PRICE_MOVES_LOG,B&O,90,F1,82,F2
+START_COMPANY_LOG,Bob,NYC,82,164,2,20,BANK
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+FloatsWithCash,C&O,670
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+FloatsWithCash,NYC,820
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,2
+Has,B&O,640
+Has,C&O,670
+Has,NYC,820
+Has,NYNH,320
+Has,PRR,420
+Has,Alice,43
+Has,Bob,33
+Has,Charlie,55
+START_OR,2.1
+ReceivesFor,NYNH,5,SVNRR
+ReceivesFor,PRR,10,C&StL
+ReceivesFor,Charlie,15,D&H
+ReceivesFor,NYNH,20,M&H
+ReceivesFor,PRR,25,C&A
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,57,H16,W
+LAYS_TOKEN_ON,PRR,H16,40
+CompanyRevenue,PRR,30
+CompanyPaysOutFull,PRR,30
+Payout,Bob,18,6,10
+PRICE_MOVES_LOG,PRR,90,F1,100,G1
+
+CompanyOperates,NYC,Bob
+LaysTileAt,NYC,57,E19,SW
+CompanyDoesNotPayDividend,NYC
+PRICE_MOVES_LOG,NYC,82,G3,76,F3
+BuysTrain,NYC,3,IPO,180
+
+CompanyOperates,NYNH,Alice
+LaysTileAtFor,NYNH,57,F22,W,80
+LAYS_TOKEN_ON,NYNH,F22,40
+CompanyRevenue,NYNH,130
+CompanyPaysOutFull,NYNH,130
+Payout,Alice,65,5,10
+Payout,Charlie,13,1,10
+Payout,NYNH,13,1,10
+PRICE_MOVES_LOG,NYNH,82,F2,90,G2
+
+CompanyOperates,B&O,Charlie
+LaysTileAt,B&O,14,J14,NW
+CompanyRevenue,B&O,130
+CompanyPaysOutFull,B&O,130
+Payout,Charlie,78,6,10
+Payout,B&O,13,1,10
+PRICE_MOVES_LOG,B&O,82,F2,90,G2
+BuysTrain,B&O,3,IPO,180
+BuysPrivateFromFor,B&O,D&H,Charlie,140
+
+CompanyOperates,C&O,Alice
+LaysTileAt,C&O,8,G5,W
+CompanyDoesNotPayDividend,C&O
+PRICE_MOVES_LOG,C&O,67,G6,65,F6
+BuysTrain,C&O,3,IPO,180
+All 3-trains are sold out, 4-trains now available
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,Alice,2.1,93
+ORWorthIncrease,Bob,2.1,42
+ORWorthIncrease,Charlie,2.1,232
+Has,B&O,333
+Has,C&O,490
+Has,NYC,640
+Has,NYNH,238
+Has,PRR,415
+Has,Alice,108
+Has,Bob,51
+Has,Charlie,301
+START_OR,2.2
+ReceivesFor,NYNH,5,SVNRR
+ReceivesFor,PRR,10,C&StL
+ReceivesFor,B&O,15,D&H
+ReceivesFor,NYNH,20,M&H
+ReceivesFor,PRR,25,C&A
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,59,H18,W
+LaysTileAt,PRR,58,B20,SW
+CompanyRevenue,PRR,60
+CompanyPaysOutFull,PRR,60
+Payout,Bob,36,6,10
+PRICE_MOVES_LOG,PRR,100,G1,112,H1
+BuysTrain,PRR,4,IPO,300
+FirstTrainBought,4
+StartOfPhase,4
+
+CompanyOperates,NYNH,Alice
+LaysTileAtFor,NYNH,54,G19,SW,80
+CompanyRevenue,NYNH,90
+CompanyPaysOutFull,NYNH,90
+Payout,Alice,45,5,10
+Payout,Charlie,9,1,10
+Payout,NYNH,9,1,10
+PRICE_MOVES_LOG,NYNH,90,G2,100,H2
+BuysTrain,NYNH,4,PRR,191
+
+CompanyOperates,B&O,Charlie
+LaysTileAt,B&O,53,I15,SW
+CompanyRevenue,B&O,110
+CompanyPaysOutFull,B&O,110
+Payout,Charlie,66,6,10
+Payout,B&O,11,1,10
+PRICE_MOVES_LOG,B&O,90,G2,100,H2
+BuysTrain,B&O,4,IPO,300
+
+CompanyOperates,NYC,Bob
+LaysTileAt,NYC,8,F18,NE
+CompanyRevenue,NYC,80
+CompanyPaysOutFull,NYC,80
+Payout,Bob,48,6,10
+PRICE_MOVES_LOG,NYC,76,F3,82,G3
+BuysTrain,NYC,4,IPO,300
+
+CompanyOperates,C&O,Alice
+LaysTileAt,C&O,8,G3,NW
+CompanyRevenue,C&O,70
+CompanyWithholds,C&O,70
+PRICE_MOVES_LOG,C&O,65,F6,58,E6
+
+EndOfOperatingRound,2.2
+ORWorthIncrease,Alice,2.2,53
+ORWorthIncrease,Bob,2.2,192
+ORWorthIncrease,Charlie,2.2,145
+Has,B&O,59
+Has,C&O,560
+Has,NYC,340
+Has,NYNH,1
+Has,PRR,341
+Has,Alice,153
+Has,Bob,135
+Has,Charlie,376
+StartStockRound,3
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,NYNH,Pool,100
+SELL_SHARES_LOG,Alice,5,10,50,NYNH,500
+PRICE_MOVES_LOG,NYNH,100,H2,69,H7
+IS_NOW_PRES_OF,Charlie,NYNH
diff --git a/test/data/test/1830_SellHalfPresCert.report b/test/data/test/1830_SellHalfPresCert.report
index 63f22fb..956167d 100644
--- a/test/data/test/1830_SellHalfPresCert.report
+++ b/test/data/test/1830_SellHalfPresCert.report
@@ -8,3 +8,260 @@ StartOfPhase,2
BankSizeIs,9600
StartOfInitialRound
HasPriority,Alice
+BuysItemFor,Alice,SVNRR,20
+BuysItemFor,Bob,C&StL,40
+BuysItemFor,Charlie,D&H,70
+BuysItemFor,Alice,M&H,110
+BuysItemFor,Bob,C&A,160
+ALSO_GETS,Bob,CERT_NAME,PRR,10
+BuysItemFor,Charlie,B&O,220
+ALSO_GETS,Charlie,PRES_CERT_NAME,B&O,20
+Has,Alice,670
+Has,Bob,600
+Has,Charlie,510
+StartStockRound,1
+HasPriority,Alice
+START_COMPANY_LOG,Alice,NYNH,100,200,2,20,BANK
+START_COMPANY_LOG,Bob,PRR,100,200,2,20,BANK
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+BUY_SHARE_LOG,Bob,10,PRR,IPO,100
+FloatsWithCash,PRR,1000
+BUY_SHARE_LOG,Charlie,10,B&O,IPO,100
+FloatsWithCash,B&O,1000
+BUY_SHARE_LOG,Alice,10,NYNH,IPO,100
+FloatsWithCash,NYNH,1000
+BUY_SHARE_LOG,Bob,10,B&O,IPO,100
+BUY_SHARE_LOG,Charlie,10,NYNH,IPO,100
+PASSES,Alice
+PASSES,Bob
+PASSES,Charlie
+
+END_SR,1
+Has,B&O,1000
+Has,NYNH,1000
+Has,PRR,1000
+Has,Alice,70
+Has,Bob,0
+Has,Charlie,10
+START_OR,1.1
+ReceivesFor,Alice,5,SVNRR
+ReceivesFor,Bob,10,C&StL
+ReceivesFor,Charlie,15,D&H
+ReceivesFor,Alice,20,M&H
+ReceivesFor,Bob,25,C&A
+ReceivesFor,Charlie,30,B&O
+
+CompanyOperates,B&O,Charlie
+LaysTileAtFor,B&O,57,J14,SW,80
+LAYS_TOKEN_ON,B&O,J14,40
+CompanyDoesNotPayDividend,B&O
+PRICE_MOVES_LOG,B&O,100,G1,90,F1
+BuysTrain,B&O,2,IPO,80
+PrivateCloses,B&O
+FirstTrainBought,2
+BuysTrain,B&O,2,IPO,80
+BuysTrain,B&O,2,IPO,80
+
+CompanyOperates,NYNH,Alice
+LaysTileAt,NYNH,1,F20,SW
+CompanyDoesNotPayDividend,NYNH
+PRICE_MOVES_LOG,NYNH,100,G1,90,F1
+BuysTrain,NYNH,2,IPO,80
+BuysTrain,NYNH,2,IPO,80
+BuysTrain,NYNH,2,IPO,80
+All 2-trains are sold out, 3-trains now available
+BuysTrain,NYNH,3,IPO,180
+FirstTrainBought,3
+StartOfPhase,3
+BuysPrivateFromFor,NYNH,SVNRR,Alice,40
+BuysPrivateFromFor,NYNH,M&H,Alice,220
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,9,H14,W
+CompanyDoesNotPayDividend,PRR
+PRICE_MOVES_LOG,PRR,100,G1,90,F1
+BuysTrain,PRR,3,IPO,180
+BuysPrivateFromFor,PRR,C&StL,Bob,80
+BuysPrivateFromFor,PRR,C&A,Bob,320
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,Alice,1.1,95
+ORWorthIncrease,Bob,1.1,165
+ORWorthIncrease,Charlie,1.1,-245
+Has,B&O,640
+Has,NYNH,320
+Has,PRR,420
+Has,Alice,355
+Has,Bob,435
+Has,Charlie,55
+StartStockRound,2
+HasPriority,Alice
+SELL_SHARE_LOG,Alice,10,NYNH,90
+PRICE_MOVES_LOG,NYNH,90,F1,82,F2
+START_COMPANY_LOG,Alice,C&O,67,134,2,20,BANK
+SELL_SHARE_LOG,Bob,10,B&O,90
+PRICE_MOVES_LOG,B&O,90,F1,82,F2
+START_COMPANY_LOG,Bob,NYC,82,164,2,20,BANK
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,C&O,IPO,67
+FloatsWithCash,C&O,670
+BUY_SHARE_LOG,Bob,10,NYC,IPO,82
+FloatsWithCash,NYC,820
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,2
+Has,B&O,640
+Has,C&O,670
+Has,NYC,820
+Has,NYNH,320
+Has,PRR,420
+Has,Alice,43
+Has,Bob,33
+Has,Charlie,55
+START_OR,2.1
+ReceivesFor,NYNH,5,SVNRR
+ReceivesFor,PRR,10,C&StL
+ReceivesFor,Charlie,15,D&H
+ReceivesFor,NYNH,20,M&H
+ReceivesFor,PRR,25,C&A
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,57,H16,W
+LAYS_TOKEN_ON,PRR,H16,40
+CompanyRevenue,PRR,30
+CompanyPaysOutFull,PRR,30
+Payout,Bob,18,6,10
+PRICE_MOVES_LOG,PRR,90,F1,100,G1
+
+CompanyOperates,NYC,Bob
+LaysTileAt,NYC,57,E19,SW
+CompanyDoesNotPayDividend,NYC
+PRICE_MOVES_LOG,NYC,82,G3,76,F3
+BuysTrain,NYC,3,IPO,180
+
+CompanyOperates,NYNH,Alice
+LaysTileAtFor,NYNH,57,F22,W,80
+LAYS_TOKEN_ON,NYNH,F22,40
+CompanyRevenue,NYNH,130
+CompanyPaysOutFull,NYNH,130
+Payout,Alice,65,5,10
+Payout,Charlie,13,1,10
+Payout,NYNH,13,1,10
+PRICE_MOVES_LOG,NYNH,82,F2,90,G2
+
+CompanyOperates,B&O,Charlie
+LaysTileAt,B&O,14,J14,NW
+CompanyRevenue,B&O,130
+CompanyPaysOutFull,B&O,130
+Payout,Charlie,78,6,10
+Payout,B&O,13,1,10
+PRICE_MOVES_LOG,B&O,82,F2,90,G2
+BuysTrain,B&O,3,IPO,180
+BuysPrivateFromFor,B&O,D&H,Charlie,140
+
+CompanyOperates,C&O,Alice
+LaysTileAt,C&O,8,G5,W
+CompanyDoesNotPayDividend,C&O
+PRICE_MOVES_LOG,C&O,67,G6,65,F6
+BuysTrain,C&O,3,IPO,180
+All 3-trains are sold out, 4-trains now available
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,Alice,2.1,93
+ORWorthIncrease,Bob,2.1,42
+ORWorthIncrease,Charlie,2.1,232
+Has,B&O,333
+Has,C&O,490
+Has,NYC,640
+Has,NYNH,238
+Has,PRR,415
+Has,Alice,108
+Has,Bob,51
+Has,Charlie,301
+START_OR,2.2
+ReceivesFor,NYNH,5,SVNRR
+ReceivesFor,PRR,10,C&StL
+ReceivesFor,B&O,15,D&H
+ReceivesFor,NYNH,20,M&H
+ReceivesFor,PRR,25,C&A
+
+CompanyOperates,PRR,Bob
+LaysTileAt,PRR,59,H18,W
+LaysTileAt,PRR,58,B20,SW
+CompanyRevenue,PRR,60
+CompanyPaysOutFull,PRR,60
+Payout,Bob,36,6,10
+PRICE_MOVES_LOG,PRR,100,G1,112,H1
+BuysTrain,PRR,4,IPO,300
+FirstTrainBought,4
+StartOfPhase,4
+
+CompanyOperates,NYNH,Alice
+LaysTileAtFor,NYNH,54,G19,SW,80
+CompanyRevenue,NYNH,90
+CompanyPaysOutFull,NYNH,90
+Payout,Alice,45,5,10
+Payout,Charlie,9,1,10
+Payout,NYNH,9,1,10
+PRICE_MOVES_LOG,NYNH,90,G2,100,H2
+BuysTrain,NYNH,4,PRR,191
+
+CompanyOperates,B&O,Charlie
+LaysTileAt,B&O,53,I15,SW
+CompanyRevenue,B&O,110
+CompanyPaysOutFull,B&O,110
+Payout,Charlie,66,6,10
+Payout,B&O,11,1,10
+PRICE_MOVES_LOG,B&O,90,G2,100,H2
+BuysTrain,B&O,4,IPO,300
+
+CompanyOperates,NYC,Bob
+LaysTileAt,NYC,8,F18,NE
+CompanyRevenue,NYC,80
+CompanyPaysOutFull,NYC,80
+Payout,Bob,48,6,10
+PRICE_MOVES_LOG,NYC,76,F3,82,G3
+BuysTrain,NYC,4,IPO,300
+
+CompanyOperates,C&O,Alice
+LaysTileAt,C&O,8,G3,NW
+CompanyRevenue,C&O,70
+CompanyWithholds,C&O,70
+PRICE_MOVES_LOG,C&O,65,F6,58,E6
+
+EndOfOperatingRound,2.2
+ORWorthIncrease,Alice,2.2,53
+ORWorthIncrease,Bob,2.2,192
+ORWorthIncrease,Charlie,2.2,145
+Has,B&O,59
+Has,C&O,560
+Has,NYC,340
+Has,NYNH,1
+Has,PRR,341
+Has,Alice,153
+Has,Bob,135
+Has,Charlie,376
+StartStockRound,3
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,NYNH,Pool,100
+SELL_SHARES_LOG,Alice,4,10,40,NYNH,400
+PRICE_MOVES_LOG,NYNH,100,H2,71,H6
+IS_NOW_PRES_OF,Charlie,NYNH
diff --git a/test/data/test/1835_NatDoubleShare.report b/test/data/test/1835_NatDoubleShare.report
index 43c8fac..a6a0a67 100644
--- a/test/data/test/1835_NatDoubleShare.report
+++ b/test/data/test/1835_NatDoubleShare.report
@@ -8,3 +8,877 @@ StartOfPhase,2
BankSizeIs,10200
StartOfInitialRound
HasPriority,T1
+BuysItemFor,T3,M5,80
+FloatsWithCash,M5,80
+BuysItemFor,T2,M1,80
+FloatsWithCash,M1,80
+BuysItemFor,T1,M3,80
+FloatsWithCash,M3,80
+BuysItemFor,T1,M6,80
+FloatsWithCash,M6,80
+BuysItemFor,T2,M2,170
+FloatsWithCash,M2,170
+BuysItemFor,T3,PRES_CERT_NAME,BY,20,184
+BuysItemFor,T1,LD,190
+ALSO_GETS,T1,PRES_CERT_NAME,SX,20
+BuysItemFor,T2,HB,160
+BuysItemFor,T3,OBB,120
+ALSO_GETS,T3,CERT_NAME,BY,10
+BuysItemFor,T1,BB,130
+BuysItemFor,T2,NF,100
+ALSO_GETS,T2,CERT_NAME,BY,10
+BuysItemFor,T3,M4,160
+FloatsWithCash,M4,160
+CannotBuyAnything,T1
+CannotBuyAnything,T2
+CannotBuyAnything,T3
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,T1,120
+Has,T2,90
+Has,T3,56
+START_OR,0.0
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+ShortORExecuted
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,T1,165
+Has,T2,125
+Has,T3,66
+StartOfInitialRound
+HasPriority,T1
+CannotBuyAnything,T3
+BuysItemFor,T1,PfB,150
+ALSO_GETS,T1,CERT_NAME,BY,10
+FloatsWithCash,BY,460
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,T1,15
+Has,T2,125
+Has,T3,66
+StartStockRound,1
+HasPriority,T2
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,552
+Has,T1,15
+Has,T2,33
+Has,T3,66
+START_OR,1.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,201,H2,SW
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,E17,NW
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,6,F14,NW
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,57,G5,SW
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,202,O15,E
+LaysTileAt,BY,8,O13,NW
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,T1,1.1,54
+ORWorthIncrease,T2,1.1,23
+ORWorthIncrease,T3,1.1,-8
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+StartStockRound,2
+HasPriority,T3
+PASSES,T3
+PASSES,T1
+PASSES,T2
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,272
+Has,T1,75
+Has,T2,68
+Has,T3,76
+START_OR,2.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,8,D16,SE
+CompanyRevenue,M2,0
+CompanyDoesNotPayDividend,M2
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,4,G15,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,2,H4,NE
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,T3,15,1,100
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,8,N16,SW
+LaysTileAt,BY,4,M15,NW
+LaysTileAt,BY,6,N12,NW
+LAYS_TOKEN_ON,BY,L14,60
+CompanyRevenue,BY,130
+CompanyPaysOutFull,BY,130
+Payout,T1,13,1,10
+Payout,T2,26,2,10
+Payout,T3,39,3,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,T1,2.1,129
+ORWorthIncrease,T2,2.1,93
+ORWorthIncrease,T3,2.1,107
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,212
+Has,T1,198
+Has,T2,149
+Has,T3,165
+StartStockRound,3
+HasPriority,T3
+BUY_SHARE_LOG,T3,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,T2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,T3
+BUY_SHARE_LOG,T1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+SELL_SHARE_LOG,T1,10,BY,92
+PRICE_MOVES_LOG,BY,92,C3,88,C4
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,88
+PRICE_MOVES_LOG,BY,88,C4,86,C5
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+SELL_SHARE_LOG,T1,10,BY,86
+PRICE_MOVES_LOG,BY,86,C5,82,C6
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PASSES,T2
+PASSES,T3
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+FloatsWithCash,SX,440
+PASSES,T2
+PASSES,T3
+PASSES,T1
+
+END_SR,3
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,15
+Has,M5,25
+Has,M6,30
+Has,BY,580
+Has,SX,440
+Has,T1,16
+Has,T2,57
+Has,T3,73
+START_OR,3.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,20,LD
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,4,K3,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAtFor,M2,8,D14,NW,50
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,57,H16,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,58,F6,E
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,T3,30,1,100
+
+CompanyOperates,M5,T3
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,58,B12,SW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,SX,T1
+LaysTileAt,SX,56,I17,NE
+LaysTileAt,SX,202,H20,W
+CompanyDoesNotPayDividend,SX
+PRICE_MOVES_LOG,SX,88,C4,84,B4
+BuysTrain,SX,2+2,IPO,120
+PrivateCloses,LD
+BuysTrain,SX,2+2,IPO,120
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,69,N10,NE
+LaysTileAt,BY,5,M9,SW
+CompanyRevenue,BY,140
+CompanyPaysOutFull,BY,140
+Payout,T2,42,3,10
+Payout,T3,56,4,10
+Payout,BY,42,3,10
+PRICE_MOVES_LOG,BY,82,C6,88,D6
+
+EndOfOperatingRound,3.1
+ORWorthIncrease,T1,3.1,-100
+ORWorthIncrease,T2,3.1,150
+ORWorthIncrease,T3,3.1,145
+Has,M1,40
+Has,M2,75
+Has,M3,40
+Has,M4,45
+Has,M5,50
+Has,M6,60
+Has,BY,622
+Has,SX,200
+Has,T1,126
+Has,T2,189
+Has,T3,194
+StartStockRound,4
+HasPriority,T2
+BUY_SHARE_LOG,T2,10,BY,Pool,88
+BUY_SHARE_LOG,T3,10,BY,Pool,88
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,T2,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,T3,10,BY,Pool,88
+PASSES,T1
+PASSES,T2
+PASSES,T3
+
+END_SR,4
+PRICE_MOVES_LOG,BY,88,D6,90,D5
+SoldOut,BY,88,D6,90,D5
+Has,M1,40
+Has,M2,75
+Has,M3,40
+Has,M4,45
+Has,M5,50
+Has,M6,60
+Has,BY,622
+Has,SX,376
+Has,T1,38
+Has,T2,13
+Has,T3,18
+START_OR,4.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,8,L4,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,T2,20,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,58,B14,E
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,5,F10,SE
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,8,F8,W
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,T3,30,1,100
+
+CompanyOperates,M5,T3
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,58,B16,SE
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,8,M11,W
+LaysTileAt,BY,8,L12,SW
+CompanyRevenue,BY,140
+CompanyPaysOutFull,BY,140
+Payout,T2,56,4,10
+Payout,T3,84,6,10
+PRICE_MOVES_LOG,BY,90,D5,96,E5
+
+CompanyOperates,SX,T1
+LaysTileAt,SX,7,H18,SE
+LaysTileAt,SX,3,I15,NE
+LAYS_TOKEN_ON,SX,H20,40
+CompanyRevenue,SX,130
+CompanyPaysOutFull,SX,130
+Payout,T1,78,6,10
+Payout,T2,13,1,10
+PRICE_MOVES_LOG,SX,84,B4,88,C4
+
+EndOfOperatingRound,4.1
+ORWorthIncrease,T1,4.1,192
+ORWorthIncrease,T2,4.1,187
+ORWorthIncrease,T3,4.1,185
+Has,M1,60
+Has,M2,110
+Has,M3,60
+Has,M4,75
+Has,M5,75
+Has,M6,90
+Has,BY,622
+Has,SX,336
+Has,T1,206
+Has,T2,172
+Has,T3,167
+StartStockRound,5
+HasPriority,T1
+BUY_SHARE_LOG,T1,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,T2,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,T3,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+SharesReleased,All,BA
+PASSES,T1
+SELL_SHARES_LOG,T2,4,10,40,BY,384
+PRICE_MOVES_LOG,BY,96,E5,92,E6
+START_COMPANY_LOG,T2,BA,84,168,2,20,BANK
+SharesReleased,4 10%,PR
+PASSES,T3
+BUY_SHARE_LOG,T1,10,BY,Pool,92
+BUY_SHARE_LOG,T2,10,BA,IPO,84
+PASSES,T3
+PASSES,T1
+BUY_SHARE_LOG,T2,10,BA,IPO,84
+Autopasses,T3
+Autopasses,T1
+BUY_SHARE_LOG,T2,10,BA,IPO,84
+FloatsWithCash,BA,420
+SharesReleased,All,WT
+Autopasses,T3
+Autopasses,T1
+PASSES,T2
+
+END_SR,5
+PRICE_MOVES_LOG,SX,88,C4,92,C3
+SoldOut,SX,88,C4,92,C3
+Has,M1,60
+Has,M2,110
+Has,M3,60
+Has,M4,75
+Has,M5,75
+Has,M6,90
+Has,BY,622
+Has,SX,600
+Has,BA,420
+Has,T1,26
+Has,T2,48
+Has,T3,79
+START_OR,5.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAtFor,M1,201,I3,NW,50
+CompanyRevenue,M1,60
+CompanySplits,M1,60
+M1 receives 30
+Payout,T2,30,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,9,C17,NW
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,8,E11,SW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,T1,20,1,100
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,9,E9,SW
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,T3,30,1,100
+
+CompanyOperates,M5,T3
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,T3,25,1,100
+
+CompanyOperates,M6,T1
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,T1,30,1,100
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,3,K11,E
+LaysTileAt,BY,8,K13,SE
+CompanyRevenue,BY,140
+CompanyPaysOutFull,BY,140
+Payout,T1,14,1,10
+Payout,T3,84,6,10
+Payout,BY,42,3,10
+PRICE_MOVES_LOG,BY,92,E6,98,F6
+
+CompanyOperates,SX,T1
+CompanyRevenue,SX,130
+CompanyPaysOutFull,SX,130
+Payout,T1,91,7,10
+Payout,T3,13,1,10
+Payout,T2,26,2,10
+PRICE_MOVES_LOG,SX,92,C3,100,D3
+
+CompanyOperates,BA,T2
+CompanyDoesNotPayDividend,BA
+PRICE_MOVES_LOG,BA,84,B4,78,A4
+BuysTrain,BA,2+2,IPO,120
+All 2+2-trains are sold out, 3-trains now available
+BuysTrain,BA,3,IPO,180
+FirstTrainBought,3
+StartOfPhase,3
+
+EndOfOperatingRound,5.1
+ORWorthIncrease,T1,5.1,257
+ORWorthIncrease,T2,5.1,112
+ORWorthIncrease,T3,5.1,206
+Has,M1,40
+Has,M2,145
+Has,M3,80
+Has,M4,105
+Has,M5,100
+Has,M6,120
+Has,BY,664
+Has,SX,600
+Has,BA,120
+Has,T1,221
+Has,T2,174
+Has,T3,241
+StartStockRound,6
+HasPriority,T3
+START_COMPANY_LOG,T3,WT,84,168,2,20,BANK
+PASSES,T1
+BUY_SHARE_LOG,T2,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+SELL_SHARE_LOG,T3,10,SX,100
+PRICE_MOVES_LOG,SX,100,D3,94,D4
+BUY_SHARE_LOG,T3,10,WT,IPO,84
+PASSES,T1
+BUY_SHARE_LOG,T2,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+BUY_SHARE_LOG,T3,10,WT,IPO,84
+PASSES,T1
+PASSES,T2
+SELL_SHARE_LOG,T3,10,BY,98
+BUY_SHARE_LOG,T3,10,WT,IPO,84
+FloatsWithCash,WT,420
+SharesReleased,All,HE
+START_COMPANY_LOG,T1,HE,84,168,2,20,BANK
+PASSES,T2
+PASSES,T3
+PASSES,T1
+
+END_SR,6
+Has,M1,40
+Has,M2,145
+Has,M3,80
+Has,M4,105
+Has,M5,100
+Has,M6,120
+Has,BY,664
+Has,SX,600
+Has,BA,288
+Has,WT,420
+Has,T1,53
+Has,T2,6
+Has,T3,19
+START_OR,6.1
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,207,H2,E
+CompanyRevenue,M1,70
+CompanySplits,M1,70
+M1 receives 35
+Payout,T2,35,1,100
+
+CompanyOperates,M2,T2
+LaysTileAt,M2,209,E19,SE
+CompanyRevenue,M2,80
+CompanySplits,M2,80
+M2 receives 40
+Payout,T2,40,1,100
+BuysTrain,M2,3,IPO,180
+
+CompanyOperates,M3,T1
+LaysTileAt,M3,14,F14,W
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,T1,25,1,100
+BuysTrain,M3,2,M6,105
+
+CompanyOperates,M4,T3
+LaysTileAt,M4,205,G5,W
+CompanyRevenue,M4,80
+CompanySplits,M4,80
+M4 receives 40
+Payout,T3,40,1,100
+
+CompanyOperates,M5,T3
+LaysTileAt,M5,8,F18,NE
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,T3,40,1,100
+BuysTrain,M5,2,BY,140
+
+CompanyOperates,M6,T1
+LaysTileAt,M6,12,A11,W
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2+2,SX,225
+
+CompanyOperates,BY,T3
+LaysTileAt,BY,15,M9,NW
+CompanyRevenue,BY,120
+CompanyPaysOutFull,BY,120
+Payout,T1,12,1,10
+Payout,T3,60,5,10
+Payout,BY,48,4,10
+PRICE_MOVES_LOG,BY,98,F6,106,G6
+BuysTrain,BY,3,IPO,180
+
+CompanyOperates,SX,T1
+LaysTileAt,SX,208,H20,W
+CompanyRevenue,SX,90
+CompanyPaysOutFull,SX,90
+Payout,T1,63,7,10
+Payout,T2,18,2,10
+Payout,SX,9,1,10
+PRICE_MOVES_LOG,SX,94,D4,102,E4
+BuysTrain,SX,3,IPO,180
+All 3-trains are sold out, 3+3-trains now available
+BuysTrain,SX,3+3,IPO,270
+FirstTrainBought,3+3
+
+CompanyOperates,WT,T3
+LaysTileAt,WT,204,K11,NE
+CompanyDoesNotPayDividend,WT
+PRICE_MOVES_LOG,WT,84,B4,78,A4
+BuysTrain,WT,3+3,IPO,270
+BuysTrain,WT,2,M4,1
+
+CompanyOperates,BA,T2
+LaysTileAt,BA,212,L6,SW
+LAYS_TOKEN_ON,BA,H2,80
+CompanyRevenue,BA,170
+CompanyPaysOutFull,BA,170
+Payout,T2,119,7,10
+PRICE_MOVES_LOG,BA,78,A4,84,B4
+
+EndOfOperatingRound,6.1
+ORWorthIncrease,T1,6.1,204
+ORWorthIncrease,T2,6.1,305
+ORWorthIncrease,T3,6.1,160
+Has,M1,75
+Has,M2,5
+Has,M3,0
+Has,M4,146
+Has,M5,0
+Has,M6,0
+Has,BY,672
+Has,SX,384
+Has,BA,208
+Has,WT,149
+Has,T1,193
+Has,T2,253
+Has,T3,169
+START_OR,6.2
+ReceivesFor,T2,5,NF
+ReceivesFor,T3,10,OBB
+ReceivesFor,T1,15,PfB
+ReceivesFor,T1,25,BB
+ReceivesFor,T2,30,HB
+
+CompanyOperates,M1,T2
+LaysTileAt,M1,207,I3,SW
+...
[truncated message content] |
|
From: Erik V. <ev...@us...> - 2011-11-24 21:58:24
|
dev/null |binary
rails/game/MapHex.java | 2
rails/game/OperatingRound.java | 27
test/data/test/1835_NatDoubleShare.report | 884 ------------------
test/data/test/1835_NatSingleShare.report | 76 -
test/data/test/1835_PRHasTwoExcessTrains.rails |binary
test/data/test/1835_PRHasTwoExcessTrains.report | 1141 ++++++++++++++++++++++++
7 files changed, 1162 insertions(+), 968 deletions(-)
New commits:
commit 50a81714eb68f951868feb7d0f3d7d32241ae648
Author: Erik Vos <eri...@xs...>
Date: Thu Nov 24 22:09:55 2011 +0100
Fixed offering special token lays where that is not actually allowed.
Cases:
- Company has no tokens.
- Company already has token on target location
- Target location is blocked (e.g. another home token is not yet placed).
==> THIS FIX MAY BREAK EXISTING SAVED FILES.
Three test cases had to be withdrawn because of this fix.
diff --git a/rails/game/MapHex.java b/rails/game/MapHex.java
index a1d32ab..0e1af5c 100644
--- a/rails/game/MapHex.java
+++ b/rails/game/MapHex.java
@@ -1194,7 +1194,7 @@ StationHolder, TokenHolder {
return isBlockedForTokenLays.booleanValue();
} else if (homes != null && !homes.isEmpty()) {
Stop cityToLay = this.getStop(cityNumber);
- if (cityToLay == null) { // city does not exist, this does not block itself
+ if (cityNumber > 0 && cityToLay == null) { // city does not exist, this does not block itself
return false;
}
// check if the city is potential home for other companies
diff --git a/rails/game/OperatingRound.java b/rails/game/OperatingRound.java
index 604caeb..8d6dac3 100644
--- a/rails/game/OperatingRound.java
+++ b/rails/game/OperatingRound.java
@@ -1940,22 +1940,35 @@ public class OperatingRound extends Round implements Observer {
/* Special-property tile lays */
currentSpecialTokenLays.clear();
- if (!operatingCompany.get().canUseSpecialProperties()) return;
+ PublicCompanyI company = operatingCompany.get();
+ if (!company.canUseSpecialProperties()) return;
+ // Check if the company still has tokens
+ if (company.getNumberOfFreeBaseTokens() == 0) return;
/*
* In 1835, this only applies to major companies. TODO: For now,
* hardcode this, but it must become configurable later.
*/
- if (operatingCompany.get().getType().getName().equals("Minor")) return;
+ // Removed EV 24-11-2011 - entirely redundant; why did I ever do this??
+ //if (operatingCompany.get().getType().getName().equals("Minor")) return;
for (SpecialTokenLay stl : getSpecialProperties(SpecialTokenLay.class)) {
- log.debug("Spec.prop:" + stl);
+ // If the special tile lay is not extra, it is only allowed if
+ // normal tile lays are also (still) allowed
if (stl.getTokenClass().equals(BaseToken.class)
&& (stl.isExtra() || !currentNormalTokenLays.isEmpty())) {
- /*
- * If the special tile lay is not extra, it is only allowed if
- * normal tile lays are also (still) allowed
- */
+
+ // If this STL is location specific, check if there
+ // isn't already a token of this company or if it is blocked
+ List<MapHex> locations = stl.getLocations();
+ if (locations != null && !locations.isEmpty()) {
+ boolean canLay = false;
+ for (MapHex location : locations) {
+ if (!location.hasTokenOfCompany(company)
+ && !location.isBlockedForTokenLays(company, 0)) canLay = true;
+ }
+ if (!canLay) continue;
+ }
currentSpecialTokenLays.add(new LayBaseToken(stl));
}
}
diff --git a/test/data/test/1835_NatDoubleShare.rails b/test/data/test/1835_NatDoubleShare.rails
deleted file mode 100644
index 822e7c2..0000000
Binary files a/test/data/test/1835_NatDoubleShare.rails and /dev/null differ
diff --git a/test/data/test/1835_NatDoubleShare.report b/test/data/test/1835_NatDoubleShare.report
deleted file mode 100644
index a6a0a67..0000000
--- a/test/data/test/1835_NatDoubleShare.report
+++ /dev/null
@@ -1,884 +0,0 @@
-GameIs,1835
-PlayerIs,1,T1
-PlayerIs,2,T2
-PlayerIs,3,T3
-PlayerCash,600
-BankHas,10200
-StartOfPhase,2
-BankSizeIs,10200
-StartOfInitialRound
-HasPriority,T1
-BuysItemFor,T3,M5,80
-FloatsWithCash,M5,80
-BuysItemFor,T2,M1,80
-FloatsWithCash,M1,80
-BuysItemFor,T1,M3,80
-FloatsWithCash,M3,80
-BuysItemFor,T1,M6,80
-FloatsWithCash,M6,80
-BuysItemFor,T2,M2,170
-FloatsWithCash,M2,170
-BuysItemFor,T3,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T1,LD,190
-ALSO_GETS,T1,PRES_CERT_NAME,SX,20
-BuysItemFor,T2,HB,160
-BuysItemFor,T3,OBB,120
-ALSO_GETS,T3,CERT_NAME,BY,10
-BuysItemFor,T1,BB,130
-BuysItemFor,T2,NF,100
-ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,M4,160
-FloatsWithCash,M4,160
-CannotBuyAnything,T1
-CannotBuyAnything,T2
-CannotBuyAnything,T3
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,120
-Has,T2,90
-Has,T3,56
-START_OR,0.0
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-ShortORExecuted
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,165
-Has,T2,125
-Has,T3,66
-StartOfInitialRound
-HasPriority,T1
-CannotBuyAnything,T3
-BuysItemFor,T1,PfB,150
-ALSO_GETS,T1,CERT_NAME,BY,10
-FloatsWithCash,BY,460
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,460
-Has,T1,15
-Has,T2,125
-Has,T3,66
-StartStockRound,1
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-PASSES,T3
-PASSES,T1
-PASSES,T2
-
-END_SR,1
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,552
-Has,T1,15
-Has,T2,33
-Has,T3,66
-START_OR,1.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,201,H2,SW
-CompanyDoesNotPayDividend,M1
-BuysTrain,M1,2,IPO,80
-FirstTrainBought,2
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,E17,NW
-CompanyDoesNotPayDividend,M2
-BuysTrain,M2,2,IPO,80
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,6,F14,NW
-CompanyDoesNotPayDividend,M3
-BuysTrain,M3,2,IPO,80
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,57,G5,SW
-CompanyDoesNotPayDividend,M4
-BuysTrain,M4,2,IPO,80
-BuysTrain,M4,2,IPO,80
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,D18,NE
-CompanyDoesNotPayDividend,M5
-BuysTrain,M5,2,IPO,80
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,9,B10,NW
-CompanyDoesNotPayDividend,M6
-BuysTrain,M6,2,IPO,80
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,202,O15,E
-LaysTileAt,BY,8,O13,NW
-CompanyDoesNotPayDividend,BY
-PRICE_MOVES_LOG,BY,92,C3,86,B3
-BuysTrain,BY,2,IPO,80
-BuysTrain,BY,2,IPO,80
-All 2-trains are sold out, 2+2-trains now available
-BuysTrain,BY,2+2,IPO,120
-FirstTrainBought,2+2
-
-EndOfOperatingRound,1.1
-ORWorthIncrease,T1,1.1,54
-ORWorthIncrease,T2,1.1,23
-ORWorthIncrease,T3,1.1,-8
-Has,M1,0
-Has,M2,90
-Has,M3,0
-Has,M4,0
-Has,M5,0
-Has,M6,0
-Has,BY,272
-Has,T1,75
-Has,T2,68
-Has,T3,76
-StartStockRound,2
-HasPriority,T3
-PASSES,T3
-PASSES,T1
-PASSES,T2
-
-END_SR,2
-Has,M1,0
-Has,M2,90
-Has,M3,0
-Has,M4,0
-Has,M5,0
-Has,M6,0
-Has,BY,272
-Has,T1,75
-Has,T2,68
-Has,T3,76
-START_OR,2.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,9,J2,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,D16,SE
-CompanyRevenue,M2,0
-CompanyDoesNotPayDividend,M2
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,4,G15,NW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,2,H4,NE
-CompanyRevenue,M4,30
-CompanySplits,M4,30
-M4 receives 15
-Payout,T3,15,1,100
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,C19,E
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,6,A11,NW
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,N16,SW
-LaysTileAt,BY,4,M15,NW
-LaysTileAt,BY,6,N12,NW
-LAYS_TOKEN_ON,BY,L14,60
-CompanyRevenue,BY,130
-CompanyPaysOutFull,BY,130
-Payout,T1,13,1,10
-Payout,T2,26,2,10
-Payout,T3,39,3,10
-PRICE_MOVES_LOG,BY,86,B3,92,C3
-
-EndOfOperatingRound,2.1
-ORWorthIncrease,T1,2.1,129
-ORWorthIncrease,T2,2.1,93
-ORWorthIncrease,T3,2.1,107
-Has,M1,20
-Has,M2,90
-Has,M3,20
-Has,M4,15
-Has,M5,25
-Has,M6,30
-Has,BY,212
-Has,T1,198
-Has,T2,149
-Has,T3,165
-StartStockRound,3
-HasPriority,T3
-BUY_SHARE_LOG,T3,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-BUY_SHARE_LOG,T1,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-BUY_SHARE_LOG,T2,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-PASSES,T3
-BUY_SHARE_LOG,T1,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-SELL_SHARE_LOG,T1,10,BY,92
-PRICE_MOVES_LOG,BY,92,C3,88,C4
-PASSES,T2
-PASSES,T3
-SELL_SHARE_LOG,T1,10,BY,88
-PRICE_MOVES_LOG,BY,88,C4,86,C5
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PASSES,T2
-PASSES,T3
-SELL_SHARE_LOG,T1,10,BY,86
-PRICE_MOVES_LOG,BY,86,C5,82,C6
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PASSES,T2
-PASSES,T3
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-FloatsWithCash,SX,440
-PASSES,T2
-PASSES,T3
-PASSES,T1
-
-END_SR,3
-Has,M1,20
-Has,M2,90
-Has,M3,20
-Has,M4,15
-Has,M5,25
-Has,M6,30
-Has,BY,580
-Has,SX,440
-Has,T1,16
-Has,T2,57
-Has,T3,73
-START_OR,3.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,4,K3,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAtFor,M2,8,D14,NW,50
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,57,H16,NW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,58,F6,E
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,58,B12,SW
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,56,I17,NE
-LaysTileAt,SX,202,H20,W
-CompanyDoesNotPayDividend,SX
-PRICE_MOVES_LOG,SX,88,C4,84,B4
-BuysTrain,SX,2+2,IPO,120
-PrivateCloses,LD
-BuysTrain,SX,2+2,IPO,120
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,69,N10,NE
-LaysTileAt,BY,5,M9,SW
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T2,42,3,10
-Payout,T3,56,4,10
-Payout,BY,42,3,10
-PRICE_MOVES_LOG,BY,82,C6,88,D6
-
-EndOfOperatingRound,3.1
-ORWorthIncrease,T1,3.1,-100
-ORWorthIncrease,T2,3.1,150
-ORWorthIncrease,T3,3.1,145
-Has,M1,40
-Has,M2,75
-Has,M3,40
-Has,M4,45
-Has,M5,50
-Has,M6,60
-Has,BY,622
-Has,SX,200
-Has,T1,126
-Has,T2,189
-Has,T3,194
-StartStockRound,4
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,BY,Pool,88
-BUY_SHARE_LOG,T3,10,BY,Pool,88
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T2,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T3,10,BY,Pool,88
-PASSES,T1
-PASSES,T2
-PASSES,T3
-
-END_SR,4
-PRICE_MOVES_LOG,BY,88,D6,90,D5
-SoldOut,BY,88,D6,90,D5
-Has,M1,40
-Has,M2,75
-Has,M3,40
-Has,M4,45
-Has,M5,50
-Has,M6,60
-Has,BY,622
-Has,SX,376
-Has,T1,38
-Has,T2,13
-Has,T3,18
-START_OR,4.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,8,L4,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,58,B14,E
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,5,F10,SE
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,8,F8,W
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,58,B16,SE
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,M11,W
-LaysTileAt,BY,8,L12,SW
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T2,56,4,10
-Payout,T3,84,6,10
-PRICE_MOVES_LOG,BY,90,D5,96,E5
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,7,H18,SE
-LaysTileAt,SX,3,I15,NE
-LAYS_TOKEN_ON,SX,H20,40
-CompanyRevenue,SX,130
-CompanyPaysOutFull,SX,130
-Payout,T1,78,6,10
-Payout,T2,13,1,10
-PRICE_MOVES_LOG,SX,84,B4,88,C4
-
-EndOfOperatingRound,4.1
-ORWorthIncrease,T1,4.1,192
-ORWorthIncrease,T2,4.1,187
-ORWorthIncrease,T3,4.1,185
-Has,M1,60
-Has,M2,110
-Has,M3,60
-Has,M4,75
-Has,M5,75
-Has,M6,90
-Has,BY,622
-Has,SX,336
-Has,T1,206
-Has,T2,172
-Has,T3,167
-StartStockRound,5
-HasPriority,T1
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T2,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T3,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-SharesReleased,All,BA
-PASSES,T1
-SELL_SHARES_LOG,T2,4,10,40,BY,384
-PRICE_MOVES_LOG,BY,96,E5,92,E6
-START_COMPANY_LOG,T2,BA,84,168,2,20,BANK
-SharesReleased,4 10%,PR
-PASSES,T3
-BUY_SHARE_LOG,T1,10,BY,Pool,92
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PASSES,T3
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-Autopasses,T3
-Autopasses,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-FloatsWithCash,BA,420
-SharesReleased,All,WT
-Autopasses,T3
-Autopasses,T1
-PASSES,T2
-
-END_SR,5
-PRICE_MOVES_LOG,SX,88,C4,92,C3
-SoldOut,SX,88,C4,92,C3
-Has,M1,60
-Has,M2,110
-Has,M3,60
-Has,M4,75
-Has,M5,75
-Has,M6,90
-Has,BY,622
-Has,SX,600
-Has,BA,420
-Has,T1,26
-Has,T2,48
-Has,T3,79
-START_OR,5.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAtFor,M1,201,I3,NW,50
-CompanyRevenue,M1,60
-CompanySplits,M1,60
-M1 receives 30
-Payout,T2,30,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,9,C17,NW
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,8,E11,SW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,9,E9,SW
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,3,K11,E
-LaysTileAt,BY,8,K13,SE
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T1,14,1,10
-Payout,T3,84,6,10
-Payout,BY,42,3,10
-PRICE_MOVES_LOG,BY,92,E6,98,F6
-
-CompanyOperates,SX,T1
-CompanyRevenue,SX,130
-CompanyPaysOutFull,SX,130
-Payout,T1,91,7,10
-Payout,T3,13,1,10
-Payout,T2,26,2,10
-PRICE_MOVES_LOG,SX,92,C3,100,D3
-
-CompanyOperates,BA,T2
-CompanyDoesNotPayDividend,BA
-PRICE_MOVES_LOG,BA,84,B4,78,A4
-BuysTrain,BA,2+2,IPO,120
-All 2+2-trains are sold out, 3-trains now available
-BuysTrain,BA,3,IPO,180
-FirstTrainBought,3
-StartOfPhase,3
-
-EndOfOperatingRound,5.1
-ORWorthIncrease,T1,5.1,257
-ORWorthIncrease,T2,5.1,112
-ORWorthIncrease,T3,5.1,206
-Has,M1,40
-Has,M2,145
-Has,M3,80
-Has,M4,105
-Has,M5,100
-Has,M6,120
-Has,BY,664
-Has,SX,600
-Has,BA,120
-Has,T1,221
-Has,T2,174
-Has,T3,241
-StartStockRound,6
-HasPriority,T3
-START_COMPANY_LOG,T3,WT,84,168,2,20,BANK
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-SELL_SHARE_LOG,T3,10,SX,100
-PRICE_MOVES_LOG,SX,100,D3,94,D4
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-PASSES,T1
-PASSES,T2
-SELL_SHARE_LOG,T3,10,BY,98
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-FloatsWithCash,WT,420
-SharesReleased,All,HE
-START_COMPANY_LOG,T1,HE,84,168,2,20,BANK
-PASSES,T2
-PASSES,T3
-PASSES,T1
-
-END_SR,6
-Has,M1,40
-Has,M2,145
-Has,M3,80
-Has,M4,105
-Has,M5,100
-Has,M6,120
-Has,BY,664
-Has,SX,600
-Has,BA,288
-Has,WT,420
-Has,T1,53
-Has,T2,6
-Has,T3,19
-START_OR,6.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,207,H2,E
-CompanyRevenue,M1,70
-CompanySplits,M1,70
-M1 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,209,E19,SE
-CompanyRevenue,M2,80
-CompanySplits,M2,80
-M2 receives 40
-Payout,T2,40,1,100
-BuysTrain,M2,3,IPO,180
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,14,F14,W
-CompanyRevenue,M3,50
-CompanySplits,M3,50
-M3 receives 25
-Payout,T1,25,1,100
-BuysTrain,M3,2,M6,105
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,205,G5,W
-CompanyRevenue,M4,80
-CompanySplits,M4,80
-M4 receives 40
-Payout,T3,40,1,100
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,F18,NE
-CompanyRevenue,M5,80
-CompanySplits,M5,80
-M5 receives 40
-Payout,T3,40,1,100
-BuysTrain,M5,2,BY,140
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,12,A11,W
-CompanyDoesNotPayDividend,M6
-BuysTrain,M6,2+2,SX,225
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,15,M9,NW
-CompanyRevenue,BY,120
-CompanyPaysOutFull,BY,120
-Payout,T1,12,1,10
-Payout,T3,60,5,10
-Payout,BY,48,4,10
-PRICE_MOVES_LOG,BY,98,F6,106,G6
-BuysTrain,BY,3,IPO,180
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,208,H20,W
-CompanyRevenue,SX,90
-CompanyPaysOutFull,SX,90
-Payout,T1,63,7,10
-Payout,T2,18,2,10
-Payout,SX,9,1,10
-PRICE_MOVES_LOG,SX,94,D4,102,E4
-BuysTrain,SX,3,IPO,180
-All 3-trains are sold out, 3+3-trains now available
-BuysTrain,SX,3+3,IPO,270
-FirstTrainBought,3+3
-
-CompanyOperates,WT,T3
-LaysTileAt,WT,204,K11,NE
-CompanyDoesNotPayDividend,WT
-PRICE_MOVES_LOG,WT,84,B4,78,A4
-BuysTrain,WT,3+3,IPO,270
-BuysTrain,WT,2,M4,1
-
-CompanyOperates,BA,T2
-LaysTileAt,BA,212,L6,SW
-LAYS_TOKEN_ON,BA,H2,80
-CompanyRevenue,BA,170
-CompanyPaysOutFull,BA,170
-Payout,T2,119,7,10
-PRICE_MOVES_LOG,BA,78,A4,84,B4
-
-EndOfOperatingRound,6.1
-ORWorthIncrease,T1,6.1,204
-ORWorthIncrease,T2,6.1,305
-ORWorthIncrease,T3,6.1,160
-Has,M1,75
-Has,M2,5
-Has,M3,0
-Has,M4,146
-Has,M5,0
-Has,M6,0
-Has,BY,672
-Has,SX,384
-Has,BA,208
-Has,WT,149
-Has,T1,193
-Has,T2,253
-Has,T3,169
-START_OR,6.2
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,207,I3,SW
-CompanyRevenue,M1,80
-CompanySplits,M1,80
-M1 receives 40
-Payout,T2,40,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,F20,NE
-CompanyRevenue,M2,170
-CompanySplits,M2,170
-M2 receives 85
-Payout,T2,85,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,8,D10,NE
-CompanyRevenue,M3,90
-CompanySplits,M3,90
-M3 receives 45
-Payout,T1,45,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,24,D10,NE
-CompanyRevenue,M4,40
-CompanySplits,M4,40
-M4 receives 20
-Payout,T3,20,1,100
-BuysTrain,M4,2,BY,166
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,23,D18,NW
-CompanyRevenue,M5,140
-CompanySplits,M5,140
-M5 receives 70
-Payout,T3,70,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,203,B12,W
-CompanyRevenue,M6,80
-CompanySplits,M6,80
-M6 receives 40
-Payout,T1,40,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,J10,SE
-LAYS_TOKEN_ON,BY,J8,120
-CompanyRevenue,BY,160
-CompanyPaysOutFull,BY,160
-Payout,T1,16,1,10
-Payout,T3,80,5,10
-Payout,BY,64,4,10
-PRICE_MOVES_LOG,BY,106,G6,114,G5
-BuysTrain,BY,2,M5,1
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,206,H16,SW
-LAYS_TOKEN_ON,SX,E19,60
-CompanyRevenue,SX,320
-CompanyPaysOutFull,SX,320
-Payout,T1,224,7,10
-Payout,T2,64,2,10
-Payout,SX,32,1,10
-PRICE_MOVES_LOG,SX,102,E4,112,F4
-
-CompanyOperates,BA,T2
-LaysTileAt,BA,9,K5,NW
-CompanyRevenue,BA,190
-CompanyPaysOutFull,BA,190
-Payout,T2,133,7,10
-PRICE_MOVES_LOG,BA,84,B4,88,C4
-
-CompanyOperates,WT,T3
-LaysTileAt,WT,1,L8,W
-CompanyRevenue,WT,160
-CompanyPaysOutFull,WT,160
-Payout,T3,80,5,10
-PRICE_MOVES_LOG,WT,78,A4,84,B4
-
-EndOfOperatingRound,6.2
-ORWorthIncrease,T1,6.2,443
-ORWorthIncrease,T2,6.2,405
-ORWorthIncrease,T3,6.2,330
-Has,M1,115
-Has,M2,90
-Has,M3,45
-Has,M4,0
-Has,M5,71
-Has,M6,40
-Has,BY,781
-Has,SX,356
-Has,BA,208
-Has,WT,149
-Has,T1,558
-Has,T2,610
-Has,T3,429
-StartStockRound,7
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,PR,IPO,154
-BUY_SHARE_LOG,T3,10,PR,IPO,154
-BUY_SHARE_LOG,T1,10,PR,IPO,154
-BUY_SHARE_LOG,T2,10,PR,IPO,154
-BUY_SHARE_LOG,T3,10,BY,Pool,114
-BUY_SHARE_LOG,T1,10,SX,Pool,112
-BUY_SHARE_LOG,T2,10,BY,Pool,114
-BUY_SHARE_LOG,T3,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-PASSES,T1
-PASSES,T2
-SELL_SHARE_LOG,T3,10,BY,114
-PRICE_MOVES_LOG,BY,114,G5,106,G6
-BUY_SHARE_LOG,T3,20,BA,IPO,168
-PriceIsPaidTo,168,BA
-PASSES,T1
-SELL_SHARE_LOG,T2,10,BY,106
-BUY_SHARE_LOG,T2,20,BA,T3,264
diff --git a/test/data/test/1835_NatSingleShare.rails b/test/data/test/1835_NatSingleShare.rails
deleted file mode 100644
index 84da84d..0000000
Binary files a/test/data/test/1835_NatSingleShare.rails and /dev/null differ
diff --git a/test/data/test/1835_NatSingleShare.report b/test/data/test/1835_NatSingleShare.report
deleted file mode 100644
index f0b1381..0000000
--- a/test/data/test/1835_NatSingleShare.report
+++ /dev/null
@@ -1,76 +0,0 @@
-GameIs,1835
-PlayerIs,1,T1
-PlayerIs,2,T2
-PlayerIs,3,T3
-PlayerCash,600
-BankHas,10200
-StartOfPhase,2
-BankSizeIs,10200
-StartOfInitialRound
-HasPriority,T1
-BuysItemFor,T3,M5,80
-FloatsWithCash,M5,80
-BuysItemFor,T1,M1,80
-FloatsWithCash,M1,80
-BuysItemFor,T2,M3,80
-FloatsWithCash,M3,80
-BuysItemFor,T3,M6,80
-FloatsWithCash,M6,80
-BuysItemFor,T1,M2,170
-FloatsWithCash,M2,170
-BuysItemFor,T2,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T3,LD,190
-ALSO_GETS,T3,PRES_CERT_NAME,SX,20
-BuysItemFor,T1,HB,160
-BuysItemFor,T2,OBB,120
-ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,BB,130
-BuysItemFor,T1,NF,100
-ALSO_GETS,T1,CERT_NAME,BY,10
-BuysItemFor,T2,M4,160
-FloatsWithCash,M4,160
-CannotBuyAnything,T3
-CannotBuyAnything,T1
-CannotBuyAnything,T2
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,90
-Has,T2,56
-Has,T3,120
-START_OR,0.0
-ReceivesFor,T1,5,NF
-ReceivesFor,T2,10,OBB
-ReceivesFor,T3,20,LD
-ReceivesFor,T3,25,BB
-ReceivesFor,T1,30,HB
-ShortORExecuted
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,125
-Has,T2,66
-Has,T3,165
-StartOfInitialRound
-HasPriority,T3
-BuysItemFor,T3,PfB,150
-ALSO_GETS,T3,CERT_NAME,BY,10
-FloatsWithCash,BY,460
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,460
-Has,T1,125
-Has,T2,66
-Has,T3,15
-StartStockRound,1
-HasPriority,T1
diff --git a/test/data/test/1835_PRHasTwoExcessTrains.rails b/test/data/test/1835_PRHasTwoExcessTrains.rails
new file mode 100644
index 0000000..433fcdb
Binary files /dev/null and b/test/data/test/1835_PRHasTwoExcessTrains.rails differ
diff --git a/test/data/test/1835_PRHasTwoExcessTrains.report b/test/data/test/1835_PRHasTwoExcessTrains.report
new file mode 100644
index 0000000..2049760
--- /dev/null
+++ b/test/data/test/1835_PRHasTwoExcessTrains.report
@@ -0,0 +1,1141 @@
+GameIs,1835
+PlayerIs,1,Alice
+PlayerIs,2,Bob
+PlayerIs,3,Charlie
+PlayerCash,600
+BankHas,10200
+StartOfPhase,2
+BankSizeIs,10200
+StartOfInitialRound
+HasPriority,Alice
+BuysItemFor,Alice,NF,100
+ALSO_GETS,Alice,CERT_NAME,BY,10
+BuysItemFor,Bob,M1,80
+FloatsWithCash,M1,80
+BuysItemFor,Charlie,LD,190
+ALSO_GETS,Charlie,PRES_CERT_NAME,SX,20
+BuysItemFor,Alice,M2,170
+FloatsWithCash,M2,170
+BuysItemFor,Bob,M3,80
+FloatsWithCash,M3,80
+BuysItemFor,Charlie,M4,160
+FloatsWithCash,M4,160
+BuysItemFor,Alice,PRES_CERT_NAME,BY,20,184
+BuysItemFor,Bob,BB,130
+BuysItemFor,Charlie,HB,160
+BuysItemFor,Alice,OBB,120
+ALSO_GETS,Alice,CERT_NAME,BY,10
+BuysItemFor,Bob,PfB,150
+ALSO_GETS,Bob,CERT_NAME,BY,10
+FloatsWithCash,BY,460
+BuysItemFor,Charlie,M5,80
+FloatsWithCash,M5,80
+CannotBuyAnything,Alice
+BuysItemFor,Bob,M6,80
+FloatsWithCash,M6,80
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,Alice,26
+Has,Bob,80
+Has,Charlie,10
+StartStockRound,1
+HasPriority,Charlie
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,Alice,26
+Has,Bob,80
+Has,Charlie,10
+START_OR,1.1
+ReceivesFor,Alice,5,NF
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,202,H2,W
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,8,E17,NW
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,6,F14,NW
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,57,G5,SW
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,Alice
+LAYS_FREE_TOKEN_ON,BY,L14
+PrivateCloses,NF
+LaysTileAtFor,BY,9,K15,SW,70
+LaysTileAt,BY,1,I17,SW
+LaysTileAt,BY,58,M15,SW
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,Alice,1.1,-109
+ORWorthIncrease,Bob,1.1,34
+ORWorthIncrease,Charlie,1.1,50
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,110
+Has,Alice,41
+Has,Bob,120
+Has,Charlie,60
+StartStockRound,2
+HasPriority,Charlie
+PASSES,Charlie
+PASSES,Alice
+BUY_SHARE_LOG,Bob,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,202
+Has,Alice,41
+Has,Bob,28
+Has,Charlie,60
+START_OR,2.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,69,H4,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,8,D16,SE
+CompanyRevenue,M2,0
+CompanyDoesNotPayDividend,M2
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,4,G15,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,4,F6,SW
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,Charlie,30,1,100
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,Charlie,25,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,Bob,30,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,202,H20,W
+LaysTileAt,BY,9,F20,NW
+LAYS_TOKEN_ON,BY,H20,160
+CompanyRevenue,BY,160
+CompanyPaysOutFull,BY,160
+Payout,Bob,32,2,10
+Payout,Alice,64,4,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,Alice,2.1,98
+ORWorthIncrease,Bob,2.1,154
+ORWorthIncrease,Charlie,2.1,105
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,30
+Has,M5,25
+Has,M6,30
+Has,BY,42
+Has,Alice,115
+Has,Bob,170
+Has,Charlie,165
+StartStockRound,3
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,Alice,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,Bob,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,3
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,30
+Has,M5,25
+Has,M6,30
+Has,BY,318
+Has,Alice,23
+Has,Bob,78
+Has,Charlie,73
+START_OR,3.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAtFor,M2,8,D14,NW,50
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,Alice,35,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,6,H16,SE
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,9,E7,SW
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,Charlie,30,1,100
+
+CompanyOperates,M5,Charlie
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,Charlie,25,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,58,B12,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,Bob,30,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,8,N14,NE
+LaysTileAt,BY,201,O15,NW
+CompanyRevenue,BY,190
+CompanyPaysOutFull...
[truncated message content] |
|
From: Erik V. <ev...@us...> - 2012-05-09 12:16:51
|
rails/game/StockRound.java | 2
test/data/test/1835_SellDoubleShare.rails |binary
test/data/test/1835_SellDoubleShare.report | 1638 +++++++++++++++++++++++++++++
3 files changed, 1639 insertions(+), 1 deletion(-)
New commits:
commit a20803ce6fd4aadb3a8d0cb84c01b0338ed48d54
Author: Erik Vos <eri...@xs...>
Date: Wed May 9 14:16:10 2012 +0200
1835: prevent selling double non-president share in parts.
Follow-up fix to previous commit.
Test case added.
diff --git a/rails/game/StockRound.java b/rails/game/StockRound.java
index 91a4c6e..7f03de7 100644
--- a/rails/game/StockRound.java
+++ b/rails/game/StockRound.java
@@ -473,7 +473,7 @@ public class StockRound extends Round {
number = shareCountPerUnit[shareSize];
// If you can dump a presidency, you may sell additional single shares that you don't own
- if (shareSize == 1) number += extraSingleShares;
+ if (dumpThreshold > 0 && shareSize == 1) number += extraSingleShares;
if (number == 0) continue;
/* In some games (1856), a just bought share may not be sold */
diff --git a/test/data/test/1835_SellDoubleShare.rails b/test/data/test/1835_SellDoubleShare.rails
new file mode 100644
index 0000000..1070978
Binary files /dev/null and b/test/data/test/1835_SellDoubleShare.rails differ
diff --git a/test/data/test/1835_SellDoubleShare.report b/test/data/test/1835_SellDoubleShare.report
new file mode 100644
index 0000000..ac20c94
--- /dev/null
+++ b/test/data/test/1835_SellDoubleShare.report
@@ -0,0 +1,1638 @@
+GameIs,1835
+PlayerIs,1,m1
+PlayerIs,2,m2
+PlayerIs,3,m3
+PlayerIs,4,m4
+PlayerCash,475
+BankHas,10100
+StartOfPhase,2
+BankSizeIs,10100
+StartOfInitialRound
+HasPriority,m1
+BuysItemFor,m4,NF,100
+ALSO_GETS,m4,CERT_NAME,BY,10
+BuysItemFor,m3,HB,160
+BuysItemFor,m2,BB,130
+BuysItemFor,m1,OBB,120
+ALSO_GETS,m1,CERT_NAME,BY,10
+BuysItemFor,m1,PfB,150
+ALSO_GETS,m1,CERT_NAME,BY,10
+BuysItemFor,m2,LD,190
+ALSO_GETS,m2,PRES_CERT_NAME,SX,20
+BuysItemFor,m3,M2,170
+FloatsWithCash,M2,170
+BuysItemFor,m4,M3,80
+FloatsWithCash,M3,80
+BuysItemFor,m1,M4,160
+FloatsWithCash,M4,160
+BuysItemFor,m2,M5,80
+FloatsWithCash,M5,80
+BuysItemFor,m3,M1,80
+FloatsWithCash,M1,80
+BuysItemFor,m4,M6,80
+FloatsWithCash,M6,80
+CannotBuyAnything,m1
+CannotBuyAnything,m2
+CannotBuyAnything,m3
+BuysItemFor,m4,PRES_CERT_NAME,BY,20,184
+FloatsWithCash,BY,460
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,m1,45
+Has,m2,75
+Has,m3,65
+Has,m4,31
+StartStockRound,1
+HasPriority,m1
+PASSES,m1
+PASSES,m2
+PASSES,m3
+PASSES,m4
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,m1,45
+Has,m2,75
+Has,m3,65
+Has,m4,31
+START_OR,1.1
+ReceivesFor,m4,5,NF
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,20,LD
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,201,H2,SW
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,8,E17,E
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,6,F14,SE
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,5,G5,SE
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,201,O15,NE
+LaysTileAt,BY,9,N14,NW
+LAYS_FREE_TOKEN_ON,BY,L14
+PrivateCloses,NF
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,m1,1.1,13
+ORWorthIncrease,m2,1.1,45
+ORWorthIncrease,m3,1.1,30
+ORWorthIncrease,m4,1.1,-113
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,80
+Has,M5,0
+Has,M6,0
+Has,BY,300
+Has,m1,70
+Has,m2,120
+Has,m3,95
+Has,m4,36
+StartStockRound,2
+HasPriority,m1
+PASSES,m1
+BUY_SHARE_LOG,m2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,m3,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,m4
+PASSES,m1
+PASSES,m2
+PASSES,m3
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,80
+Has,M5,0
+Has,M6,0
+Has,BY,484
+Has,m1,70
+Has,m2,28
+Has,m3,3
+Has,m4,36
+START_OR,2.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,20,LD
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,m3,20,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,8,F16,W
+CompanyRevenue,M2,50
+CompanySplits,M2,50
+M2 receives 25
+Payout,m3,25,1,100
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,8,E13,SE
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,m4,25,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,3,F6,SW
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,m1,15,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,m2,25,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,m4,30,1,100
+
+CompanyOperates,BY,m4
+LaysTileAtFor,BY,8,M13,NE,50
+LaysTileAt,BY,9,K13,NW
+CompanyRevenue,BY,60
+CompanyPaysOutFull,BY,60
+Payout,m2,6,1,10
+Payout,m1,12,2,10
+Payout,m4,18,3,10
+Payout,m3,6,1,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,m1,2.1,64
+ORWorthIncrease,m2,2.1,82
+ORWorthIncrease,m3,2.1,87
+ORWorthIncrease,m4,2.1,91
+Has,M1,20
+Has,M2,115
+Has,M3,25
+Has,M4,95
+Has,M5,25
+Has,M6,30
+Has,BY,434
+Has,m1,122
+Has,m2,104
+Has,m3,84
+Has,m4,109
+StartStockRound,3
+HasPriority,m4
+BUY_SHARE_LOG,m4,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,m1,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,m2,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,m3
+PASSES,m4
+PASSES,m1
+PASSES,m2
+
+END_SR,3
+PRICE_MOVES_LOG,BY,92,C3,98,C2
+SoldOut,BY,92,C3,98,C2
+Has,M1,20
+Has,M2,115
+Has,M3,25
+Has,M4,95
+Has,M5,25
+Has,M6,30
+Has,BY,710
+Has,m1,30
+Has,m2,12
+Has,m3,84
+Has,m4,17
+START_OR,3.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,20,LD
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,4,K3,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,m3,20,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,9,F20,NW
+CompanyRevenue,M2,50
+CompanySplits,M2,50
+M2 receives 25
+Payout,m3,25,1,100
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,8,E11,NW
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,m4,25,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,8,G7,W
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,m1,15,1,100
+
+CompanyOperates,M5,m2
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,m2,25,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,58,B12,SW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,m4,30,1,100
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,8,J12,SE
+LaysTileAt,BY,9,J10,W
+CompanyRevenue,BY,130
+CompanyPaysOutFull,BY,130
+Payout,m2,26,2,10
+Payout,m1,39,3,10
+Payout,m4,52,4,10
+Payout,m3,13,1,10
+PRICE_MOVES_LOG,BY,98,C2,108,D2
+
+EndOfOperatingRound,3.1
+ORWorthIncrease,m1,3.1,109
+ORWorthIncrease,m2,3.1,116
+ORWorthIncrease,m3,3.1,98
+ORWorthIncrease,m4,3.1,147
+Has,M1,40
+Has,M2,140
+Has,M3,50
+Has,M4,110
+Has,M5,50
+Has,M6,60
+Has,BY,710
+Has,m1,109
+Has,m2,108
+Has,m3,172
+Has,m4,124
+StartStockRound,4
+HasPriority,m3
+BUY_SHARE_LOG,m3,10,SX,IPO,88
+BUY_SHARE_LOG,m4,10,SX,IPO,88
+BUY_SHARE_LOG,m1,10,SX,IPO,88
+FloatsWithCash,SX,440
+BUY_SHARE_LOG,m2,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+PASSES,m3
+PASSES,m4
+PASSES,m1
+PASSES,m2
+
+END_SR,4
+SoldOutNoRaise,BY,108,D2
+Has,M1,40
+Has,M2,140
+Has,M3,50
+Has,M4,110
+Has,M5,50
+Has,M6,60
+Has,BY,710
+Has,SX,528
+Has,m1,21
+Has,m2,20
+Has,m3,84
+Has,m4,36
+START_OR,4.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,20,LD
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,8,L4,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,m3,20,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,201,H20,E
+CompanyRevenue,M2,50
+CompanySplits,M2,50
+M2 receives 25
+Payout,m3,25,1,100
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,8,D10,NE
+CompanyRevenue,M3,60
+CompanySplits,M3,60
+M3 receives 30
+Payout,m4,30,1,100
+BuysTrain,M3,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,9,F8,SW
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,m1,15,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,9,D20,NW
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,m2,25,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,58,B14,E
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,m4,30,1,100
+
+CompanyOperates,BY,m4
+LaysTileAtFor,BY,9,K15,SW,70
+LaysTileAt,BY,69,I17,W
+CompanyRevenue,BY,130
+CompanyPaysOutFull,BY,130
+Payout,m2,26,2,10
+Payout,m1,39,3,10
+Payout,m4,52,4,10
+Payout,m3,13,1,10
+PRICE_MOVES_LOG,BY,108,D2,120,E2
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,5,H16,SW
+LaysTileAt,SX,9,H18,W
+CompanyDoesNotPayDividend,SX
+PRICE_MOVES_LOG,SX,88,C4,84,B4
+BuysTrain,SX,2+2,IPO,120
+PrivateCloses,LD
+BuysTrain,SX,2+2,IPO,120
+
+EndOfOperatingRound,4.1
+ORWorthIncrease,m1,4.1,111
+ORWorthIncrease,m2,4.1,-82
+ORWorthIncrease,m3,4.1,96
+ORWorthIncrease,m4,4.1,156
+Has,M1,60
+Has,M2,165
+Has,M3,0
+Has,M4,125
+Has,M5,75
+Has,M6,90
+Has,BY,520
+Has,SX,288
+Has,m1,100
+Has,m2,116
+Has,m3,172
+Has,m4,148
+StartStockRound,5
+HasPriority,m3
+BUY_SHARE_LOG,m3,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,m4,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,m1,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,m2,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+SharesReleased,All,BA
+PASSES,m3
+PASSES,m4
+PASSES,m1
+PASSES,m2
+
+END_SR,5
+PRICE_MOVES_LOG,BY,120,E2,132,E1
+SoldOut,BY,120,E2,132,E1
+PRICE_MOVES_LOG,SX,84,B4,86,B3
+SoldOut,SX,84,B4,86,B3
+Has,M1,60
+Has,M2,165
+Has,M3,0
+Has,M4,125
+Has,M5,75
+Has,M6,90
+Has,BY,520
+Has,SX,640
+Has,m1,12
+Has,m2,28
+Has,m3,84
+Has,m4,60
+START_OR,5.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAtFor,M1,202,I3,NE,50
+CompanyRevenue,M1,60
+CompanySplits,M1,60
+M1 receives 30
+Payout,m3,30,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,9,E9,SW
+CompanyRevenue,M2,50
+CompanySplits,M2,50
+M2 receives 25
+Payout,m3,25,1,100
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,4,B16,W
+CompanyRevenue,M3,110
+CompanySplits,M3,110
+M3 receives 55
+Payout,m4,55,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,58,F4,E
+CompanyRevenue,M4,30
+CompanySplits,M4,30
+M4 receives 15
+Payout,m1,15,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,3,I15,NE
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,m2,25,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,8,B18,SE
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,m4,30,1,100
+BuysTrain,M6,2+2,IPO,120
+All 2+2-trains are sold out, 3-trains now available
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,7,N16,SW
+LaysTileAtFor,BY,9,K7,SW,50
+LAYS_TOKEN_ON,BY,H20,160
+CompanyRevenue,BY,190
+CompanyPaysOutFull,BY,190
+Payout,m1,57,3,10
+Payout,m4,76,4,10
+Payout,m2,38,2,10
+Payout,m3,19,1,10
+PRICE_MOVES_LOG,BY,132,E1,148,F1
+
+CompanyOperates,SX,m2
+LaysTileAtFor,SX,7,J14,E,70
+LaysTileAt,SX,57,F10,W
+CompanyRevenue,SX,60
+CompanyPaysOutFull,SX,60
+Payout,m1,12,2,10
+Payout,m4,12,2,10
+Payout,m2,24,4,10
+Payout,m3,12,2,10
+PRICE_MOVES_LOG,SX,86,B3,92,C3
+BuysTrain,SX,3,IPO,180
+FirstTrainBought,3
+StartOfPhase,3
+
+EndOfOperatingRound,5.1
+ORWorthIncrease,m1,5.1,169
+ORWorthIncrease,m2,5.1,168
+ORWorthIncrease,m3,5.1,144
+ORWorthIncrease,m4,5.1,249
+Has,M1,40
+Has,M2,190
+Has,M3,55
+Has,M4,140
+Has,M5,100
+Has,M6,0
+Has,BY,310
+Has,SX,390
+Has,m1,121
+Has,m2,140
+Has,m3,200
+Has,m4,233
+StartStockRound,6
+HasPriority,m3
+START_COMPANY_LOG,m3,BA,84,168,2,20,BANK
+SharesReleased,4 10%,PR
+BUY_SHARE_LOG,m4,10,BA,IPO,84
+BUY_SHARE_LOG,m1,10,BA,IPO,84
+BUY_SHARE_LOG,m2,10,BA,IPO,84
+FloatsWithCash,BA,420
+SharesReleased,All,WT
+PASSES,m3
+BUY_SHARE_LOG,m4,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+PASSES,m1
+PASSES,m2
+PASSES,m3
+PASSES,m4
+
+END_SR,6
+PRICE_STAYS_LOG,BY,148,F1
+SoldOutNoRaise,BY,148,F1
+PRICE_MOVES_LOG,SX,92,C3,98,C2
+SoldOut,SX,92,C3,98,C2
+Has,M1,40
+Has,M2,190
+Has,M3,55
+Has,M4,140
+Has,M5,100
+Has,M6,0
+Has,BY,310
+Has,SX,390
+Has,BA,504
+Has,m1,37
+Has,m2,56
+Has,m3,32
+Has,m4,65
+START_OR,6.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,208,H2,SW
+CompanyRevenue,M1,70
+CompanySplits,M1,70
+M1 receives 35
+Payout,m3,35,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,209,E19,NE
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,m3,35,1,100
+BuysTrain,M2,3,IPO,180
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,12,F14,E
+CompanyRevenue,M3,140
+CompanySplits,M3,140
+M3 receives 70
+Payout,m4,70,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,24,D10,NE
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,m1,30,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,207,H20,NW
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,m2,40,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,12,A11,W
+CompanyRevenue,M6,80
+CompanySplits,M6,80
+M6 receives 40
+Payout,m4,40,1,100
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,8,G19,NE
+CompanyRevenue,BY,230
+CompanyPaysOutFull,BY,230
+Payout,m4,92,4,10
+Payout,m1,69,3,10
+Payout,m2,46,2,10
+Payout,m3,23,1,10
+PRICE_MOVES_LOG,BY,148,F1,166,G1
+BuysTrain,BY,2,M3,55
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,12,H16,SE
+CompanyRevenue,SX,180
+CompanyPaysOutFull,SX,180
+Payout,m4,36,2,10
+Payout,m1,36,2,10
+Payout,m2,72,4,10
+Payout,m3,36,2,10
+PRICE_MOVES_LOG,SX,98,C2,108,D2
+
+CompanyOperates,BA,m3
+LaysTileAt,BA,210,L6,E
+LAYS_TOKEN_ON,BA,I3,60
+CompanyDoesNotPayDividend,BA
+PRICE_MOVES_LOG,BA,84,B4,78,A4
+BuysTrain,BA,3,IPO,180
+
+EndOfOperatingRound,6.1
+ORWorthIncrease,m1,6.1,228
+ORWorthIncrease,m2,6.1,253
+ORWorthIncrease,m3,6.1,185
+ORWorthIncrease,m4,6.1,318
+Has,M1,75
+Has,M2,45
+Has,M3,180
+Has,M4,170
+Has,M5,140
+Has,M6,40
+Has,BY,255
+Has,SX,390
+Has,BA,264
+Has,m1,197
+Has,m2,239
+Has,m3,191
+Has,m4,303
+START_OR,6.2
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,207,I3,W
+CompanyRevenue,M1,80
+CompanySplits,M1,80
+M1 receives 40
+Payout,m3,40,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,9,F18,SW
+CompanyRevenue,M2,180
+CompanySplits,M2,180
+M2 receives 90
+Payout,m3,90,1,100
+
+CompanyOperates,M3,m4
+CompanyRevenue,M3,70
+CompanySplits,M3,70
+M3 receives 35
+Payout,m4,35,1,100
+BuysTrain,M3,3,IPO,180
+All 3-trains are sold out, 3+3-trains now available
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,206,G5,SE
+CompanyRevenue,M4,70
+CompanySplits,M4,70
+M4 receives 35
+Payout,m1,35,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,9,G17,SW
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,m2,40,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,25,C19,SW
+CompanyRevenue,M6,80
+CompanySplits,M6,80
+M6 receives 40
+Payout,m4,40,1,100
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,20,F20,NW
+CompanyRevenue,BY,320
+CompanyWithholds,BY,320
+PRICE_MOVES_LOG,BY,166,G1,148,F1
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,23,D18,NW
+CompanyRevenue,SX,270
+CompanyPaysOutFull,SX,270
+Payout,m4,54,2,10
+Payout,m1,54,2,10
+Payout,m2,108,4,10
+Payout,m3,54,2,10
+PRICE_MOVES_LOG,SX,108,D2,120,E2
+
+CompanyOperates,BA,m3
+LaysTileAt,BA,23,J2,NW
+CompanyRevenue,BA,120
+CompanyPaysOutFull,BA,120
+Payout,m4,24,2,10
+Payout,m2,12,1,10
+Payout,m1,12,1,10
+Payout,m3,24,2,10
+PRICE_MOVES_LOG,BA,78,A4,84,B4
+
+EndOfOperatingRound,6.2
+ORWorthIncrease,m1,6.2,102
+ORWorthIncrease,m2,6.2,203
+ORWorthIncrease,m3,6.2,256
+ORWorthIncrease,m4,6.2,117
+Has,M1,115
+Has,M2,135
+Has,M3,35
+Has,M4,205
+Has,M5,180
+Has,M6,80
+Has,BY,575
+Has,SX,390
+Has,BA,264
+Has,m1,323
+Has,m2,424
+Has,m3,429
+Has,m4,456
+StartStockRound,7
+HasPriority,m1
+BUY_SHARE_LOG,m1,10,PR,IPO,154
+BUY_SHARE_LOG,m2,10,PR,IPO,154
+BUY_SHARE_LOG,m3,10,PR,IPO,154
+BUY_SHARE_LOG,m4,10,PR,IPO,154
+START_COMPANY_LOG,m1,WT,84,168,2,20,BANK
+BUY_SHARE_LOG,m2,10,WT,IPO,84
+BUY_SHARE_LOG,m3,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+BUY_SHARE_LOG,m4,10,WT,IPO,84
+PASSES,m1
+BUY_SHARE_LOG,m2,10,WT,IPO,84
+FloatsWithCash,WT,420
+SharesReleased,All,HE
+BUY_SHARE_LOG,m3,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+BUY_SHARE_LOG,m4,20,BA,IPO,168
+PriceIsPaidTo,168,BA
+PASSES,m1
+BUY_SHARE_LOG,m2,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+IS_NOW_PRES_OF,m2,WT
+BUY_SHARE_LOG,m3,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+PASSES,m4
+PASSES,m1
+PASSES,m2
+PASSES,m3
+
+END_SR,7
+PRICE_STAYS_LOG,BY,148,F1
+SoldOutNoRaise,BY,148,F1
+PRICE_MOVES_LOG,SX,120,E2,132,E1
+SoldOut,SX,120,E2,132,E1
+PRICE_MOVES_LOG,BA,84,B4,86,B3
+SoldOut,BA,84,B4,86,B3
+Has,M1,115
+Has,M2,135
+Has,M3,35
+Has,M4,205
+Has,M5,180
+Has,M6,80
+Has,BY,575
+Has,SX,390
+Has,BA,600
+Has,WT,588
+Has,m1,1
+Has,m2,18
+Has,m3,23
+Has,m4,50
+START_OR,7.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,8,K5,NE
+CompanyRevenue,M1,80
+CompanySplits,M1,80
+M1 receives 40
+Payout,m3,40,1,100
+BuysTrain,M1,2+2,SX,155
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,8,C17,SE
+CompanyRevenue,M2,180
+CompanySplits,M2,180
+M2 receives 90
+Payout,m3,90,1,100
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,8,C15,NW
+CompanyRevenue,M3,180
+CompanySplits,M3,180
+M3 receives 90
+Payout,m4,90,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,23,F8,NE
+CompanyRevenue,M4,70
+CompanySplits,M4,70
+M4 receives 35
+Payout,m1,35,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,87,B14,SE
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,m2,40,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,204,B12,SE
+CompanyRevenue,M6,90
+CompanySplits,M6,90
+M6 receives 45
+Payout,m4,45,1,100
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,20,K15,NW
+CompanyRevenue,BY,320
+CompanyPaysOutFull,BY,320
+Payout,m4,128,4,10
+Payout,m2,64,2,10
+Payout,m1,96,3,10
+Payout,m3,32,1,10
+PRICE_MOVES_LOG,BY,148,F1,166,G1
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,9,L16,NW
+CompanyRevenue,SX,200
+CompanyPaysOutFull,SX,200
+Payout,m4,40,2,10
+Payout,m2,80,4,10
+Payout,m1,40,2,10
+Payout,m3,40,2,10
+PRICE_MOVES_LOG,SX,132,E1,148,F1
+BuysTrain,SX,3+3,IPO,270
+FirstTrainBought,3+3
+
+CompanyOperates,BA,m3
+LaysTileAtFor,BA,214,G3,NW,50
+CompanyRevenue,BA,120
+CompanyWithholds,BA,120
+PRICE_MOVES_LOG,BA,86,B3,82,A3
+BuysTrain,BA,3+3,IPO,270
+
+CompanyOperates,WT,m2
+LaysTileAt,WT,5,M9,SE
+LAYS_TOKEN_ON,WT,G3,120
+CompanyDoesNotPayDividend,WT
+PRICE_MOVES_LOG,WT,84,B4,78,A4
+BuysTrain,WT,3+3,IPO,270
+All 3+3-trains are sold out, 4-trains now available
+
+EndOfOperatingRound,7.1
+ORWorthIncrease,m1,7.1,266
+ORWorthIncrease,m2,7.1,287
+ORWorthIncrease,m3,7.1,260
+ORWorthIncrease,m4,7.1,385
+Has,M1,0
+Has,M2,225
+Has,M3,125
+Has,M4,240
+Has,M5,220
+Has,M6,125
+Has,BY,575
+Has,SX,275
+Has,BA,400
+Has,WT,198
+Has,m1,197
+Has,m2,227
+Has,m3,255
+Has,m4,353
+START_OR,7.2
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,56,H4,W
+CompanyRevenue,M1,180
+CompanySplits,M1,180
+M1 receives 90
+Payout,m3,90,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,25,C15,E
+CompanyRevenue,M2,180
+CompanySplits,M2,180
+M2 receives 90
+Payout,m3,90,1,100
+
+CompanyOperates,M3,m4
+LaysTileAtFor,M3,8,E15,SW,50
+CompanyRevenue,M3,180
+CompanySplits,M3,180
+M3 receives 90
+Payout,m4,90,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,205,F10,NW
+CompanyRevenue,M4,70
+CompanySplits,M4,70
+M4 receives 35
+Payout,m1,35,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,23,L16,SE
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,m2,40,1,100
+BuysTrain,M5,2+2,SX,260
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,26,B10,NW
+CompanyRevenue,M6,100
+CompanySplits,M6,100
+M6 receives 50
+Payout,m4,50,1,100
+
+CompanyOperates,BY,m4
+LaysTileAtFor,BY,7,D14,NW,50
+CompanyRevenue,BY,320
+CompanyWithholds,BY,320
+PRICE_MOVES_LOG,BY,166,G1,148,F1
+
+CompanyOperates,SX,m2
+LaysTileAtFor,SX,3,M15,NW,50
+CompanyRevenue,SX,250
+CompanyWithholds,SX,250
+PRICE_MOVES_LOG,SX,148,F1,132,E1
+
+CompanyOperates,BA,m3
+LaysTileAtFor,BA,214,J6,W,50
+CompanyRevenue,BA,260
+CompanyPaysOutFull,BA,260
+Payout,m4,104,4,10
+Payout,m2,26,1,10
+Payout,m1,26,1,10
+Payout,m3,104,4,10
+PRICE_MOVES_LOG,BA,82,A3,86,B3
+
+CompanyOperates,WT,m2
+LaysTileAt,WT,8,M11,SE
+CompanyRevenue,WT,140
+CompanyWithholds,WT,140
+PRICE_MOVES_LOG,WT,78,A4,72,A5
+
+EndOfOperatingRound,7.2
+ORWorthIncrease,m1,7.2,-8
+ORWorthIncrease,m2,7.2,-23
+ORWorthIncrease,m3,7.2,274
+ORWorthIncrease,m4,7.2,150
+Has,M1,90
+Has,M2,315
+Has,M3,165
+Has,M4,275
+Has,M5,0
+Has,M6,175
+Has,BY,845
+Has,SX,735
+Has,BA,350
+Has,WT,338
+Has,m1,283
+Has,m2,318
+Has,m3,569
+Has,m4,597
+StartStockRound,8
+HasPriority,m4
+SELL_SHARE_LOG,m4,10,WT,72
+PRICE_MOVES_LOG,WT,72,A5,64,A6
+START_COMPANY_LOG,m4,HE,84,168,2,20,BANK
+BUY_SHARE_LOG,m1,10,HE,IPO,84
+BUY_SHARE_LOG,m2,10,HE,IPO,84
+BUY_SHARE_LOG,m3,10,HE,IPO,84
+FloatsWithCash,HE,420
+BUY_SHARE_LOG,m4,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+BUY_SHARE_LOG,m1,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+BUY_SHARE_LOG,m2,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+BUY_SHARE_LOG,m3,20,HE,IPO,168
+PriceIsPaidTo,168,HE
+PASSES,m4
+PASSES,m1
+PASSES,m2
+PASSES,m3
+
+END_SR,8
+PRICE_STAYS_LOG,BY,148,F1
+SoldOutNoRaise,BY,148,F1
+PRICE_STAYS_LOG,SX,132,E1
+SoldOutNoRaise,SX,132,E1
+SoldOutNoRaise,BA,86,B3
+PRICE_MOVES_LOG,HE,84,B4,86,B3
+SoldOut,HE,84,B4,86,B3
+Has,M1,90
+Has,M2,315
+Has,M3,165
+Has,M4,275
+Has,M5,0
+Has,M6,175
+Has,BY,845
+Has,SX,735
+Has,BA,350
+Has,WT,338
+Has,HE,840
+Has,m1,115
+Has,m2,150
+Has,m3,317
+Has,m4,417
+START_OR,8.1
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+ReceivesFor,m2,25,BB
+ReceivesFor,m3,30,HB
+
+CompanyOperates,M1,m3
+LaysTileAt,M1,24,E9,NE
+CompanyRevenue,M1,180
+CompanySplits,M1,180
+M1 receives 90
+Payout,m3,90,1,100
+
+CompanyOperates,M2,m3
+LaysTileAt,M2,27,D14,NW
+CompanyRevenue,M2,190
+CompanySplits,M2,190
+M2 receives 95
+Payout,m3,95,1,100
+
+CompanyOperates,M3,m4
+LaysTileAtFor,M3,9,M17,NW,50
+CompanyRevenue,M3,180
+CompanySplits,M3,180
+M3 receives 90
+Payout,m4,90,1,100
+
+CompanyOperates,M4,m1
+LaysTileAt,M4,24,F18,NE
+CompanyRevenue,M4,70
+CompanySplits,M4,70
+M4 receives 35
+Payout,m1,35,1,100
+
+CompanyOperates,M5,m2
+LaysTileAt,M5,23,G19,NW
+CompanyRevenue,M5,180
+CompanySplits,M5,180
+M5 receives 90
+Payout,m2,90,1,100
+
+CompanyOperates,M6,m4
+CompanyRevenue,M6,100
+CompanySplits,M6,100
+M6 receives 50
+Payout,m4,50,1,100
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,207,O15,NW
+CompanyRevenue,BY,320
+CompanyPaysOutFull,BY,320
+Payout,m4,128,4,10
+Payout,m3,32,1,10
+Payout,m2,64,2,10
+Payout,m1,96,3,10
+PRICE_MOVES_LOG,BY,148,F1,166,G1
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,8,N18,SW
+LAYS_TOKEN_ON,SX,E19,60
+CompanyRevenue,SX,260
+CompanyWithholds,SX,260
+PRICE_MOVES_LOG,SX,132,E1,120,E2
+BuysTrain,SX,4,IPO,360
+FirstTrainBought,4
+StartOfPhase,4
+StartFormationRound,PR
+StartingPlayer,m3
+START_MERGED_COMPANY,PR,154,154
+FloatsWithCash,PR,616
+MERGE_MINOR_LOG,m3,M2,PR,410,1
+GetShareForMinor,m3,10,PR,IPO,M2
+ExchangesBaseToken,PR,M2,E19/1
+MERGE_MINOR_LOG,m3,HB,PR,no,no
+GetShareForMinor,m3,10,PR,IPO,HB
+PrivateCloses,HB
+MERGE_MINOR_LOG,m3,M1,PR,180,1
+GetShareForMinor,m3,5,PR,IPO,M1
+ExchangesBaseToken,PR,M1,H2/1
+MERGE_MINOR_LOG,m1,M4,PR,310,0
+GetShareForMinor,m1,10,PR,IPO,M4
+ExchangesBaseToken,PR,M4,G5/1
+MERGE_MINOR_LOG,m2,BB,PR,no,no
+GetShareForMinor,m2,10,PR,IPO,BB
+PrivateCloses,BB
+MERGE_MINOR_LOG,m2,M5,PR,90,1
+GetShareForMinor,m2,5,PR,IPO,M5
+
+EndOfFormationRound,PR,OperatingRound 8.1
+
+CompanyOperates,BA,m3
+LaysTileAt,BA,6,N12,SE
+CompanyRevenue,BA,260
+CompanyWithholds,BA,260
+PRICE_MOVES_LOG,BA,86,B3,82,A3
+BuysTrain,BA,4,IPO,360
+
+CompanyOperates,HE,m4
+LaysTileAtFor,HE,7,I7,SW,70
+CompanyDoesNotPayDividend,HE
+PRICE_MOVES_LOG,HE,86,B3,82,A3
+BuysTrain,HE,4,IPO,360
+All 4-trains are sold out, 4+4-trains now available
+
+CompanyOperates,WT,m2
+LaysTileAt,WT,29,L4,NW
+CompanyRevenue,WT,140
+CompanyWithholds,WT,140
+PRICE_MOVES_LOG,WT,64,A6,54,A7
+
+EndOfOperatingRound,8.1
+ORWorthIncrease,m1,8.1,308
+ORWorthIncrease,m2,8.1,226
+ORWorthIncrease,m3,8.1,428
+ORWorthIncrease,m4,8.1,288
+Has,M3,205
+Has,M6,225
+Has,BY,845
+Has,SX,575
+Has,BA,250
+Has,WT,478
+Has,HE,410
+Has,PR,1606
+Has,m1,271
+Has,m2,329
+Has,m3,564
+Has,m4,685
+StartFormationRound,PR
+
+EndOfFormationRoundNoInterrupt,PR
+START_OR,8.2
+ReceivesFor,m1,10,OBB
+ReceivesFor,m1,15,PfB
+
+CompanyOperates,M3,m4
+LaysTileAt,M3,20,N14,W
+CompanyRevenue,M3,110
+CompanySplits,M3,110
+M3 receives 55
+Payout,m4,55,1,100
+
+CompanyOperates,M6,m4
+LaysTileAt,M6,7,I5,E
+CompanyRevenue,M6,100
+CompanySplits,M6,100
+M6 receives 50
+Payout,m4,50,1,100
+
+CompanyOperates,BY,m4
+LaysTileAtFor,BY,8,I9,E,70
+CompanyRevenue,BY,100
+CompanyPaysOutFull,BY,100
+Payout,m4,40,4,10
+Payout,m3,10,1,10
+Payout,m1,30,3,10
+Payout,m2,20,2,10
+PRICE_MOVES_LOG,BY,166,G1,186,H1
+BuysTrain,BY,4+4,IPO,440
+All 4+4-trains are sold out, 5-trains now available
+FirstTrainBought,4+4
+StartOfPhase,4+4
+
+CompanyOperates,PR,m3
+LaysTileAt,PR,8,I11,W
+CompanyRevenue,PR,120
+CompanyPaysOutFull,PR,120
+NoIncomeForPreviousOperation,m4,10,PR
+Payout,m3,42,7,5
+Payout,m1,24,4,5
+Payout,m2,30,5,5
+PRICE_MOVES_LOG,PR,154,I4,172,J4
+BuysTrain,PR,5,IPO,500
+FirstTrainBought,5
+StartOfPhase,5
+PrivateCloses,OBB
+PrivateCloses,PfB
+CompanyDiscardsTrain,BA,3
+CompanyDiscardsTrain,SX,3
+StartFormationRound,PR
+MERGE_MINOR_LOG,m4,M3,PR,260,1
+GetShareForMinor,m4,5,PR,IPO,M3
+ExchangesBaseToken,PR,M3,F14/1
+MERGE_MINOR_LOG,m4,M6,PR,275,0
+GetShareForMinor,m4,5,PR,IPO,M6
+ExchangesBaseToken,PR,M6,C11/1
+
+EndOfFormationRound,PR,OperatingRound 8.2
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,220,E19,SW
+CompanyRevenue,SX,340
+CompanyWithholds,SX,340
+PRICE_MOVES_LOG,SX,120,E2,108,D2
+
+CompanyOperates,BA,m3
+LaysTileAt,BA,216,I3,E
+CompanyRevenue,BA,280
+CompanyWithholds,BA,280
+PRICE_MOVES_LOG,BA,82,A3,78,A4
+
+CompanyOperates,HE,m4
+LaysTileAtFor,HE,216,J8,W,50
+CompanyRevenue,HE,140
+CompanyWithholds,HE,140
+PRICE_MOVES_LOG,HE,82,A3,78,A4
+BuysTrain,HE,5,IPO,500
+All 5-trains are sold out, 5+5-trains now available
+
+CompanyOperates,WT,m2
+LaysTileAt,WT,219,G3,SE
+CompanyRevenue,WT,160
+CompanyWithholds,WT,160
+PRICE_STAYS_LOG,WT,54,A7
+BuysTrain,WT,5+5,IPO,600
+All 5+5-trains are sold out, 6-trains now available
+FirstTrainBought,5+5
+
+EndOfOperatingRound,8.2
+ORWorthIncrease,m1,8.2,-131
+ORWorthIncrease,m2,8.2,75
+ORWorthIncrease,m3,8.2,83
+ORWorthIncrease,m4,8.2,363
+Has,BY,335
+Has,SX,915
+Has,BA,530
+Has,WT,38
+Has,HE,0
+Has,PR,1641
+Has,m1,350
+Has,m2,379
+Has,m3,616
+Has,m4,830
+StartStockRound,9
+HasPriority,m4
+BUY_SHARE_LOG,m4,10,WT,Pool,54
+BUY_SHARE_LOG,m1,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+BUY_SHARE_LOG,m2,20,WT,IPO,168
+PriceIsPaidTo,168,WT
+SharesReleased,All,MS
+START_COMPANY_LOG,m3,MS,80,160,2,20,BANK
+BUY_SHARE_LOG,m4,20,MS,IPO,160
+BUY_SHARE_LOG,m1,20,MS,IPO,160
+FloatsWithCash,MS,480
+SharesReleased,All,OL
+BUY_SHARE_LOG,m2,10,MS,IPO,80
+PriceIsPaidTo,80,MS
+BUY_SHARE_LOG,m3,10,MS,IPO,80
+PriceIsPaidTo,80,MS
+PASSES,m4
+BUY_SHARE_LOG,m1,10,MS,IPO,80
+PriceIsPaidTo,80,MS
+PASSES,m2
+PASSES,m3
+PASSES,m4
+PASSES,m1
+
+END_SR,9
+PRICE_STAYS_LOG,BY,186,H1
+SoldOutNoRaise,BY,186,H1
+PRICE_MOVES_LOG,PR,172,J4,190,J3
+SoldOut,PR,172,J4,190,J3
+SoldOutNoRaise,SX,108,D2
+PRICE_MOVES_LOG,BA,78,A4,82,A3
+SoldOut,BA,78,A4,82,A3
+PRICE_MOVES_LOG,HE,78,A4,82,A3
+SoldOut,HE,78,A4,82,A3
+PRICE_MOVES_LOG,WT,54,A7,64,A6
+SoldOut,WT,54,A7,64,A6
+Has,BY,335
+Has,SX,915
+Has,BA,530
+Has,WT,290
+Has,HE,0
+Has,MS,720
+Has,PR,1641
+Has,m1,26
+Has,m2,131
+Has,m3,376
+Has,m4,616
+START_OR,9.1
+
+CompanyOperates,PR,m3
+LaysTileAtFor,PR,221,C11,SW,50
+CompanyRevenue,PR,520
+CompanyWithholds,PR,520
+PRICE_MOVES_LOG,PR,190,J3,170,I3
+
+CompanyOperates,BY,m4
+LaysTileAt,BY,216,H20,E
+CompanyRevenue,BY,250
+CompanyWithholds,BY,250
+PRICE_MOVES_LOG,BY,186,H1,166,G1
+
+CompanyOperates,SX,m2
+LaysTileAt,SX,63,H16,SW
+CompanyRevenue,SX,390
+CompanyPaysOutFull,SX,390
+Payout,m4,78,2,10
+Payout,m3,78,2,10
+Payout,m2,156,4,10
+Payout,m1,78,2,10
+PRICE_MOVES_LOG,SX,108,D2,120,E2
+
+CompanyOperates,BA,m3
+LaysTileAt,BA,216,H2,SW
+CompanyRevenue,BA,340
+CompanyWithholds,BA,340
+PRICE_MOVES_LOG,BA,82,A3,78,A4
+
+CompanyOperates,HE,m4
+LaysTileAt,HE,24,K5,NE
+CompanyRevenue,HE,280
+CompanyPaysOutFull,...
[truncated message content] |