File: time_duration_test.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 (34 lines) | stat: -rw-r--r-- 1,329 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
#include <sstream>

#include "catch/catch.hpp"
#include "calendar.h"
#include "json.h"

time_duration parse_time_duration( const std::string &json )
{
    std::istringstream buffer( json );
    JsonIn jsin( buffer );
    return time_duration::read_from_json_string( jsin );
}

TEST_CASE( "time_duration parsing from JSON" )
{
    CHECK_THROWS( parse_time_duration( "\"\"" ) ); // empty string
    CHECK_THROWS( parse_time_duration( "27" ) ); // not a string at all
    CHECK_THROWS( parse_time_duration( "\"    \"" ) ); // only spaces
    CHECK_THROWS( parse_time_duration( "\"27\"" ) ); // no time unit

    REQUIRE( parse_time_duration( "\"1 turns\"" ) == 1_turns );
    REQUIRE( parse_time_duration( "\"1 minutes\"" ) == 1_minutes );
    REQUIRE( parse_time_duration( "\"+1 hours\"" ) == 1_hours );
    REQUIRE( parse_time_duration( "\"+1 days\"" ) == 1_days );

    REQUIRE( parse_time_duration( "\"1 turns 1 minutes 1 hours 1 days\"" ) == 1_turns + 1_minutes +
             1_hours + 1_days );
    REQUIRE( parse_time_duration( "\"1 turns -4 minutes 1 hours -4 days\"" ) == 1_turns - 4_minutes +
             1_hours - 4_days );

    REQUIRE( 1_turns * 10 == time_duration::from_minutes( 1 ) );
    REQUIRE( 1_minutes * 60 == time_duration::from_hours( 1 ) );
    REQUIRE( 1_hours * 24 == time_duration::from_days( 1 ) );
}