Files
filament/libs/utils/test/test_tribool.cpp
Mathias Agopian bc0a547701 Support Engine::compile overload to generate view-dependent variants (#9857)
* a new tribool type in libutils (header only)

* Support `Engine::compile` overload to generate view-dependent variants

Implemented an `Engine::compile()` method to infer and generate shader 
permutations directly based on feature states from a provided `View` 
alongside `tribool` settings (skinning, shadowReceiver). 

- Added a new `Material::compile()` overload that directly accepts 
  a precalculated `FixedCapacityVector<Variant>`, decoupling the 
  Material compilation process from specific feature flag checks.

FIXES=[468058969]
2026-04-01 17:08:11 -07:00

106 lines
2.8 KiB
C++

/*
* Copyright (C) 2026 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
#include <gtest/gtest.h>
#include <utils/tribool.h>
using namespace utils;
TEST(TriboolTest, ConstructorsAndObservers) {
tribool t1;
EXPECT_TRUE(t1.is_indeterminate());
EXPECT_FALSE(t1.is_true());
EXPECT_FALSE(t1.is_false());
tribool t2(true);
EXPECT_TRUE(t2.is_true());
EXPECT_FALSE(t2.is_indeterminate());
EXPECT_FALSE(t2.is_false());
tribool t3(false);
EXPECT_TRUE(t3.is_false());
EXPECT_FALSE(t3.is_true());
EXPECT_FALSE(t3.is_indeterminate());
tribool t4(tribool::True);
EXPECT_TRUE(t4.is_true());
tribool t5(tribool::False);
EXPECT_TRUE(t5.is_false());
tribool t6(tribool::Indeterminate);
EXPECT_TRUE(t6.is_indeterminate());
}
TEST(TriboolTest, LogicalNot) {
EXPECT_TRUE((!tribool(true)).is_false());
EXPECT_TRUE((!tribool(false)).is_true());
EXPECT_TRUE((!tribool(tribool::Indeterminate)).is_indeterminate());
}
TEST(TriboolTest, LogicalAnd) {
tribool T(true);
tribool F(false);
tribool I(tribool::Indeterminate);
EXPECT_TRUE((T && T).is_true());
EXPECT_TRUE((T && F).is_false());
EXPECT_TRUE((F && T).is_false());
EXPECT_TRUE((F && F).is_false());
EXPECT_TRUE((T && I).is_indeterminate());
EXPECT_TRUE((I && T).is_indeterminate());
EXPECT_TRUE((F && I).is_false());
EXPECT_TRUE((I && F).is_false());
EXPECT_TRUE((I && I).is_indeterminate());
}
TEST(TriboolTest, LogicalOr) {
tribool T(true);
tribool F(false);
tribool I(tribool::Indeterminate);
EXPECT_TRUE((T || T).is_true());
EXPECT_TRUE((T || F).is_true());
EXPECT_TRUE((F || T).is_true());
EXPECT_TRUE((F || F).is_false());
EXPECT_TRUE((T || I).is_true());
EXPECT_TRUE((I || T).is_true());
EXPECT_TRUE((F || I).is_indeterminate());
EXPECT_TRUE((I || F).is_indeterminate());
EXPECT_TRUE((I || I).is_indeterminate());
}
TEST(TriboolTest, Equality) {
tribool T(true);
tribool F(false);
tribool I(tribool::Indeterminate);
EXPECT_TRUE(T == tribool(true));
EXPECT_TRUE(F == tribool(false));
EXPECT_TRUE(I == tribool(tribool::Indeterminate));
EXPECT_TRUE(T != F);
EXPECT_TRUE(T != I);
EXPECT_TRUE(F != I);
}