feat(tests/shared): add test for the hierarchical name C API

This commit is contained in:
Leonardo de Moura 2015-08-17 17:43:02 -07:00
parent 42d41fb276
commit 9d486a4e88
6 changed files with 59 additions and 2 deletions

View file

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 2.8.7) cmake_minimum_required(VERSION 2.8.7)
project(LEAN CXX) project(LEAN CXX C)
set(LEAN_VERSION_MAJOR 0) set(LEAN_VERSION_MAJOR 0)
set(LEAN_VERSION_MINOR 2) set(LEAN_VERSION_MINOR 2)
set(LEAN_VERSION_PATCH 0) set(LEAN_VERSION_PATCH 0)
@ -364,7 +364,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--export-all") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--export-all")
endif() endif()
add_subdirectory(api) add_subdirectory(api)
add_library(leanshared SHARED shared/init.cpp ${LEAN_OBJS} $<TARGET_OBJECTS:api>) add_library(leanshared SHARED shared/init.cpp $<TARGET_OBJECTS:api> ${LEAN_OBJS})
target_link_libraries(leanshared ${EXTRA_LIBS}) target_link_libraries(leanshared ${EXTRA_LIBS})
add_subdirectory(shell) add_subdirectory(shell)

View file

@ -29,6 +29,8 @@ lean_bool lean_is_anonymous_name(lean_name n);
lean_bool lean_is_str_name(lean_name n); lean_bool lean_is_str_name(lean_name n);
/** \brief Return lean_true iff \c n is a name of the form <tt>pre.i</tt> where \c i is an unsigned integer. */ /** \brief Return lean_true iff \c n is a name of the form <tt>pre.i</tt> where \c i is an unsigned integer. */
lean_bool lean_is_idx_name(lean_name n); lean_bool lean_is_idx_name(lean_name n);
/** \brief Return true iff the two given hierarchical names are equal */
lean_bool lean_name_eq(lean_name n1, lean_name n2);
/** \brief Return the prefix of the given name. /** \brief Return the prefix of the given name.
\pre !lean_is_anonymous_name(n) \pre !lean_is_anonymous_name(n)
*/ */

View file

@ -49,6 +49,10 @@ lean_bool lean_is_idx_name(lean_name n) {
return n && to_name_ref(n).is_numeral(); return n && to_name_ref(n).is_numeral();
} }
lean_bool lean_name_eq(lean_name n1, lean_name n2) {
return n1 && n2 && to_name_ref(n1) == to_name_ref(n2);
}
lean_bool lean_get_name_prefix(lean_name n, lean_name * r, lean_exception * ex) { lean_bool lean_get_name_prefix(lean_name n, lean_name * r, lean_exception * ex) {
LEAN_TRY; LEAN_TRY;
check_nonnull(n); check_nonnull(n);

View file

@ -5,6 +5,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura Author: Leonardo de Moura
*/ */
#include <string.h> #include <string.h>
#include "api/lean_string.h"
#include "api/string.h" #include "api/string.h"
namespace lean { namespace lean {

View file

@ -3,3 +3,9 @@ target_link_libraries(shared_test ${EXTRA_LIBS} leanshared)
add_test(NAME shared_test add_test(NAME shared_test
WORKING_DIRECTORY "${LEAN_BINARY_DIR}" WORKING_DIRECTORY "${LEAN_BINARY_DIR}"
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/shared_test") COMMAND "${CMAKE_CURRENT_BINARY_DIR}/shared_test")
add_executable(c_name_test name.c)
target_link_libraries(c_name_test ${EXTRA_LIBS} leanshared)
add_test(NAME c_name_test
WORKING_DIRECTORY "${LEAN_BINARY_DIR}"
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/c_name_test")

44
src/tests/shared/name.c Normal file
View file

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <stdio.h>
#include "api/lean.h"
void check(int v) {
if (!v) {
printf("test failed\n");
exit(1);
}
}
int main() {
printf("Started name test\n");
lean_exception ex;
lean_name a, n1, n2, n3, n4;
char const * s1;
char const * s2;
unsigned idx;
check(lean_mk_anonymous_name(&a, &ex));
check(lean_is_anonymous_name(a));
check(lean_mk_str_name(a, "foo", &n1, &ex));
check(lean_mk_str_name(n1, "bla", &n2, &ex));
check(lean_name_to_string(n2, &s1, &ex));
printf("Lean name: %s\n", s1);
check(lean_is_str_name(n2));
check(!lean_is_anonymous_name(n2));
check(!lean_is_idx_name(n2));
check(lean_mk_idx_name(n2, 1, &n3, &ex));
check(lean_name_to_string(n3, &s2, &ex));
printf("Lean name: %s\n", s2);
check(lean_is_idx_name(n3));
check(lean_get_name_prefix(n3, &n4, &ex));
check(lean_name_eq(n2, n4));
check(lean_get_name_idx(n3, &idx, &ex));
check(idx == 1);
lean_del_name(a);
lean_del_name(n1);
lean_del_name(n2);
lean_del_name(n3);
lean_del_name(n4);
lean_del_string(s1);
lean_del_string(s2);
return 0;
}