File: reload_option.cpp

package info (click to toggle)
cataclysm-dda 0.C%2Bgit20190228.faafa3a-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 181,636 kB
  • sloc: cpp: 256,609; python: 2,621; makefile: 862; sh: 495; perl: 37; xml: 33
file content (97 lines) | stat: -rw-r--r-- 3,716 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "catch/catch.hpp"
#include "item.h"
#include "item_location.h"
#include "player.h"

TEST_CASE( "revolver_reload_option", "[reload],[reload_option],[gun]" )
{
    player dummy;

    item &gun = dummy.i_add( item( "sw_619", 0, 0 ) );
    item &ammo = dummy.i_add( item( "38_special", 0, gun.ammo_capacity() ) );
    item_location ammo_location( dummy, &ammo );
    REQUIRE( gun.has_flag( "RELOAD_ONE" ) );
    REQUIRE( gun.ammo_remaining() == 0 );

    const item::reload_option gun_option( &dummy, &gun, &gun, std::move( ammo_location ) );
    REQUIRE( gun_option.qty() == 1 );

    ammo_location = item_location( dummy, &ammo );
    item &speedloader = dummy.i_add( item( "38_speedloader", 0, 0 ) );
    REQUIRE( speedloader.ammo_remaining() == 0 );

    const item::reload_option speedloader_option( &dummy, &speedloader, &speedloader,
            std::move( ammo_location ) );
    CHECK( speedloader_option.qty() == speedloader.ammo_capacity() );

    speedloader.contents.push_back( ammo );
    item_location speedloader_location( dummy, &speedloader );
    const item::reload_option gun_speedloader_option( &dummy, &gun, &gun,
            std::move( speedloader_location ) );
    CHECK( gun_speedloader_option.qty() == speedloader.ammo_capacity() );
}

TEST_CASE( "magazine_reload_option", "[reload],[reload_option],[gun]" )
{
    player dummy;

    item &magazine = dummy.i_add( item( "glockmag", 0, 0 ) );
    item &ammo = dummy.i_add( item( "9mm", 0, magazine.ammo_capacity() ) );
    item_location ammo_location( dummy, &ammo );

    const item::reload_option magazine_option( &dummy, &magazine, &magazine,
            std::move( ammo_location ) );
    CHECK( magazine_option.qty() == magazine.ammo_capacity() );

    magazine.contents.push_back( ammo );
    item_location magazine_location( dummy, &magazine );
    item &gun = dummy.i_add( item( "glock_19", 0, 0 ) );
    const item::reload_option gun_option( &dummy, &gun, &gun, std::move( magazine_location ) );
    CHECK( gun_option.qty() == 1 );
}

TEST_CASE( "belt_reload_option", "[reload],[reload_option],[gun]" )
{
    player dummy;

    item &belt = dummy.i_add( item( "belt308", 0, 0 ) );
    item &ammo = dummy.i_add( item( "308", 0, belt.ammo_capacity() ) );
    dummy.i_add( item( "ammolink308", 0, belt.ammo_capacity() ) );
    item_location ammo_location( dummy, &ammo );
    // Belt is populated with "charges" rounds by the item constructor.
    belt.ammo_unset();

    REQUIRE( belt.ammo_remaining() == 0 );
    const item::reload_option belt_option( &dummy, &belt, &belt, std::move( ammo_location ) );
    CHECK( belt_option.qty() == belt.ammo_capacity() );

    belt.contents.push_back( ammo );
    item_location belt_location( dummy, &ammo );
    item &gun = dummy.i_add( item( "m134", 0, 0 ) );

    const item::reload_option gun_option( &dummy, &gun, &gun, std::move( belt_location ) );

    CHECK( gun_option.qty() == 1 );
}

TEST_CASE( "canteen_reload_option", "[reload],[reload_option],[liquid]" )
{
    player dummy;

    item &water = dummy.i_add( item( "water_clean", 0, 2 ) );
    item &bottle = dummy.i_add( item( "bottle_plastic" ) );
    item_location water_location( dummy, &water );

    const item::reload_option bottle_option( &dummy, &bottle, &bottle, std::move( water_location ) );
    CHECK( bottle_option.qty() == bottle.get_remaining_capacity_for_liquid( water, true ) );

    // Add water to bottle?
    bottle.fill_with( water, 2 );
    item &canteen = dummy.i_add( item( "2lcanteen" ) );
    item_location bottle_location( dummy, &bottle );

    const item::reload_option canteen_option( &dummy, &canteen, &canteen,
            std::move( bottle_location ) );

    CHECK( canteen_option.qty() == 2 );
}