SimpleKernel 1.17.0
Loading...
Searching...
No Matches
dma_region_test.cpp File Reference
#include <gtest/gtest.h>
#include <cstring>
#include "io_buffer.hpp"
Include dependency graph for dma_region_test.cpp:

Go to the source code of this file.

Functions

 TEST (DmaRegionTest, DefaultConstructedIsInvalid)
 
 TEST (DmaRegionTest, ValidRegion)
 
 TEST (DmaRegionTest, NullVirtIsInvalid)
 
 TEST (DmaRegionTest, ZeroSizeIsInvalid)
 
 TEST (DmaRegionTest, SubRegionSuccess)
 
 TEST (DmaRegionTest, SubRegionOutOfBoundsFails)
 
 TEST (DmaRegionTest, SubRegionExactBoundarySucceeds)
 
 TEST (DmaRegionTest, IdentityVirtToPhys)
 

Function Documentation

◆ TEST() [1/8]

TEST ( DmaRegionTest  ,
DefaultConstructedIsInvalid   
)

Definition at line 11 of file dma_region_test.cpp.

11 {
12 DmaRegion region{};
13 EXPECT_FALSE(region.IsValid());
14 EXPECT_EQ(region.virt, nullptr);
15 EXPECT_EQ(region.phys, 0u);
16 EXPECT_EQ(region.size, 0u);
17}
DMA 可访问内存区域的非拥有描述符
Definition io_buffer.hpp:37
#define EXPECT_FALSE(cond, msg)
#define EXPECT_EQ(val1, val2, msg)

◆ TEST() [2/8]

TEST ( DmaRegionTest  ,
IdentityVirtToPhys   
)

Definition at line 77 of file dma_region_test.cpp.

77 {
78 uintptr_t addr = 0xDEAD'BEEF;
79 EXPECT_EQ(IdentityVirtToPhys(addr), addr);
80}
auto IdentityVirtToPhys(uintptr_t virt) -> uintptr_t
恒等映射:物理地址 == 虚拟地址(早期启动 / 无 MMU 时的默认实现)
Definition io_buffer.hpp:25
Here is the call graph for this function:

◆ TEST() [3/8]

TEST ( DmaRegionTest  ,
NullVirtIsInvalid   
)

Definition at line 32 of file dma_region_test.cpp.

32 {
33 DmaRegion region{.virt = nullptr, .phys = 0x1000, .size = 4096};
34 EXPECT_FALSE(region.IsValid());
35}
void * virt
虚拟(CPU 可访问)基地址
Definition io_buffer.hpp:39

◆ TEST() [4/8]

TEST ( DmaRegionTest  ,
SubRegionExactBoundarySucceeds   
)

Definition at line 68 of file dma_region_test.cpp.

68 {
69 uint8_t buf[256]{};
70 DmaRegion region{.virt = buf, .phys = 0x1000, .size = 256};
71
72 auto sub = region.SubRegion(0, 256); // exact fit
73 ASSERT_TRUE(sub.has_value());
74 EXPECT_EQ(sub->size, 256u);
75}

◆ TEST() [5/8]

TEST ( DmaRegionTest  ,
SubRegionOutOfBoundsFails   
)

Definition at line 59 of file dma_region_test.cpp.

59 {
60 uint8_t buf[256]{};
61 DmaRegion region{.virt = buf, .phys = 0x1000, .size = 256};
62
63 auto sub = region.SubRegion(200, 100); // 200 + 100 > 256
64 EXPECT_FALSE(sub.has_value());
65 EXPECT_EQ(sub.error().code, ErrorCode::kInvalidArgument);
66}
@ kInvalidArgument

◆ TEST() [6/8]

TEST ( DmaRegionTest  ,
SubRegionSuccess   
)

Definition at line 43 of file dma_region_test.cpp.

43 {
44 uint8_t buf[4096]{};
45 DmaRegion region{
46 .virt = buf,
47 .phys = 0x1'0000,
48 .size = 4096,
49 };
50
51 auto sub = region.SubRegion(256, 512);
52 ASSERT_TRUE(sub.has_value());
53 EXPECT_EQ(sub->virt, buf + 256);
54 EXPECT_EQ(sub->phys, 0x1'0000u + 256);
55 EXPECT_EQ(sub->size, 512u);
56 EXPECT_TRUE(sub->IsValid());
57}
#define EXPECT_TRUE(cond, msg)

◆ TEST() [7/8]

TEST ( DmaRegionTest  ,
ValidRegion   
)

Definition at line 19 of file dma_region_test.cpp.

19 {
20 uint8_t buf[256]{};
21 DmaRegion region{
22 .virt = buf,
23 .phys = 0x8000'0000,
24 .size = sizeof(buf),
25 };
26 EXPECT_TRUE(region.IsValid());
27 EXPECT_EQ(region.Data(), buf);
28 EXPECT_EQ(region.phys, 0x8000'0000u);
29 EXPECT_EQ(region.size, 256u);
30}

◆ TEST() [8/8]

TEST ( DmaRegionTest  ,
ZeroSizeIsInvalid   
)

Definition at line 37 of file dma_region_test.cpp.

37 {
38 uint8_t buf[1]{};
39 DmaRegion region{.virt = buf, .phys = 0x1000, .size = 0};
40 EXPECT_FALSE(region.IsValid());
41}