| cmake_policy(SET CMP0054 NEW) |
| |
| function(assert_expected_list_len list_var expected_size) |
| list(LENGTH ${list_var} _size) |
| if(NOT _size EQUAL ${expected_size}) |
| message(FATAL_ERROR "list size expected to be `${expected_size}`, got `${_size}` instead") |
| endif() |
| endfunction() |
| |
| # Pop from undefined list |
| list(POP_FRONT test) |
| if(DEFINED test) |
| message(FATAL_ERROR "`test` expected to be undefined") |
| endif() |
| |
| # Pop from empty list |
| set(test) |
| list(POP_FRONT test) |
| if(DEFINED test) |
| message(FATAL_ERROR "`test` expected to be undefined") |
| endif() |
| |
| # Default pop from 1-item list |
| list(APPEND test one) |
| list(POP_FRONT test) |
| assert_expected_list_len(test 0) |
| |
| # Pop from 1-item list to var |
| list(APPEND test one) |
| list(POP_FRONT test one) |
| assert_expected_list_len(test 0) |
| if(NOT DEFINED one) |
| message(FATAL_ERROR "`one` expected to be defined") |
| endif() |
| if(NOT one STREQUAL "one") |
| message(FATAL_ERROR "`one` has unexpected value `${one}`") |
| endif() |
| |
| unset(one) |
| unset(two) |
| |
| # Pop from 1-item list to vars |
| list(APPEND test one) |
| list(POP_FRONT test one two) |
| assert_expected_list_len(test 0) |
| if(NOT DEFINED one) |
| message(FATAL_ERROR "`one` expected to be defined") |
| endif() |
| if(NOT one STREQUAL "one") |
| message(FATAL_ERROR "`one` has unexpected value `${one}`") |
| endif() |
| if(DEFINED two) |
| message(FATAL_ERROR "`two` expected to be undefined") |
| endif() |
| |
| unset(one) |
| unset(two) |
| |
| # Default pop from 2-item list |
| list(APPEND test one two) |
| list(POP_FRONT test) |
| assert_expected_list_len(test 1) |
| if(NOT test STREQUAL "two") |
| message(FATAL_ERROR "`test` has unexpected value `${test}`") |
| endif() |
| |
| # Pop from 2-item list |
| list(PREPEND test one) |
| list(POP_FRONT test one) |
| assert_expected_list_len(test 1) |
| if(NOT DEFINED one) |
| message(FATAL_ERROR "`one` expected to be defined") |
| endif() |
| if(NOT one STREQUAL "one") |
| message(FATAL_ERROR "`one` has unexpected value `${one}`") |
| endif() |
| if(NOT test STREQUAL "two") |
| message(FATAL_ERROR "`test` has unexpected value `${test}`") |
| endif() |
| |
| # BUG 19436 |
| set(myList a b c) |
| list(POP_FRONT myList first second) |
| if(NOT first STREQUAL "a") |
| message(FATAL_ERROR "BUG#19436: `first` has unexpected value `${first}`") |
| endif() |
| if(NOT second STREQUAL "b") |
| message(FATAL_ERROR "BUG#19436: `second` has unexpected value `${second}`") |
| endif() |
| if(NOT myList STREQUAL "c") |
| message(FATAL_ERROR "BUG#19436: `myList` has unexpected value `${myList}`") |
| endif() |