empserver/tests
Markus Armbruster 66edd2baca update: Don't use materials and work destroyed by che or plague
Update code shared with budget uses the bp map instead of the sector,
so that budget can track materials and work available in sectors for
ship, plane and land unit building without updating the sector file.
Unfortunately, the bp map can become stale during the update.

prepare_sects() doesn't update the bp map for sea sectors, unlike
budget's calc_all().  Instead, we rely on calloc()'s initialization.
Works, but is a bit unclean.

prepare_sects() updates the bp map after fallout, but neglects to
update it for any of the later sector updates (steps 1b to 1f in info
Update-sequence).  Che can destroy materials and available work, and
the plague can kill military.  The bp map stays out of date until
produce_sect() updates it again.

Since we deal with sector production and countries in increasing order
of country number, foreign ships, planes and land units owned by
countries with lesser numbers get built before their sector produces.
Building uses the stale bp map then, and can use materials and
available work destroyed by che or the plague.  The update test
demonstrates the former case.

For stopped sectors or when the owner is broke, produce_sect() updates
only materials in the bp map, not available work.  Nothing builds in a
stopped sector, but allies may build in your sectors even when you're
broke.  They can use available work destroyed by che then.

Screwed up when Empire 3 made the update code work for budget.

Note that budget bypasses the flawed code: it prepares its bp map
itself instead of calling prepare_sects().

Rather than fixing prepare_sects(), use a null bp map for the update:
writes become no-ops, and reads read from the underlying sector.  Not
only does this remove the possibility of the bp map going stale during
the update, it saves a bit of memory, too.

calloc()'s initialization is now dead.  Switch to malloc().

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 19:59:58 +02:00
..
actofgod sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
bridgefall sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
build sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
empdump power: Make item power value configurable 2017-08-06 19:59:45 +02:00
fairland sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
files sail: Remove option SAIL 2015-02-28 16:11:28 +01:00
fire sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
info tests/info: New; checks info and code agree on commands 2014-01-06 20:50:06 +01:00
navi-march sect: Fix revert to deity and "no civilians" corner cases 2017-08-06 19:59:57 +02:00
retreat sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
smoke update: Fix revert to deity and "no civilians" corner cases 2017-08-06 19:59:57 +02:00
torpedo sect: Keep work percentage without civilians at 100% 2017-08-06 19:59:57 +02:00
update update: Don't use materials and work destroyed by che or plague 2017-08-06 19:59:58 +02:00
version nsc: Expose generalized build materials in xdump and conditionals 2017-08-06 19:59:56 +02:00
actofgod-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
bridgefall-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
build-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
empdump-test tests: Rewrite the previous commit's sed_i helper 2015-03-04 08:15:13 +01:00
fairland-test tests/files tests/fairland: Check stderr and exit status 2015-02-01 16:52:59 +01:00
files-test tests/files tests/fairland: Check stderr and exit status 2015-02-01 16:52:59 +01:00
fire-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
info-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
navi-march-test navigate: Require all ships to start in the same sector 2015-02-28 16:13:14 +01:00
normalize.pl tests/version: New; exercises config introspection commands 2017-08-06 14:03:55 +02:00
retreat-test tests/retreat: Cover trains 2015-03-02 08:20:48 +01:00
smoke-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
test-common.sh tests/version: New; exercises config introspection commands 2017-08-06 14:03:55 +02:00
torpedo-test tests/torpedo: New; exercises torpedo command 2015-03-02 08:20:52 +01:00
update-test tests/update: New; exercises the update 2017-08-06 14:04:15 +02:00
version-test tests/version: New; exercises config introspection commands 2017-08-06 14:03:55 +02:00