# Prerequisites

## Introduction to Cxx\_matrix

The tutorial is based on the C++ project [Cxx\_matrix](https://github.com/TrustInSoft-CI/Cxx_matrix).&#x20;

Its source code on GitHub contains 2 source files:

* `matrix.h` that is a matrix operations library coded in C++
* `matrix.cpp` that is a simple test over this library

Let's familiarize ourselves with the `main` function in `matrix.cpp`:

```cpp
int
main(void) {
    Matrix<2U, 2U> matrix_a {
        2., 1.,
        4., 2. };

    auto id = identity<2>();
    bool has_inverse = is_invertible(id);
    std::cout << "identity is inversible: " << (has_inverse ? "yes\n" : "no\n");

    Matrix<2U, 2U> matrix_b = matrix_a + (5 ^ id);
    Matrix<2, 1> res = solve(matrix_b,  { 6., 10. });
    std::cout << "RESULT IS:\n" << res;

    return 0;
    (void) has_inverse;
}
```

The test implemented in `main` performs the following step:

* It initializes a 2 x 2 matrix
* It verifies if the matrix is invertible
* It performs some basic operations on this matrix
* It solves a matrix equation

## Launching the analyzer

We already configured the project [Cxx\_matrix](https://github.com/TrustInSoft-CI/Cxx_matrix) for TrustInSoft CI by adding a [`.trustinsoft/config.json`](https://github.com/TrustInSoft-CI/Cxx_matrix/blob/master/.trustinsoft/config.json) file to the repository. In our example, the [Analyses configuration](/configuration-file/analyses-configuration-file.md) specifies the source file `matrix.cpp` to analyze, the analysis entry point function `main` and the preprocessor option `-I.`.

We also launched the analysis in TrustInSoft CI:

**1.** Load the following URL in your browser to visualize a summary of the analysis results: \
<https://ci.trust-in-soft.com/projects/TrustInSoft-CI/Cxx_matrix/latest>

There is only one analysis, as one entry point, and no undefined behavior on the tested path:

![](/files/-MeemQrFwLgzsOARfbdJ)

**2.** Launch TrustInSoft CI Analyzer by clicking the `#1` analysis and then on the `Inspect with TrustInSoft CI Analyzer` button.

![](/files/-Meemd99ogqZiso74Olq)

Next let's dive into C++ identifiers, constructions and calling conventions in TrustInSoft CI Analyzer.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ci.trust-in-soft.com/tutorial-cxx/prerequisites.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
