|  | Integration Tests | 
|  | ===================== | 
|  | The implementation of libc-project is unique because our public C header files | 
|  | are generated using information from TableGen. Unit tests only exercise the | 
|  | internal C++ implementations and don't ensure the headers were generated by the | 
|  | build system. End to end testing ensures that, after building, the produced | 
|  | library and headers are usable in the C runtime. A simple solution is to have | 
|  | contributors write an integration test for each individual function as a C | 
|  | program; however, this would place a large burden on contributors and duplicates | 
|  | some effort from the unit tests. | 
|  |  | 
|  | Instead we automate the generation of integration tests by modeling it from our | 
|  | generated headers. These integration tests ensure that public facing symbols are | 
|  | visible, that header files are generated as expected, and that each libc | 
|  | function has the correct function prototype. | 
|  |  | 
|  | The integration test cmake rules are located in ``test/src/CMakeLists.txt`` and | 
|  | the generated integration test lives in | 
|  | ``llvm/build/projects/libc/test/src/public_integration_test.cpp`` |