Serenity Operating System
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}