Serenity Operating System
at master 70 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2021, Tim Flynn <trflynn89@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestSuite.h> 8 9#include <AK/Optional.h> 10#include <AK/StdLibExtras.h> 11#include <AK/StringView.h> 12#include <AK/Variant.h> 13#include <AK/Vector.h> 14 15TEST_CASE(mix) 16{ 17 double a = 1.0; 18 double b = 3.0; 19 20 EXPECT_APPROXIMATE(mix(a, b, 0.0), 1.0); 21 EXPECT_APPROXIMATE(mix(a, b, 0.5), 2.0); 22 EXPECT_APPROXIMATE(mix(a, b, 1.0), 3.0); 23 24 EXPECT_APPROXIMATE(mix(b, a, 0.0), 3.0); 25 EXPECT_APPROXIMATE(mix(b, a, 0.5), 2.0); 26 EXPECT_APPROXIMATE(mix(b, a, 1.0), 1.0); 27} 28 29TEST_CASE(swap) 30{ 31 int i = 4; 32 int j = 6; 33 34 swap(i, j); 35 36 EXPECT_EQ(i, 6); 37 EXPECT_EQ(j, 4); 38} 39 40TEST_CASE(swap_same_value) 41{ 42 43 int i = 4; 44 swap(i, i); 45 EXPECT_EQ(i, 4); 46} 47 48TEST_CASE(swap_same_complex_object) 49{ 50 struct Type1 { 51 StringView foo; 52 }; 53 struct Type2 { 54 Optional<Type1> foo; 55 Vector<Type1> bar; 56 }; 57 58 Variant<Type1, Type2> value1 { Type1 { "hello"sv } }; 59 Variant<Type1, Type2> value2 { Type2 { {}, { { "goodbye"sv } } } }; 60 61 swap(value1, value2); 62 63 EXPECT(value1.has<Type2>()); 64 EXPECT(value2.has<Type1>()); 65 66 swap(value1, value1); 67 68 EXPECT(value1.has<Type2>()); 69 EXPECT(value2.has<Type1>()); 70}