xref: /aosp_15_r20/external/swiftshader/tests/SystemUnitTests/ConfiguratorTests.cpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2022 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker //    http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker 
15*03ce13f7SAndroid Build Coastguard Worker #include "System/Configurator.hpp"
16*03ce13f7SAndroid Build Coastguard Worker 
17*03ce13f7SAndroid Build Coastguard Worker #include <gmock/gmock.h>
18*03ce13f7SAndroid Build Coastguard Worker #include <gtest/gtest.h>
19*03ce13f7SAndroid Build Coastguard Worker 
20*03ce13f7SAndroid Build Coastguard Worker #include <cstdlib>
21*03ce13f7SAndroid Build Coastguard Worker #include <sstream>
22*03ce13f7SAndroid Build Coastguard Worker 
23*03ce13f7SAndroid Build Coastguard Worker using namespace sw;
24*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,IntegerOptionsAreParsedCorrectly)25*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, IntegerOptionsAreParsedCorrectly)
26*03ce13f7SAndroid Build Coastguard Worker {
27*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
28*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
29*03ce13f7SAndroid Build Coastguard Worker     OptionA = 8
30*03ce13f7SAndroid Build Coastguard Worker     OptionB = 0xff
31*03ce13f7SAndroid Build Coastguard Worker     OptionC = -10
32*03ce13f7SAndroid Build Coastguard Worker     )" };
33*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
34*03ce13f7SAndroid Build Coastguard Worker 
35*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "OptionA", 0), 8);
36*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "OptionB", 0), 255);
37*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "OptionC", 0), -10);
38*03ce13f7SAndroid Build Coastguard Worker }
39*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,FloatOptionsAreParsedCorrectly)40*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, FloatOptionsAreParsedCorrectly)
41*03ce13f7SAndroid Build Coastguard Worker {
42*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
43*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
44*03ce13f7SAndroid Build Coastguard Worker     OptionA = 1.25
45*03ce13f7SAndroid Build Coastguard Worker     OptionB = 3
46*03ce13f7SAndroid Build Coastguard Worker     OptionC = 1e2
47*03ce13f7SAndroid Build Coastguard Worker     OptionD = -1.5
48*03ce13f7SAndroid Build Coastguard Worker     )" };
49*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
50*03ce13f7SAndroid Build Coastguard Worker 
51*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("SectionA", "OptionA", 0.0f), 1.25f);
52*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("SectionA", "OptionB", 0.0f), 3.0f);
53*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("SectionA", "OptionC", 0.0f), 100.0f);
54*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("SectionA", "OptionD", 0.0f), -1.5f);
55*03ce13f7SAndroid Build Coastguard Worker }
56*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,BooleanOptionsAreParsedCorrectly)57*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, BooleanOptionsAreParsedCorrectly)
58*03ce13f7SAndroid Build Coastguard Worker {
59*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
60*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
61*03ce13f7SAndroid Build Coastguard Worker     OptionA = true
62*03ce13f7SAndroid Build Coastguard Worker     OptionB = false
63*03ce13f7SAndroid Build Coastguard Worker     OptionC = 1
64*03ce13f7SAndroid Build Coastguard Worker     OptionD = 0
65*03ce13f7SAndroid Build Coastguard Worker     )" };
66*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
67*03ce13f7SAndroid Build Coastguard Worker 
68*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getBoolean("SectionA", "OptionA", false), true);
69*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getBoolean("SectionA", "OptionB", true), false);
70*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getBoolean("SectionA", "OptionC", false), true);
71*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getBoolean("SectionA", "OptionD", true), false);
72*03ce13f7SAndroid Build Coastguard Worker }
73*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,MultipleSectionsSameKeyAreDistinguished)74*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, MultipleSectionsSameKeyAreDistinguished)
75*03ce13f7SAndroid Build Coastguard Worker {
76*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
77*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
78*03ce13f7SAndroid Build Coastguard Worker     OptionA = 1
79*03ce13f7SAndroid Build Coastguard Worker 
80*03ce13f7SAndroid Build Coastguard Worker     [SectionB]
81*03ce13f7SAndroid Build Coastguard Worker     OptionA = 2
82*03ce13f7SAndroid Build Coastguard Worker     )" };
83*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
84*03ce13f7SAndroid Build Coastguard Worker 
85*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "OptionA", 0), 1);
86*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionB", "OptionA", 0), 2);
87*03ce13f7SAndroid Build Coastguard Worker }
88*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,SameKeyRepeatedHasLastValue)89*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, SameKeyRepeatedHasLastValue)
90*03ce13f7SAndroid Build Coastguard Worker {
91*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
92*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
93*03ce13f7SAndroid Build Coastguard Worker     OptionA = 1
94*03ce13f7SAndroid Build Coastguard Worker     OptionA = 2
95*03ce13f7SAndroid Build Coastguard Worker     )" };
96*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
97*03ce13f7SAndroid Build Coastguard Worker 
98*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "OptionA", 0), 2);
99*03ce13f7SAndroid Build Coastguard Worker }
100*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,NonExistentKeyReturnsDefault)101*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, NonExistentKeyReturnsDefault)
102*03ce13f7SAndroid Build Coastguard Worker {
103*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
104*03ce13f7SAndroid Build Coastguard Worker     [SectionA]
105*03ce13f7SAndroid Build Coastguard Worker     OptionA = 1
106*03ce13f7SAndroid Build Coastguard Worker     )" };
107*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
108*03ce13f7SAndroid Build Coastguard Worker 
109*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("SectionA", "NonExistentOption", 123), 123);
110*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("SectionA", "NonExistentOption", 1.5f), 1.5f);
111*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getBoolean("SectionA", "NonExistentOption", true), true);
112*03ce13f7SAndroid Build Coastguard Worker }
113*03ce13f7SAndroid Build Coastguard Worker 
TEST(Configurator,SectionlessOptions)114*03ce13f7SAndroid Build Coastguard Worker TEST(Configurator, SectionlessOptions)
115*03ce13f7SAndroid Build Coastguard Worker {
116*03ce13f7SAndroid Build Coastguard Worker 	std::istringstream config{ R"(
117*03ce13f7SAndroid Build Coastguard Worker     OptionA = 8
118*03ce13f7SAndroid Build Coastguard Worker     OptionB = 1.5
119*03ce13f7SAndroid Build Coastguard Worker     )" };
120*03ce13f7SAndroid Build Coastguard Worker 	Configurator configurator{ config };
121*03ce13f7SAndroid Build Coastguard Worker 
122*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getInteger("", "OptionA", 0), 8);
123*03ce13f7SAndroid Build Coastguard Worker 	EXPECT_EQ(configurator.getFloat("", "OptionB", 0), 1.5f);
124*03ce13f7SAndroid Build Coastguard Worker }