test_bst_adpt.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-03-23 WangXiaoyao Complete testcase for internal APIs
  9. */
  10. #ifndef __TEST_BST_ADPT_H__
  11. #define __TEST_BST_ADPT_H__
  12. #include "common.h"
  13. #ifdef RT_USING_SMART
  14. #include "lwp_user_mm.h"
  15. #include "mm_aspace.h"
  16. #include "mm_flag.h"
  17. #include <mm_private.h>
  18. #include <lwp_pid.h>
  19. void test_bst_adpt(void)
  20. {
  21. size_t flags = MMF_MAP_FIXED;
  22. void *target_va = (void *)USER_VADDR_START + 0x3000;
  23. size_t map_size = 0x1000;
  24. void *prev_va = target_va - map_size;
  25. void *next_va = target_va + map_size + 1;
  26. struct rt_lwp *lwp;
  27. rt_aspace_t aspace;
  28. rt_mem_obj_t mem_obj;
  29. /* create aspace by lwp */
  30. lwp = lwp_create(LWP_CREATE_FLAG_NONE);
  31. uassert_true(!!lwp);
  32. uassert_true(!lwp_user_space_init(lwp, 0));
  33. aspace = lwp->aspace;
  34. mem_obj = &rt_mm_dummy_mapper;
  35. uassert_true(!!aspace);
  36. uassert_true(!!mem_obj);
  37. /* _aspace_bst_search not cover */
  38. uassert_true(!_aspace_bst_search(aspace, target_va)); // ret == NULL
  39. uassert_true(
  40. !rt_aspace_map(aspace, &target_va, map_size, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  41. /* 2 wrappers */
  42. uassert_true(
  43. !rt_aspace_map(aspace, &prev_va, map_size, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  44. uassert_true(
  45. !rt_aspace_map(aspace, &next_va, map_size, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  46. /* _aspace_bst_search */
  47. uassert_true(!!_aspace_bst_search(aspace, target_va));
  48. uassert_true(!_aspace_bst_search(aspace, target_va + map_size));
  49. uassert_true(!_aspace_bst_search(aspace, target_va - 1));
  50. /**
  51. * @brief _aspace_bst_search_exceed
  52. * for given map [start, end]
  53. */
  54. rt_varea_t find;
  55. find = _aspace_bst_search_exceed(aspace, target_va);
  56. uassert_true(!!find);
  57. uassert_true(find->start == target_va);
  58. rt_varea_t last = ASPACE_VAREA_LAST(aspace);
  59. find = _aspace_bst_search_exceed(aspace, last->start + 1);
  60. uassert_true(!find);
  61. /**
  62. * @brief _aspace_bst_search_overlap
  63. * for given map [start, end], five types of overlapping
  64. */
  65. /* 1. all below */
  66. struct _mm_range range = {.start = prev_va - 2, .end = prev_va - 1};
  67. find = _aspace_bst_search_overlap(aspace, range);
  68. uassert_true(!find);
  69. /* 2. start below */
  70. range.end = prev_va;
  71. find = _aspace_bst_search_overlap(aspace, range);
  72. uassert_true(!!find);
  73. uassert_true(find->start == prev_va);
  74. /* 3. all wrapped */
  75. range.start = prev_va;
  76. range.end = prev_va + 1;
  77. find = _aspace_bst_search_overlap(aspace, range);
  78. uassert_true(!!find);
  79. uassert_true(find->start == prev_va);
  80. /* 4. end exceed */
  81. range.start = next_va;
  82. range.end = next_va + map_size + 1;
  83. find = _aspace_bst_search_overlap(aspace, range);
  84. uassert_true(!!find);
  85. uassert_true(find->start == next_va);
  86. /* 5. all exceed */
  87. range.start = next_va + map_size;
  88. find = _aspace_bst_search_overlap(aspace, range);
  89. uassert_true(!find);
  90. lwp_ref_dec(lwp);
  91. }
  92. #endif /* RT_USING_SMART */
  93. #endif /* __TEST_BST_ADPT_H__ */