cleaned up cucumber tests #114

wants to merge 5 commits into

2 participants


here's a cleaned up version of cucumber tests - single commit rebased on your master.

it's quite a big chunk with many pieces, so take a look, and hopefully we can iron out any issues, so it can become a help in finding and fixing bugs.

ruby: should be preinstalled on most systems.
gems: cucumber, rake, osmlib-base. the easiest and safest is to first install the 'bundler' gem, then run 'bundle install' from the project folder.
osmosis: command line tool for converting and cropping osm files. if you're on mac you can install it via homebrew with 'brew install osmosis'

if you don't want to run tests, you should still be able to build and run osrm without installing any of the above.

the SConstruct file had to rearranged a bit to get os x compilation to work. other platforms should not be affected, but i couldn't test it on those other platforms. compilation on mac does not currently use openmp.

test are located in features/ and organized into feature files, each containing scenarios.

test and sandbox are now two separate folders. test is where all the tests are run. sandbox is where you can use rake task to download real osm data, run the server manually to test in a browser, etc.

speedprofile.ini has been split into separate files, stored in speedprofiles/

both test/ and sandbox/ folder contains a .stxxl config file. the one in the test folder uses a 1MB disk, the one in sandbox uses a 1GB disk.

for each test scenario, an osm data file is constructed based on the description in the test scenario. the osm file is converted to protobuffer and preprocessed with osrm-extract and osrm-prepare.

the resulting osrm files are cached, so that processing is only repeated if either the osm data, the speedprofile or the binaries have changed. this helps speed up the running of tests a lot.

test/server.ini and test/speedprofile.ini is now rewritten to ensure that the right data files are used.

osrm-routed is then launched, and routes are requested via http calls to port 5000 on localhost, and the response is compared to the expected result.

all request are timed out after 5 seconds. both timeouts and crashes are caught and reported.

to ensure a clean run of every test, all processes named osrm-extract, osrm-prepare and osrm-routed are killed before and after each test using a signal 9, no matter who launched them. i have only tested this on mac os x 10.7. it should work on linux, but process management can often behave differently depending on platform. test are not yet expected to work on windows, for example the unix shell command 'ps' is used. i assume there will be other issue too, but if course it should be possible to get it working.

Writing tests:
tests come in two main flavors. one where you specify data and test routes separately, and one where you just provide a table of ways and their tags to be tests.

with the first type, you setup the data by a small 'node map', and a list of ways (and optionally relations). finally you specify a list of start/end pairs, and the expected route, described by the ways traversed:

Scenario: Zig Zag
    Given the nodes
     | a |   | c |
     |   | b |   |

    And the ways
     | nodes |
     | ab    |
     | bc    |

    When I route I should get
     | from | to | route |
     | a    | c  | ab,bc |
     | c    | a  | bc,ab |

by default, tests use the bicycle speedprofile, but this can be changed for each scenario by adding:

    Given the speedprofile "car"

you can also modify the speedprofile by using:

    And the speedprofile settings
    | obeyOneways | no |
    | primary     | 50 |

note that 'Given' and 'And' is interchangeable in cucumber, you should just use what creates a natural language flow.

the second flavour of tests simply lists ways and their tags:

Scenario: Simplest possible oneway
    Given the defaults
    Then routability should be
     | highway | oneway | forw | backw |
     | primary |        | x    | x     |
     | primary | yes    | x    |       |
     | primary | -1     |      | x     |

an osm file is constructed, containing an isolated way for each row. columns are converted to tags. forw and backw has special meaning; if an forw column is present the way is tested for forward routability. if an backw row is present, it's tested for backwards routability.

nodes are spaced on grid with origin at 1,1 and a grid size of 100m

Running tests:
You can run all tests, or specific sets or scenarios.

to run all test: cucumber (or 'rake test')
to run test with a specific tag, use: cucumber --tags @restrictions
to run a specific scenario: cucumber features/restrictions.feature:6

routes are valided by parsing the instructions hash. osrm currently often return empty routes, which is one of the main reasons a lot of test are currently failing.

during test, several log files are used. output from osrm-extract and osrm-prepare are directed to test/preprocess.log. output from osrm-routed is directed to test/osrm-routed.log.

tests results are shown in the terminal. green rows indicates a passed route. yellow is an expected, but missing, result, while grey is an unexpected result.

there's an issue with the order failing rows are displayed, which can be somewhat confusing - the failing row is not directly beneauth the expected row.

