mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-31 04:50:34 +01:00
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
|
|
/*
|
||
|
|
* Copyright 2025 Intel Corporation
|
||
|
|
* SPDX-License-Identifier: MIT
|
||
|
|
*/
|
||
|
|
|
||
|
|
#include <gtest/gtest.h>
|
||
|
|
|
||
|
|
#include "slice.h"
|
||
|
|
#include "slice_test.h"
|
||
|
|
|
||
|
|
TEST(Slice, Cut)
|
||
|
|
{
|
||
|
|
slice s = slice_from_cstr("hello:world");
|
||
|
|
|
||
|
|
slice_cut_result result = slice_cut(s, ':');
|
||
|
|
ASSERT_TRUE(result.found);
|
||
|
|
ASSERT_SLICE_EQ(result.before, "hello");
|
||
|
|
ASSERT_SLICE_EQ(result.after, "world");
|
||
|
|
|
||
|
|
slice s2 = slice_from_cstr("no separator");
|
||
|
|
slice_cut_result result2 = slice_cut(s2, ':');
|
||
|
|
ASSERT_FALSE(result2.found);
|
||
|
|
ASSERT_SLICE_EQ(result2.before, s2);
|
||
|
|
ASSERT_SLICE_EMPTY(result2.after);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(Slice, CutN)
|
||
|
|
{
|
||
|
|
slice s = slice_from_cstr("a:b:c:d");
|
||
|
|
|
||
|
|
slice_cut_result result1 = slice_cut_n(s, ':', 2);
|
||
|
|
ASSERT_TRUE(result1.found);
|
||
|
|
ASSERT_SLICE_EQ(result1.before, "a:b");
|
||
|
|
ASSERT_SLICE_EQ(result1.after, "c:d");
|
||
|
|
|
||
|
|
slice_cut_result result2 = slice_cut_n(s, ':', 1);
|
||
|
|
ASSERT_TRUE(result2.found);
|
||
|
|
ASSERT_SLICE_EQ(result2.before, "a");
|
||
|
|
ASSERT_SLICE_EQ(result2.after, "b:c:d");
|
||
|
|
|
||
|
|
slice_cut_result result3 = slice_cut_n(s, ':', 5);
|
||
|
|
ASSERT_FALSE(result3.found);
|
||
|
|
ASSERT_SLICE_EQ(result3.before, s);
|
||
|
|
ASSERT_SLICE_EMPTY(result3.after);
|
||
|
|
|
||
|
|
slice_cut_result result4 = slice_cut_n(s, ':', 0);
|
||
|
|
ASSERT_FALSE(result4.found);
|
||
|
|
slice_cut_result result5 = slice_cut_n(s, ':', -1);
|
||
|
|
ASSERT_FALSE(result5.found);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(Slice, HashTable)
|
||
|
|
{
|
||
|
|
struct hash_table *ht = slice_hash_table_create(NULL);
|
||
|
|
|
||
|
|
const char *strings[] = {
|
||
|
|
"NIR-CS/v1", "NIR-CS/v2", "BRW-CS/v1", "BRW-CS/v2",
|
||
|
|
"ASM-CS/v1", "ASM-CS/v2", "NIR-FS/v1", "BRW-FS/v1"
|
||
|
|
};
|
||
|
|
int values[] = {1, 2, 3, 4, 5, 6, 7, 8};
|
||
|
|
|
||
|
|
for (int i = 0; i < 8; i++) {
|
||
|
|
slice key = slice_from_cstr(strings[i]);
|
||
|
|
slice_hash_table_insert(ht, key, &values[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
ASSERT_EQ(_mesa_hash_table_num_entries(ht), 8u);
|
||
|
|
|
||
|
|
for (int i = 0; i < 8; i++) {
|
||
|
|
slice key = slice_from_cstr(strings[i]);
|
||
|
|
struct hash_entry *found = slice_hash_table_search(ht, key);
|
||
|
|
ASSERT_NE(found, nullptr);
|
||
|
|
ASSERT_EQ(*(int*)found->data, values[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
const int index = 2;
|
||
|
|
slice same_content = slice_from_cstr(strings[index]);
|
||
|
|
struct hash_entry *found = slice_hash_table_search(ht, same_content);
|
||
|
|
ASSERT_NE(found, nullptr);
|
||
|
|
ASSERT_EQ(*(int*)found->data, values[index]);
|
||
|
|
|
||
|
|
_mesa_hash_table_destroy(ht, NULL);
|
||
|
|
}
|