Nothing
# Tests for Tensor Information Functions
# ============================================================================
# Type Size
# ============================================================================
test_that("ggml_type_size returns correct sizes", {
# F32 = 4 bytes
expect_equal(ggml_type_size(GGML_TYPE_F32), 4)
# F16 = 2 bytes
expect_equal(ggml_type_size(GGML_TYPE_F16), 2)
# I32 = 4 bytes
expect_equal(ggml_type_size(GGML_TYPE_I32), 4)
})
# ============================================================================
# Element Size
# ============================================================================
test_that("ggml_element_size returns element size for F32 tensor", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_element_size(t), 4)
})
test_that("ggml_element_size returns element size for I32 tensor", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 10)
expect_equal(ggml_element_size(t), 4)
})
# ============================================================================
# Number of Rows
# ============================================================================
test_that("ggml_nrows returns correct number of rows", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
# 1D tensor - 1 row
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_nrows(t1d), 1)
# 2D tensor - ne1 rows
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 5, 3)
expect_equal(ggml_nrows(t2d), 3)
# 3D tensor - ne1 * ne2 rows
t3d <- ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 4, 3, 2)
expect_equal(ggml_nrows(t3d), 6) # 3 * 2
})
# ============================================================================
# Same Shape Check
# ============================================================================
test_that("ggml_are_same_shape detects same shapes", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
b <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_true(ggml_are_same_shape(a, b))
})
test_that("ggml_are_same_shape detects different shapes", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
b <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 5, 4)
expect_false(ggml_are_same_shape(a, b))
})
test_that("ggml_are_same_shape with different dimensions", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 20)
b <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_false(ggml_are_same_shape(a, b))
})
# ============================================================================
# Tensor Name
# ============================================================================
test_that("ggml_set_name and ggml_get_name work", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
ggml_set_name(t, "my_tensor")
name <- ggml_get_name(t)
expect_equal(name, "my_tensor")
})
test_that("ggml_set_name with empty string returns NULL or empty", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
ggml_set_name(t, "")
name <- ggml_get_name(t)
# Empty name may return NULL or ""
expect_true(is.null(name) || name == "")
})
# ============================================================================
# Tensor Shape
# ============================================================================
test_that("ggml_tensor_shape returns correct shape for 1D", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
shape <- ggml_tensor_shape(t)
expect_length(shape, 4)
expect_equal(shape[1], 10)
expect_equal(shape[2], 1)
expect_equal(shape[3], 1)
expect_equal(shape[4], 1)
})
test_that("ggml_tensor_shape returns correct shape for 2D", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 5, 7)
shape <- ggml_tensor_shape(t)
expect_equal(shape[1], 5)
expect_equal(shape[2], 7)
})
test_that("ggml_tensor_shape returns correct shape for 3D", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 3, 4, 5)
shape <- ggml_tensor_shape(t)
expect_equal(shape[1], 3)
expect_equal(shape[2], 4)
expect_equal(shape[3], 5)
})
test_that("ggml_tensor_shape returns correct shape for 4D", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_4d(ctx, GGML_TYPE_F32, 2, 3, 4, 5)
shape <- ggml_tensor_shape(t)
expect_equal(shape[1], 2)
expect_equal(shape[2], 3)
expect_equal(shape[3], 4)
expect_equal(shape[4], 5)
})
# ============================================================================
# Tensor Type
# ============================================================================
test_that("ggml_tensor_type returns correct type", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t_f32 <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_tensor_type(t_f32), GGML_TYPE_F32)
t_i32 <- ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 10)
expect_equal(ggml_tensor_type(t_i32), GGML_TYPE_I32)
})
# ============================================================================
# Number of Elements and Bytes
# ============================================================================
test_that("ggml_nelements returns correct count", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_nelements(t1d), 10)
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_equal(ggml_nelements(t2d), 20)
t3d <- ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 2, 3, 4)
expect_equal(ggml_nelements(t3d), 24)
t4d <- ggml_new_tensor_4d(ctx, GGML_TYPE_F32, 2, 3, 4, 5)
expect_equal(ggml_nelements(t4d), 120)
})
test_that("ggml_nbytes returns correct byte count", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_nbytes(t), 40) # 10 * 4 bytes
})
# ============================================================================
# Number of Dimensions
# ============================================================================
test_that("ggml_n_dims returns correct dimension count", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
expect_equal(ggml_n_dims(t1d), 1)
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_equal(ggml_n_dims(t2d), 2)
t3d <- ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 2, 3, 4)
expect_equal(ggml_n_dims(t3d), 3)
t4d <- ggml_new_tensor_4d(ctx, GGML_TYPE_F32, 2, 3, 4, 5)
expect_equal(ggml_n_dims(t4d), 4)
})
# ============================================================================
# Contiguous Check
# ============================================================================
test_that("ggml_is_contiguous returns true for new tensors", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_true(ggml_is_contiguous(t))
})
# ============================================================================
# Transposed Check
# ============================================================================
test_that("ggml_is_transposed returns false for new tensors", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_false(ggml_is_transposed(t))
})
# ============================================================================
# Permuted Check
# ============================================================================
test_that("ggml_is_permuted returns false for new tensors", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
t <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
expect_false(ggml_is_permuted(t))
})
# ============================================================================
# Generic Tensor Creation
# ============================================================================
test_that("ggml_new_tensor creates tensor with arbitrary dims", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
# 3D tensor
t <- ggml_new_tensor(ctx, GGML_TYPE_F32, n_dims = 3, ne = c(4, 5, 6))
shape <- ggml_tensor_shape(t)
expect_equal(shape[1], 4)
expect_equal(shape[2], 5)
expect_equal(shape[3], 6)
expect_equal(ggml_nelements(t), 120)
})
# ============================================================================
# Duplicate Tensor
# ============================================================================
test_that("ggml_dup_tensor creates tensor with same shape", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
original <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 5)
duplicate <- ggml_dup_tensor(ctx, original)
expect_equal(ggml_nelements(duplicate), ggml_nelements(original))
expect_equal(ggml_tensor_shape(duplicate), ggml_tensor_shape(original))
expect_equal(ggml_tensor_type(duplicate), ggml_tensor_type(original))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.