additional info is logged to fail.log, containing details about the osm data used, the speedprofile, expected and returned routes, as well as actual query and response involved.

there's currently a lot of failing tests. i'm sure some are caused by incorrect test cases or bugs in the cucumber setup. we just need to iron things out.

Rake task:
a few useful rake task are included. you can run 'rake -T' to get a list of rake commands.

for example, you can run 'rake download ' to download and crop osm data into your sandbox folder. curently only a few fixed areas work, including:

kbh: openhagen
dk: denmark

after downloading, you can run 'rake process' to process the downloaded data.

to run your server in the terminal, use 'rake run'. you must download and process data beforehand.

you can also run the server in the background with 'rake up' and 'rake down'. output is directed to osrm-routed.log. again you must download and process data beforehand. note however, that the include index.html file doesn't point to localhost, which is what you need to use the server you run locally.

@DennisOSRM DennisOSRM commented on the diff Feb 13, 2012
@@ -214,10 +220,6 @@ class ExtractorCallbacks{
return true;
- if ( w.direction == _Way::opposite ){
DennisOSRM Feb 13, 2012 Project OSRM member

I suspect this line to break oneway=-1

emiltin Feb 13, 2012

you're welcome to ignore/revert this change

Project OSRM member

Thanks a lot. One question though, could you move the ini files back to the root directory?


sure no problem. i added the sandbox folder as a place for running osrm, downloading data, etc, but i'm happy to move it all back into the root folder


moved all ini files back to the root folder

Project OSRM member

This needs further documentation on how to get it run.


ok. i'll try to write up something. anything particular that you miss?

Project OSRM member

A wiki page on how to set up any depencies would be great. Some recipe to get the tests running.


i could also update the brew formula to easily install everything on mac

Project OSRM member

sure, I'll then add the steps to do so on Ubuntu.


good idea with the wiki page

Project OSRM member

I put up a wiki page with the basic information regarding the tests:


thanks a lot

Project OSRM member

I am getting the stuff to run on Linux right now. Is it possible to have cucumber create the test directory if it is not yet existing?


yes, but the test folder should be in the repo, since the .stxxl file needs to be there


the reason is that tests need an .stxxl config files with a minimal disk of 1MB, otherwise it takes too long to launch and terminate the binaries

Project OSRM member

One odd thing is that cucumber does not properly shutdown the routed process before spawning a new one (at least on Ubuntu).


the file feature/support/hooks.rb specified things to do before and after running each scenario


the code is in

it uses the 'ps' system command, and searches for processes with the name 'osrm-routed', then sends it a signal 9 (KILL)

Project OSRM member

I don't know the bevavior on Mac, but I guess that

ps -o pid -o state -o ucomm

lists all running processes of a user, right? On Linux it doesn't. So, I get the following output:

$ ps -o pid -o state -o ucomm
 4715 S bash
17996 R ps

But checking with '-e' gives me:

$ ps -e -o pid -o state -o ucomm | grep osrm
17429 S osrm-routed

from the manual:

 -A      Display information about other users' processes, including those without controlling terminals.
 -e      Identical to -A.

guess we can just add that option?

Project OSRM member

There must be something else. Adding -e or -A didn't help too much. In the end it also leaves a dangling osrm-routed process lying around.

Project OSRM member

I am not really Ruby-literate, but this short script should output if it detects a running instance of osrm-routed, right?

def each_process name, &block
  process_list = `ps -A -o pid -o state -o ucomm`
  process_list.scan /(\d+)\s+([^\s]*)\s+(#{name})/ do |pid,state|
  yield pid.to_i, state.strip if ['I','R','S','T'].include? state[0]

def find_pid name
  each_process(name) { |pid,state| return pid.to_i }
  return -1

print "started\n"
print "detected pid: " + find_pid("bash").to_s + "\n"
print "finished.\n"
Project OSRM member

So, I played around a bit. On Linux the output of 'ps' is different to the output of Mac OS X. Could you give me a sample output of ps -A -o pid -o state -o ucomm on the Mac's Terminal?

Project OSRM member

I am working on automated testing. A cronjob will be executing these tests. Results are then pushed onto the web. The URL is going to be

Right now, most tests are failing because of the 'ps' issue, but this can be fixed.

~/Project-OSRM$ ps -A -o pid -o state -o ucomm
    1 Ss   launchd         
   10 Ss   kextd           
   11 Ss   UserEventAgent  
   12 Ss   notifyd         
   13 Ss   diskarbitrationd
   15 Ss   ntpd            
   17 SNs  warmd           
   18 Ss   usbmuxd         
   20 Us   special_file_han
   21 Ss   syslogd         
   23 Ss   stackshot       
   24 Ss   securityd       
   26 Ss   revisiond       
   27 Ss   powerd          
   30 Ss   opendirectoryd  
   32 Ss   mds             
   33 Ss   mDNSResponder   
   35 Ss   loginwindow     
   37 Ss   KernelEventAgent
   39 Ss   hidd            
   40 Ss   fseventsd       
   42 Ss   dynamic_pager   
   46 Ss   configd         
   49 Ss   autofsd         
   52 Ss   distnoted       
   56 Ss   coreservicesd   
   85 SNs  netbiosd        
   91 Ss   WindowServer    
   95 Ss   CVMServer       
  105 Ss   coreaudiod      
  108 Ss   logind          
  118 Ss   launchd         
  121 S    UserEventAgent  
  123 S    distnoted       
  134 S    talagent        
  135 S    SystemUIServer  
  136 S    Finder          
  145 S    fontd           
  152 S    pboard          
  301 S    AppleSpell      
  304 SN   warmd_agent     
  305 S    ubd             
  311 S    imagent         
  316 S    AirPort Base Sta
  319 S    postgres        
  324 Ss   postgres        
  325 Ss   postgres        
  326 Ss   postgres        
  327 Ss   postgres        
  664 Ss   filecoordination
  911 S    lsboxd          
 2510 S    AAM Updates Noti
 3177 U    Dock            
 3178 Ss
 4104 S    cookied         
 4498 Ss   blued           
15508 S    DashboardClient 
45824 S    ssh-agent       
48055 S    PenTabletDriver 
48059 S    ConsumerTouchDri
48062 S    TabletDriver    
60030 S    TextMate        
69750 S    Activity Monitor
69753 Ss   activitymonitord
70526 U    Console         
73289 S    firefox         
74581 SN   mdworker        
74969 S    Terminal        
76095 S    iTunesHelper    
76993 S    plugin-container
81713 S    imklaunchagent  
82032 Ss   launchd         
82035 Ss   xpchelper       
82038 SN   mdworker        
82039 S    distnoted       
82040 Ss   xpchelper       
74971 Ss   login           
74972 S    bash            
81528 T    man             
81529 T    sh              
81530 T    sh              
81534 T    sh              
81536 T    less            
81765 S+   ruby            
81767 S+   osrm-routed     
78905 Ss   login           
78906 S+   bash            
78919 T    ping            
82052 Ss   login           
82053 S    bash            
82067 R+   ps              

maybe you can post what the output is on linux?
an alternative is to use ruby''s build in Process class to fetch the list

Project OSRM member

On Linux it is

```~/Project-OSRM$ ps -A -o pid -o state -o ucomm
1 S init
2 S kthreadd
3 S ksoftirqd/0
6 S migration/0
7 S migration/1
9 S ksoftirqd/1
11 S cpuset
12 S khelper
13 S netns
14 S kworker/u:1
15 S sync_supers
16 S bdi-default
17 S kintegrityd
18 S kblockd
19 S ata_sff
20 S khubd
21 S md
23 S khungtaskd
24 S kswapd0
25 S ksmd
26 S khugepaged
27 S fsnotify_mark
28 S ecryptfs-kthrea
29 S crypto
37 S kthrotld
38 S scsi_eh_0
39 S scsi_eh_1
40 S kworker/u:2
41 S scsi_eh_2
42 S scsi_eh_3
226 S scsi_eh_4
228 S scsi_eh_5
229 S scsi_eh_6
230 S scsi_eh_7
278 S flush-8:0
279 S kjournald
328 S upstart-udev-br
330 S udevd
353 S kworker/1:2
544 S krdsd
615 S hd-audio0
753 S upstart-socket-
756 S rpcbind
776 S rpciod
777 S nfsiod
863 S sshd
935 S rpc.gssd
939 S rpc.statd
940 S rsyslogd
953 S rpc.idmapd
962 S automount
1133 S dbus-daemon
1154 S modem-manager
1163 S cupsd
1184 S avahi-daemon
1185 S avahi-daemon
1192 S colord
1199 S getty
1204 S getty
1214 S NetworkManager
1216 S lightdm
1221 S getty
1222 S getty
1224 S getty
1230 S acpid
1245 S atd
1246 S cron
1295 S polkitd
1303 S Xorg
1333 S ntpd
1390 S accounts-daemon
1431 S console-kit-dae
1615 S upowerd
1741 S vmware-usbarbit
1801 S kworker/0:2
1821 S rtkit-daemon
1825 S python
1846 S sh
1848 S osrm-routed
1851 S iked.real
2008 S nscd
2086 S iprt
2089 S udevd
2146 S winbindd
2150 S winbindd
2220 S sendmail-mta
2264 S dhcdbd
2277 S bluetoothd
2281 S l2cap
2284 S krfcommd
2293 S gpsd
2350 S apache2
2392 S getty
2395 S apache2
2396 S apache2
2397 S apache2
2398 S apache2
2399 S apache2
2400 S udevd
2455 S gnome-keyring-d
2464 S gnome-session
2510 S ssh-agent
2513 S dbus-launch
2514 S dbus-daemon
2516 S gvfsd
2521 S gvfs-fuse-daemo
2530 S gconfd-2
2534 S gnome-settings-
2547 S gnome-screensav
2548 S compiz
2554 S pulseaudio
2557 S gconf-helper
2561 S polkit-gnome-au
2563 S blueman-applet
2565 S nautilus
2567 S gnome-fallback-
2568 S nm-applet
2573 S gvfs-gdu-volume
2577 S skype
2579 S bluetooth-apple
2581 S udisks-daemon
2582 S udisks-daemon
2585 S gvfs-gphoto2-vo
2596 S xfconfd
2600 S gvfs-afc-volume
2620 S gdu-notificatio
2622 S obex-data-serve
2624 S gvfsd-trash
2633 S gvfsd-burn
2645 S sh
2646 S unity-window-de
2648 S bamfdaemon
2660 S gvfsd-metadata
2693 S unity-panel-ser
2724 S
2726 S indicator-sessi
2735 S indicator-sound
2736 S indicator-messa
2739 S indicator-appli
2771 S ubuntuone-syncd
2799 S gsd-printer
2804 S dconf-service
2810 S thunderbird-bin
2822 S firefox
2826 S unity-applicati
2828 S unity-files-dae
2830 S unity-music-dae
2856 S unity-musicstor
2895 S zeitgeist-daemo
2898 S cat
2900 S zeitgeist-datah
2912 S update-notifier
2998 S xchat
3035 S plugin-containe
3054 S npviewer.bin
3080 S /usr/bin/termin
3092 Z /usr/bin/termin
3093 S bash
4715 S bash
4778 R ps
19419 S gvfsd-http
19552 S pidgin
27298 S plugin-containe
27317 S npviewer.bin
27336 Z acroread
27809 S kworker/0:0
30276 S kworker/1:1
30344 S eclipse
30358 S java
32566 S kworker/1:0
32662 S geany
32665 Z geany
32666 S bash
32683 S kworker/0:1
32749 S xfce4-notifyd

Using the builtin Process class is perhaps the most portable way.

i'm noticing that states can include "+", so it might be the fltering code that's wrong:
['I','R','S','T'].include? state[0]


yeah Process might be the way forward


another alternative: killall


changed the code to use a ruby gem to fetch process list.

note: you need to rerun 'bundle install' in the root folder, to get the sys-proctable gem installed.

Project OSRM member

This gives better results, but still not perfect.

32 scenarios (15 failed, 17 passed)
88 steps (15 failed, 73 passed)

How many tests are supposed to fail right now?


lets start simple. when i run "cucumber --tags @basic" i get:

7 scenarios (3 failed, 4 passed)
21 steps (3 failed, 18 passed)

as far as i can tell, these are legitimate failures, caused by odd osrm behaviour?


you can also try "cucumber --tags @smallest". this runs a single, very simple test. this should pass without problems.

Project OSRM member

7 scenarios (2 failed, 5 passed)
21 steps (2 failed, 19 passed)

Project OSRM member

cucumber --tags @smallest" runs fine.


or run a single test with "cucumber features/basic.feature:54". the first row of this one currently fails for me, returning bc, instead of ab,bc

(Scenario: Two ways connected in a straight line)


i moved one scenario out of the @basic scope, so i think we're now getting consistent results?


note that test/fail.log will contain additional info about failing scenarios.

Project OSRM member

I did not yet look at all the failing tests, but should they all run through?


no they don't all run through... some could be due to incorrect tests of course. as i said, we just need to iron things out. we can perhaps look at one failing test and see what's going on.


for example: Two ways connected in a straight line.
going from a to c returns bc. should this be ab,bc as indicated in the test?


perhaps we should use ab-bc instead of ab,bc. might avoid a few misunderstandings...

Project OSRM member

I am close to preparing the final push to master repo. We should start changing, discussing failing tests afterwards.


makes sense


you might want to check on that thing with oneway=-1. as i said, you're welcome to revert/ignore that change if you want

Project OSRM member

I ignored it ;-)


good choice :-)


i'm about to call it a day, but will be back tomorrow morning

Project OSRM member

I'll keep on hacking on this for the coming two hours. The ambition to get it work kicked in.

Project OSRM member
$ cucumber --tags @basic
7 scenarios (7 passed)
21 steps (21 passed)

There's progress!




@DennisOSRM DennisOSRM pushed a commit that referenced this pull request Feb 14, 2012
DennisOSRM Adds the cucumber test framework referenced in issues #26, #95, #114 b210b22
@DennisOSRM DennisOSRM closed this Feb 14, 2012
@Zhdanovich Zhdanovich pushed a commit to Zhdanovich/Project-OSRM that referenced this pull request Jul 20, 2014
DennisOSRM Adds the cucumber test framework referenced in issues #26, #95, #114 f91f17a
@Zhdanovich Zhdanovich pushed a commit to Zhdanovich/Project-OSRM that referenced this pull request Jul 20, 2014
@emiltin emiltin Adds the cucumber test framework referenced in issues #26, #95, #114 ced10e2
@daniel-j-h daniel-j-h added a commit that referenced this pull request Jan 5, 2016
@daniel-j-h daniel-j-h Squashed 'third_party/libosmium/' changes from c43f8db..0ff2780
0ff2780 Release v2.5.4
3f1583a Remove workaround for MSVC missing constexpr support.
2a6c80b Rewrite expressions to avoid warnings on MSVC.
9b0602a Make two functions non-constexpr that can't be.
ca1e501 Make NodeRef constructor, accessors and comparison ops constexpr.
fb48312 Disable some problematic clang_tidy checks.
d2d2812 Only do clang_tidy checks on files that are configured to be built.
5af55bb Always use braces after while() and if().
aebb6e3 No else after return.
65a3bf6 Better clang-tidy config.
3a965fa Add typedef Buffer::value_type needed when using std::back_inserter.
c20ac26 Add lots of explicits to constructors.
1d12e09 Add clang-tidy make target.
052b1ee Add benchmark programs to files checked with cppcheck.
9ccbb49 Use only "final", not "override final".
0b9df1f User 'override' instead of 'virtual' in overridden functions.
1d0c1c6 Remove unnecessary get() call.
705391b Use consistent namespace closing comment.
25c1f38 Only use "final" on overridden methods, not "override".
8da2553 Setting CMAKE_EXPORT_COMPILE_COMMANDS works only after project() command.
5fec437 Use newest protozero library (v1.2.3).
a3d759b Overloaded version of add_tag() with std::pair of strings.
1b4bcf9 Add function to add tag to tag list from existing tag.
7087e62 Update gdalcpp.hpp header to v1.1.1.
0008e8c Update change log.
39fe3a5 Add conversion and comparison operators to Timestamp.
e6643a7 Update gdalcpp.
650280f Bugfix: Improved segment intersection function.
1b20597 Make operator bool explicit for (Typed)MemoryMapping.
b580b25 Merge pull request #136 from tomhughes/ruby
a7c6737 The multipolygon test only needs the ruby interpreter
4a0a9e7 Make conversion from Buffer to bool noexcept.
7cdabbe Set thread name in o5m input format.
6a17a8d Break out computation of thread pool size into function and test it.
1950853 Allow initializing a Timestamp from any integral type.
4103198 Fix link in change log.
dc2ed89 Release v2.5.3
a2816b7 Fix end_of_time() Timestamp, add constructor taking std::string&.
3f5eb8e Updated changelog.
9b75c14 Cleanup and better docs for DiffObject and related classes.
d0beead Better documentation for NodeRef and NodeRefList classes.
0192292 Cleanup/doc/test osmium::util::Options.
b3db055 Use header with forward declarations.
8b3fe16 Improved documentation.
cd2ce38 Remove unused typedef Buffer::value_type.
87c9b32 Cleanup and test Buffer::add_buffer() function.
e519278 Improved documentation for osmium::memory::Buffer.
d721d43 Deprecate set_full_callback(). Better doc for deprecated functions.
58b5fd1 Remove DataFile class which was never used anywhere.
30b806e Simplify some tests.
62958df Update change log.
a8a2e68 Merge pull request #134 from zerebubuth/buffer-size-checks
987faab Move some code belonging into there into relations::Collector.
da31175 When the buffer isn't big enough, even when empty, to reserve the space that's being requested then it shouldn't reserve it anyway.
5d2f949 Swap the growth flag and any "full" callback as well as all the other members when swapping this buffer object.
1845aa9 The assertions prior to dereference are more strict than the conversion to bool. However, conversion to bool is often used as a predicate for whether dereference is okay, so the behaviour is easier to understand if they match.
abdfee1 Remove unused m_want_types in relations collector.
95b387f "Officially" mark two constructors as deprecated.
1d0da5f Release v2.5.2
31c3eaf Copy iterator around less often.
83c93d0 Do not check the write_future for exceptions on every item.
1c805ea Add counting of push() calls on queue in debug mode.
aa869c0 Release v2.5.1
212578b Fix documentation of Writer constructor.
0445dd8 Add new header file with forward declarations of commonly used classes.
4b6baac Optionally include external library headers.
712a6d1 Update change log.
fc78d04 Update style rules.
b590fe3 Unify use of 'typename' in templates. Unify spacing of ellipsis operator.
8c450ac Move osmium/io/overwrite.hpp to writer_options.hpp.
08eed02 Move DEPRECATED macro into compatibility.hpp.
b72eb8d Release v2.5.0
5aeba6b Better formatting for invalid timestamps on debug output.
6772413 Add valid() function on Timestamp.
7549b05 Update change log.
84119b0 Add option to fsync files after they are written.
db1bd92 Make optional parameters on Writer work in any order.
3482e3e Remove boilerplate. Add explicits to constructors.
cf389c6 Rename the wrap() function to the better ensure_cleanup().
678049e Use reference instead of pointer for decompressor.
7189d28 More consistent use and naming of Function templates.
3d66deb Use const& for parameter that's not changed.
88d65fb Fix warning with a cast.
03e8c9f Fix some misc issues found by cppcheck.
4848676 Options to cppcheck to check everything (--force) and ignore assert.
5f89a8c Add lots of assert() calls to Buffer implementation.
c990b43 Use a wrapper function in Writer for error handling.
04d9e3e Refactor of writer to work properly in all error cases.
6daf2d3 Throw when reading from Reader after eof or error. Use io_error everywhere.
713a189 Rename OutputFormat::close() to write_end().
7905add Refactor Reader/Writer code.
c050a05 Make thread_handler class movable.
8e661a2 Make DeltaEncode/Decode more generic and fix signedness issues.
da712a9 Fixed a few signedness issues.
dc04e67 Avoid possible narrowing conversion.
abd44af Make a variable static that should be.
7039fa6 Avoid global variable.
9e9fc0f Add a noreturn attribute.
a681a2c Do not pass Timestamp class through forwarding.
d37b717 Clean up status handling in Reader and Writer.
3b1f0d8 Add at_end_of_data() helper function to get self-documenting code.
bf3cc8c Add add_end_of_data_to_queue() helper function.
94bdd09 Fix test.
531db80 Use valid() on future instead of an extra bool.
7f328b3 Make RVO work for pop() function.
c1d726d Add some static_cast_with_assert paranoia checks.
5a064f7 Make sure DeltaDecode/DeltaEncode classes work for all integer types.
c69a701 Fix some integer types.
2b2cfc9 Remove extra semicolons at end of function definitions.
2b74aa6 Use workaround for GCC unused variable warning for index::map, too.
f7fb94d Different way of supression unused-variable warning.
c0813e6 Better handling of threads.
963ff8e Move internal buffer from OutputIterator into Writer.
698d027 Update change log.
24270dd Remove unused variables.
64d6363 Remove unnecessarily fully-qualified name.
5ccacc7 Add support for reading o5m and o5c files.
b603904 Fix up includes.
6013a27 Remove pessimizing move.
a19e4cf Use queue_wrapper in Reader, too.
74a5174 Refactor thread creation for WriteThread.
c480b33 Fix test code.
e135597 Do not use promise in two threads at once.
6fa16ca Refactor input format code.
53fc576 More robust implementation of writer/writer_thread.
1285316 Put some queue handling into new wrapper class.
a1e6e6f Rename osmium/io/detail/util.hpp to queue_util.hpp.
f42d6fc New add_to_queue() helper functions.
3db9b49 Simplify read thread handling.
a903561 Move any exception in read thread through queue.
ee977cb Add more tests for reader code.
99aaa45 Factor out input handling in classes derived from Parser.
7afa03c Wrap access to m_read_types in InputFormat.
f6c5971 Wrap sending to output queue in InputFormat.
26f4170 Consolidate header handling in InputFormat.
a0aa3ed Remove unnecessary inline declaration.
894e84a Declare a bunch of destructors noexcept and use consistent comments.
6c49b43 Add hack to append_printf_formatted_string() so it works on Windows.
20c3f20 Remove a move that prevented copy elision.
8192a4c Pull low-level string formatting out of debug output and test it.
190aa46 Move low-level string formatting/encoding functions into own header.
3e35441 Add Option::is_not_false() helper, use and test it.
0a90339 Updated some comments.
a44066f Make naming of output format options more consistent and document them.
a59b60b Run serialization of PBF blobs in worker threads speeding up PBF writer.
18a739f Remove unused m_file attribute from OutputFormat class.
9b5d3b7 Various output option related cleanups.
36772a0 Consistent ordering of methods in *InputFormat classes.
c04a51f Factor out common code in output formats.
ebc53d4 Do not use "explicit" on constructors with more than one argument.
e1dfcfc Make all destructors in io/detail noexcept.
cfd7970 Use consistent handling of output options in all outputs.
c4e71f0 Better implementation for output_formatted() and tests for it.
899a061 Extract common code from output formats.
b226ae4 Factor out common code from *OutputBlock classes.
fe4b287 Cleanup WriteThread class.
af421df Consistent naming of queue typedefs.
e8253c4 Add missing include.
9f71cd3 Refactor management of read thread into its own class.
4c96e16 Refactor Reader/InputFormat.
fa02e6c Refactor input format code.
d14ea27 Extract common code from PBF/XMLParser into new Parser class.
fe7acd3 Better handling of failures when parsing header.
2e3b6cd Remove unnecessary include of <future>.
3bd18b8 Factor out common code in input format.
2915604 Only get promise and future once, even if header() is called multiple times.
cfc980c Make output buffer for XML parser smaller.
4c1ffa7 Orderly shutdown in io::Reader.
8c7aa32 Remember whether the input queue was exhausted.
535bb6a Function call in new thread can be void.
e0d5448 Factor out some helper function for queue cleanup.
5a4c6b5 Use std::thread directly for input instead of std::async.
c1bdf4f Move common code from InputFormat child classed into base class.
89caa6e Report failures in input_format through the queue.
8f4d300 Rename (m_)queue to (m_)output_queue.
8fc1f5b Reorder XMLParser class making check_attributes() private.
df381d7 Make sure we always send end-of-file from PBF parser.
1a178b0 Factor out construction of PBFDataBlobDecoder.
cb34f76 Factor out read_from_input_queue_with_check() method.
21b51cc Factor out parse_data_blobs() method.
dc957a8 Make some variables const.
1c2812c Make methods private that don't need to be public.
81e5625 Refactor out parse_header_blob() function.
f9e5760 Fix test: New signature of XMLParser constructor.
43746d3 Add copy constructor to PBFParser.
8524780 Rename variables and other changes for clarity.
3e9627b Removed now superfluous parameters from InputFormat class.
7eac5cf Simplify input format class.
3ea2ace Set max queue size only in one place.
77ab086 Formatting.
ceee837 Use std::async instead of "raw" std::thread for pbf input.
6cafb45 Move and rename PromiseKeeper class: Now in thread/util.hpp.
06eff29 Set thread name for xml parser thread.
bd485cd Refactoring of threading code for input.
fc03bf6 Make sure (de)compression classes clean up properly.
27af4ea Use special function to shut down pool workers instead of an atomic<bool>.
84297b3 Bugfix: auto and std::minmax() don't mix well.
597ecc4 Always use std::swap() in the idiomatic form.
10dd14f Remove threading test that fails when machine is too busy.
2072786 Use reserve() to spead up dumping indexes.
66a344b Declare some index functions noexcept, especially destructors.
a0586da Use map::find() instead of awkward try-catch block.
d38a7f1 Do not run make tasks in parallel.
cd33daa Do not use clever YAML aliases, instead copy dependencies explicitely
4ad6e43 Integrate more compiler and os versions
b2c519b Check return code of close() system call and throw.
369057b Update protozero to current 1.2.2.
d1db14b Collect debug output options into struct.
54667dd More consistent debug output of way nodes, relation members and changeset comments.
67e1513 Add some paranoia checks to xml parser.
69de191 Refactoring in xml reader: New function check_attributes().
c67f3f3 Add support for changeset discussions (comments).
9c5531c Merge pull request #121 from DerDakon/cmake-find-no-components
44be1a7 Add helper functions to make input iterator ranges and output iterators.
76e2b91 Merge pull request #130 from alex85k/master
5a4fa6b remove assertion messageboxes in tests on Windows
bac5a77 Updated change log.
7e7bba4 Updated included protozero library to 1.2.0.
1ae370d Merge pull request #122 from zerebubuth/pbf-decode-non-visible-node-locations
5897468 Merge branch 'master' of
7f2de1b Bugfix: Delta iterator handling.
65d31e9 Try ; as cmake list separator.
3a9dbc2 Add PBF libraries, now that the test reads PBF too. Thanks @tomhughes for pointing this out.
9a22ea1 Add test case for reading deleted / non-visible nodes in history files.
36098a8 Decode lat/lon even for non-visible nodes.
8279fd1 kick off AppVeyor to test new binary deps package with gdal200
c8244f7 FindOsmium: prevent errors in list(REMOVE_DUPLICATES) when no components are requested
a02806a Use https URL to travis.
a1b7015 Fix some includes.
468e4d8 Remove pessimizing std::move.
427d2e0 Do iwyu check on header files in alphabetical order.
be9a996 Release v2.4.1
95a3bc8 Fixed CRC calculation of tags and changesets.
4e157e3 Release v2.4.0
3da68f0 Fixed setting of binary mode on Windows.
81aa057 Use binary mode for memory mapped file on Windows.
986cb7e Set stdout to binary mode on windows before writing to files.
27d02eb Bugfix: Do not dereference end iterator.
e96eeaf Updated change log.
64a55ce FindOsmium: let FPHSA handle all the additionally required things
e152057 FindOsmium: pass the proper module name to FPHSA
a4acce3 Remove restriction on master branch in appveyor config.
10c8265 FindOsmium: simplify the fallback code for sparsetable::size_type
190ed47 remove the correct include dir from OSMIUM_INCLUDE_DIRS
aaa99c1 avoid that FindOsmium finds a random include dir
6406010 Add a magic define fixing a boost problem.
2fa6674 Remove superfluous file paths from cmake config.
e081a51 Merge pull request #114 from DerDakon/do-not-cache-version
20e1a24 Use external gdalcpp wrapper for compatibility with GDAL 2.
3b7cc86 Fix initialization order in DeltaEncodeIterator.
0954b0f Fix possibly uninitialized variable.
f081942 Take byte swap functions out of CRC class.
e085aae Fix byte swap, add test cases for crc.
e648b62 Merge pull request #116 from DerDakon/yml-simplify
7912897 properly put bzip2 library in the CMake cache
e0ea72b use less variables when defining the test environment
cf8ff6c do not cache the version string
38234cd Remove pragmas disabling warnings from gdal includes.
82d8c30 Include headers of external libraries as "system libraries".
f721b86 Update protozero to version 1.1.0.
a29ef82 Add some magic to enable folding on travis output.
18b2418 Removed toogr examples. They are in their own repository now.
89c8220 AppVeyor: 1st try with VS2015
93a1626 Added recent changes to change log.
ce4b45e Bugfix: Program hanging when opening unknown file type.
06ad6ef Rename add_string() to store_in_stringtable() and use right return type.
869058d Add explicit conversion that always works.
0b28f2c Add missing check in TagListBuilder add_tag() overload.
51fa9c0 Check in builder that key/value of a tag is not too long.
9b1da20 Check that string table isn't overflowing.
2c732c6 Add some extra paranoia checks and type conversions to pbf writer.
f92096a Fix integer size.
a47ddb4 Force conversion to smaller int type, because we know it must fit.
f150ff1 Rename variable that was hiding parameter name.
ab92064 Use correct size_t as return type.
2f2bf68 Check that roles are no longer than max allowed string length.
4a7df68 Check strings for max length in PBF input.
e4b8bb0 Explicit conversion to bool.
d18352d Make conversion from double to integer explicit.

git-subtree-dir: third_party/libosmium
git-subtree-split: 0ff278001f6e0bc79040add736452bef3aa4ff06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment