1include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake") 2 3macro(TEST command expected) 4 if("x${result}" STREQUAL "x${expected}") 5 #message("TEST \"${command}\" success: \"${result}\" expected: \"${expected}\"") 6 else() 7 message(SEND_ERROR "${CMAKE_CURRENT_LIST_LINE}: TEST \"${command}\" failed: \"${result}\" expected: \"${expected}\"") 8 endif() 9endmacro() 10 11set(mylist andy bill ken brad) 12 13list(LENGTH mylist result) 14TEST("LENGTH mylist result" "4") 15list(LENGTH "mylist" result) 16TEST("LENGTH \"mylist\" result" "4") 17 18list(LENGTH "nonexiting_list1" result) 19TEST("LENGTH \"nonexiting_list1\" result" "0") 20 21list(GET mylist 3 2 1 0 result) 22TEST("GET mylist 3 2 1 0 result" "brad;ken;bill;andy") 23 24list(GET mylist 0 item0) 25list(GET mylist 1 item1) 26list(GET mylist 2 item2) 27list(GET mylist 3 item3) 28set(result "${item3}" "${item0}" "${item1}" "${item2}") 29TEST("GET individual 3 2 1 0 result" "brad;andy;bill;ken") 30 31list(GET mylist -1 -2 -3 -4 result) 32TEST("GET mylist -1 -2 -3 -4 result" "brad;ken;bill;andy") 33 34list(GET mylist -1 2 -3 0 result) 35TEST("GET mylist -1 2 -3 0 ${result}" "brad;ken;bill;andy") 36 37list(GET "nonexiting_list2" 1 result) 38TEST("GET \"nonexiting_list2\" 1 result" "NOTFOUND") 39 40set(result andy) 41list(APPEND result brad) 42TEST("APPEND result brad" "andy;brad") 43 44list(APPEND "nonexiting_list3" brad) 45set(result "${nonexiting_list3}") 46TEST("APPEND \"nonexiting_list3\" brad" "brad") 47 48list(INSERT "nonexiting_list4" 0 andy bill brad ken) 49set(result "${nonexiting_list4}") 50TEST("APPEND \"nonexiting_list4\" andy bill brad ken" "andy;bill;brad;ken") 51 52set(result andy brad) 53list(INSERT result -1 bill ken) 54TEST("INSERT result -1 bill ken" "andy;bill;ken;brad") 55 56set(result andy brad) 57list(INSERT result 2 bill ken) 58TEST("INSERT result 2 bill ken" "andy;brad;bill;ken") 59 60set(result andy bill brad ken bob) 61list(REMOVE_ITEM result bob) 62TEST("REMOVE_ITEM result bob" "andy;bill;brad;ken") 63 64set(result andy bill bob brad ken peter) 65list(REMOVE_ITEM result peter bob) 66TEST("REMOVE_ITEM result peter bob" "andy;bill;brad;ken") 67 68set(result bob andy bill bob brad ken bob) 69list(REMOVE_ITEM result bob) 70TEST("REMOVE_ITEM result bob" "andy;bill;brad;ken") 71 72set(result andy bill bob brad ken peter) 73list(REMOVE_AT result 2 -1) 74TEST("REMOVE_AT result 2 -1" "andy;bill;brad;ken") 75 76# ken is at index 2, nobody is not in the list so -1 should be returned 77set(mylist andy bill ken brad) 78list(FIND mylist ken result) 79TEST("FIND mylist ken result" "2") 80 81list(FIND mylist nobody result) 82TEST("FIND mylist nobody result" "-1") 83 84set(result ken bill andy brad) 85list(SORT result) 86TEST("SORT result" "andy;bill;brad;ken") 87 88list(SORT result COMPARE NATURAL) 89TEST("SORT result COMPARE NATURAL" "andy;bill;brad;ken") 90 91set(result andy bill brad ken) 92list(REVERSE result) 93TEST("REVERSE result" "ken;brad;bill;andy") 94 95set(result bill andy bill brad ken ken ken) 96list(REMOVE_DUPLICATES result) 97TEST("REMOVE_DUPLICATES result" "bill;andy;brad;ken") 98 99# these commands should just do nothing if the list is already empty 100set(result "") 101list(REMOVE_DUPLICATES result) 102TEST("REMOVE_DUPLICATES empty result" "") 103 104list(REVERSE result) 105TEST("REVERSE empty result" "") 106 107list(SORT result) 108TEST("SORT empty result" "") 109 110list(SORT result COMPARE NATURAL) 111TEST("SORT result COMPARE NATURAL" "") 112 113set(result 1.1 10.0 11.0 12.0 12.1 2.0 2.1 3.0 3.1 3.2 8.0 9.0) 114 115list(SORT result COMPARE NATURAL) 116TEST("SORT result COMPARE NATURAL" "1.1;2.0;2.1;3.0;3.1;3.2;8.0;9.0;10.0;11.0;12.0;12.1") 117 118list(SORT result) 119TEST("SORT result" "1.1;10.0;11.0;12.0;12.1;2.0;2.1;3.0;3.1;3.2;8.0;9.0") 120 121list(SORT result COMPARE NATURAL ORDER DESCENDING) 122TEST("SORT result COMPARE NATURAL ORDER DESCENDING" "12.1;12.0;11.0;10.0;9.0;8.0;3.2;3.1;3.0;2.1;2.0;1.1") 123 124set(result b-1.1 a-10.0 c-2.0 d 1 00 0) 125 126list(SORT result COMPARE NATURAL) 127TEST("SORT result COMPARE NATURAL" "00;0;1;a-10.0;b-1.1;c-2.0;d") 128 129 130# these trigger top-level condition 131foreach(cmd IN ITEMS Append Find Get Insert Length Reverse Remove_At Remove_Duplicates Remove_Item Sort) 132 set(${cmd}-No-Arguments-RESULT 1) 133 set(${cmd}-No-Arguments-STDERR ".*CMake Error at List-${cmd}-No-Arguments.cmake:1 \\(list\\):.*list must be called with at least two arguments.*") 134 string(TOUPPER ${cmd} cmd_upper) 135 set(_test_file_name "${CMAKE_CURRENT_BINARY_DIR}/List-${cmd}-No-Arguments.cmake") 136 file(WRITE "${_test_file_name}" "list(${cmd_upper})\n") 137 check_cmake_test_single(List "${cmd}-No-Arguments" "${_test_file_name}") 138endforeach() 139 140set(Get-List-Only-STDERR "at least three") 141set(Find-List-Only-STDERR "three") 142set(Insert-List-Only-STDERR "at least three") 143set(Length-List-Only-STDERR "two") 144set(Remove_At-List-Only-STDERR "at least two") 145 146foreach(cmd IN ITEMS Find Get Insert Length Remove_At) 147 string(TOUPPER ${cmd} cmd_upper) 148 set(${cmd}-List-Only-RESULT 1) 149 set(${cmd}-List-Only-STDERR ".*CMake Error at List-${cmd}-List-Only.cmake:1 \\(list\\):.*list sub-command ${cmd_upper} requires ${${cmd}-List-Only-STDERR} arguments.*") 150 set(_test_file_name "${CMAKE_CURRENT_BINARY_DIR}/List-${cmd}-List-Only.cmake") 151 file(WRITE "${_test_file_name}" "list(${cmd_upper} mylist)\n") 152 check_cmake_test_single(List "${cmd}-List-Only" "${_test_file_name}") 153endforeach() 154 155set(thelist "" NEW OLD) 156 157foreach (_pol ${thelist}) 158 cmake_policy(SET CMP0007 ${_pol}) 159 list(GET thelist 1 thevalue) 160 if (NOT thevalue STREQUAL _pol) 161 message(SEND_ERROR "returned element '${thevalue}', but expected '${_pol}'") 162 endif() 163endforeach (_pol) 164