| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // -*- mode: C++ -*- | |
| // | |
| // Copyright 2023 Google LLC | |
| // | |
| // Licensed under the Apache License v2.0 with LLVM Exceptions (the | |
| // "License"); you may not use this file except in compliance with the | |
| // License. You may obtain a copy of the License at | |
| // | |
| // https://llvm.org/LICENSE.txt | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // | |
| // Author: Siddharth Nayyar | |
| #include "reporting.h" | |
| #include <filesystem> | |
| #include <fstream> | |
| #include <sstream> | |
| #include <string> | |
| #include <catch2/catch.hpp> | |
| #include "fidelity.h" | |
| namespace stg { | |
| namespace { | |
| std::string filename_to_path(const std::string& f) { | |
| return std::filesystem::path("testdata") / f; | |
| } | |
| TEST_CASE("fidelity diff") { | |
| const stg::FidelityDiff diff = { | |
| .symbol_transitions = | |
| { | |
| {{SymbolFidelity::TYPED, SymbolFidelity::UNTYPED}, | |
| {"symbol1", "symbol2"}}, | |
| {{SymbolFidelity::UNTYPED, SymbolFidelity::TYPED}, {"symbol3"}}, | |
| {{SymbolFidelity::ABSENT, SymbolFidelity::UNTYPED}, | |
| {"symbol4", "symbol5"}}, | |
| {{SymbolFidelity::ABSENT, SymbolFidelity::TYPED}, {"symbol6"}}, | |
| {{SymbolFidelity::TYPED, SymbolFidelity::ABSENT}, | |
| {"symbol7", "symbol8"}}, | |
| {{SymbolFidelity::UNTYPED, SymbolFidelity::ABSENT}, {"symbol9"}}, | |
| }, | |
| .type_transitions = | |
| {{{TypeFidelity::FULLY_DEFINED, TypeFidelity::ABSENT}, | |
| {"struct s1", "union u1"}}, | |
| {{TypeFidelity::DECLARATION_ONLY, TypeFidelity::ABSENT}, | |
| {"struct s2"}}, | |
| {{TypeFidelity::FULLY_DEFINED, TypeFidelity::DECLARATION_ONLY}, | |
| {"enum e1"}}, | |
| {{TypeFidelity::ABSENT, TypeFidelity::DECLARATION_ONLY}, | |
| {"union u2"}}, | |
| {{TypeFidelity::DECLARATION_ONLY, TypeFidelity::FULLY_DEFINED}, | |
| {"enum e2", "union u3"}}, | |
| {{TypeFidelity::ABSENT, TypeFidelity::FULLY_DEFINED}, | |
| {"struct s3"}}}, | |
| }; | |
| std::ostringstream report; | |
| CHECK(reporting::FidelityDiff(diff, report)); | |
| const std::ifstream expected_report_file( | |
| filename_to_path("fidelity_diff_report")); | |
| std::ostringstream expected_report; | |
| expected_report << expected_report_file.rdbuf(); | |
| CHECK(report.str() == expected_report.str()); | |
| } | |
| } // namespace | |
| } // namespace stg |