empserver/tests
Markus Armbruster 75c8d9c72f update/revolt: Fix how land units take casualties
take_casualties() applies a number of casualties to sector military
and land units.  It is utterly confused about land units.

Consider a land unit with efficiency eff that has mil out of maxmil
military.  Issues:

* To apply N casualties without destroying it, take_casualties() tries
  to kill N * maxmil / mil military.  Makes no sense.  It's more than
  asked for unless mil equals maxmil.  It can even be more than mil.

  It reduces efficiency by N * 100 / mil points.  Note that ordinary
  ground combat reduces by N * 100 / maxmil points.  See
  lnd_take_casualty().

  Example: the update test's inf#25 is 100% efficient and has 20m out
  of 100m.  take_casualties() tries to apply up to 22 casualties out
  of the 60 remaining casualties to apply, but decides to apply only
  12 for now, to keep efficiency above to 40%.  It reduces efficiency
  by 12 * 100 / 20 = 60 to 40%, and tries to kill 12 * 100 / 20 = 60
  mil, which kills off the 20 that actually exist.  It nevertheless
  reduces the number of casualties still to apply only by 12.

  Example: the update test's linf#28 is 100% efficient and has 20m out
  of 25m.  take_casualties() tries to apply up to 8 casualties.  It
  reduces efficiency by 8 * 100 / 20 = 40 points to 60%, and tries to
  kill 8 * 25 / 20 = 10 military.

* When it destroys a land unit, it reduces the number of casualties
  still to apply by mil * eff/100.0 instead of mil.

  Example: the update test's inf#27 is 10% efficient and has 20m out
  of 100m.  take_casualties() still has 34 casualties to apply, so it
  destroys it, killing all 20m.  But it reduces the number of
  casualties to apply only by 2.

Broken when 4.0.0 made land unit military loadable.  Not sure it fully
worked before that, but it's definitely bonkers since.

Fix it as follows:

* To apply casualties to a land unit without destroying it, limit its
  losses to its actual number of military, and so that efficiency
  stays above 40%.  Then simply kill that number.

* Reduce the number of casualties to apply by the exact number killed.

The update test now kills only 8m in linf#28.  Still two more than it
should, but that's separate bug, to be fixed next.  The fix has no
visible effect for inf#25, because that one gets destroyed later.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2017-08-06 20:09:19 +02:00
..
actofgod lost: Fix to track more than one lost sector per owner 2017-08-06 20:09:18 +02:00
bridgefall lost: Fix to track more than one lost sector per owner 2017-08-06 20:09:18 +02:00
build nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
empdump nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
fairland nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
files nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
fire nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
info tests/info: New; checks info and code agree on commands 2014-01-06 20:50:06 +01:00
navi-march nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
retreat nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
smoke lost: Fix to track more than one lost sector per owner 2017-08-06 20:09:18 +02:00
torpedo nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +02:00
update update/revolt: Fix how land units take casualties 2017-08-06 20:09:19 +02:00
version nsc: Drop deprecated nat and country selector hostname 2017-08-06 20:09:17 +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/smoke: Run news 2017-08-06 20:09:17 +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 config: Split table sect-chr for legibility 2017-08-06 19:59:58 +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