1*9e3b08aeSAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 2*9e3b08aeSAndroid Build Coastguard Worker // -*- mode: C++ -*- 3*9e3b08aeSAndroid Build Coastguard Worker // 4*9e3b08aeSAndroid Build Coastguard Worker // Copyright 2024 Google LLC 5*9e3b08aeSAndroid Build Coastguard Worker // 6*9e3b08aeSAndroid Build Coastguard Worker // Licensed under the Apache License v2.0 with LLVM Exceptions (the 7*9e3b08aeSAndroid Build Coastguard Worker // "License"); you may not use this file except in compliance with the 8*9e3b08aeSAndroid Build Coastguard Worker // License. You may obtain a copy of the License at 9*9e3b08aeSAndroid Build Coastguard Worker // 10*9e3b08aeSAndroid Build Coastguard Worker // https://llvm.org/LICENSE.txt 11*9e3b08aeSAndroid Build Coastguard Worker // 12*9e3b08aeSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 13*9e3b08aeSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 14*9e3b08aeSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*9e3b08aeSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 16*9e3b08aeSAndroid Build Coastguard Worker // limitations under the License. 17*9e3b08aeSAndroid Build Coastguard Worker // 18*9e3b08aeSAndroid Build Coastguard Worker // Author: Giuliano Procida 19*9e3b08aeSAndroid Build Coastguard Worker 20*9e3b08aeSAndroid Build Coastguard Worker #include "hex.h" 21*9e3b08aeSAndroid Build Coastguard Worker 22*9e3b08aeSAndroid Build Coastguard Worker #include <cstdint> 23*9e3b08aeSAndroid Build Coastguard Worker #include <sstream> 24*9e3b08aeSAndroid Build Coastguard Worker #include <string_view> 25*9e3b08aeSAndroid Build Coastguard Worker 26*9e3b08aeSAndroid Build Coastguard Worker #include <catch2/catch.hpp> 27*9e3b08aeSAndroid Build Coastguard Worker 28*9e3b08aeSAndroid Build Coastguard Worker namespace Test { 29*9e3b08aeSAndroid Build Coastguard Worker 30*9e3b08aeSAndroid Build Coastguard Worker struct TestCase { 31*9e3b08aeSAndroid Build Coastguard Worker std::string_view name; 32*9e3b08aeSAndroid Build Coastguard Worker int value; 33*9e3b08aeSAndroid Build Coastguard Worker std::string_view formatted; 34*9e3b08aeSAndroid Build Coastguard Worker }; 35*9e3b08aeSAndroid Build Coastguard Worker 36*9e3b08aeSAndroid Build Coastguard Worker TEST_CASE("Hex<uint32_t>") { 37*9e3b08aeSAndroid Build Coastguard Worker const auto test = GENERATE( 38*9e3b08aeSAndroid Build Coastguard Worker TestCase({"zero", 0, "0x0"}), 39*9e3b08aeSAndroid Build Coastguard Worker TestCase({"half width", 0xabcd, "0xabcd"}), 40*9e3b08aeSAndroid Build Coastguard Worker TestCase({"full width", 0x12345678, "0x12345678"})); 41*9e3b08aeSAndroid Build Coastguard Worker 42*9e3b08aeSAndroid Build Coastguard Worker INFO("testing with " << test.name << " value"); 43*9e3b08aeSAndroid Build Coastguard Worker std::ostringstream os; 44*9e3b08aeSAndroid Build Coastguard Worker os << stg::Hex<uint32_t>(test.value); 45*9e3b08aeSAndroid Build Coastguard Worker CHECK(os.str() == test.formatted); 46*9e3b08aeSAndroid Build Coastguard Worker } 47*9e3b08aeSAndroid Build Coastguard Worker 48*9e3b08aeSAndroid Build Coastguard Worker TEST_CASE("self comparison") { 49*9e3b08aeSAndroid Build Coastguard Worker const stg::Hex<uint8_t> a(0); 50*9e3b08aeSAndroid Build Coastguard Worker CHECK(a == a); 51*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a != a)); 52*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a < a)); 53*9e3b08aeSAndroid Build Coastguard Worker CHECK(a <= a); 54*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a > a)); 55*9e3b08aeSAndroid Build Coastguard Worker CHECK(a >= a); 56*9e3b08aeSAndroid Build Coastguard Worker } 57*9e3b08aeSAndroid Build Coastguard Worker 58*9e3b08aeSAndroid Build Coastguard Worker TEST_CASE("distinct comparison") { 59*9e3b08aeSAndroid Build Coastguard Worker const stg::Hex<uint8_t> a(0); 60*9e3b08aeSAndroid Build Coastguard Worker const stg::Hex<uint8_t> b(1); 61*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a == b)); 62*9e3b08aeSAndroid Build Coastguard Worker CHECK(a != b); 63*9e3b08aeSAndroid Build Coastguard Worker CHECK(a < b); 64*9e3b08aeSAndroid Build Coastguard Worker CHECK(a <= b); 65*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a > b)); 66*9e3b08aeSAndroid Build Coastguard Worker CHECK(!(a >= b)); 67*9e3b08aeSAndroid Build Coastguard Worker } 68*9e3b08aeSAndroid Build Coastguard Worker 69*9e3b08aeSAndroid Build Coastguard Worker } // namespace Test 70