test_bst_adpt.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. #include "lwp_arch.h"
  14. #ifdef RT_USING_SMART
  15. #include "lwp_user_mm.h"
  16. #include "mm_aspace.h"
  17. #include "mm_flag.h"
  18. #include <mm_private.h>
  19. #include <lwp_pid.h>
  20. void test_bst_adpt(void)
  21. {
  22. size_t flags = MMF_MAP_FIXED;
  23. void *target_va = (void *)USER_VADDR_START + 0x3000;
  24. size_t map_size = 0x1000;
  25. void *prev_va = target_va - map_size;
  26. void *next_va = target_va + map_size + 1;
  27. struct rt_lwp *lwp;
  28. rt_aspace_t aspace;
  29. rt_mem_obj_t mem_obj;
  30. /* create aspace by lwp */
  31. lwp = lwp_new();
  32. uassert_true(!!lwp);
  33. uassert_true(!lwp_user_space_init(lwp, 0));
  34. aspace = lwp->aspace;
  35. mem_obj = &lwp->lwp_obj->mem_obj;
  36. uassert_true(!!aspace);
  37. uassert_true(!!mem_obj);
  38. /* _aspace_bst_search not cover */
  39. uassert_true(!_aspace_bst_search(aspace, target_va)); // ret == NULL
  40. uassert_true(
  41. !rt_aspace_map(aspace, &target_va, map_size, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  42. /* 2 wrappers */
  43. uassert_true(
  44. !rt_aspace_map(aspace, &prev_va, map_size - 1, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  45. uassert_true(
  46. !rt_aspace_map(aspace, &next_va, map_size - 1, MMU_MAP_K_RWCB, flags, mem_obj, 0));
  47. /* _aspace_bst_search */
  48. uassert_true(!!_aspace_bst_search(aspace, target_va));
  49. uassert_true(!_aspace_bst_search(aspace, target_va + map_size));
  50. uassert_true(!_aspace_bst_search(aspace, target_va - 1));
  51. /**
  52. * @brief _aspace_bst_search_exceed
  53. * for given map [start, end]
  54. */
  55. rt_varea_t find;
  56. find = _aspace_bst_search_exceed(aspace, target_va);
  57. uassert_true(!!find);
  58. uassert_true(find->start == target_va);
  59. rt_varea_t last = ASPACE_VAREA_LAST(aspace);
  60. find = _aspace_bst_search_exceed(aspace, last->start + 1);
  61. uassert_true(!find);
  62. /**
  63. * @brief _aspace_bst_search_overlap
  64. * for given map [start, end], five types of overlapping
  65. */
  66. /* 1. all below */
  67. struct _mm_range range = {.start = prev_va - 2, .end = prev_va - 1};
  68. find = _aspace_bst_search_overlap(aspace, range);
  69. uassert_true(!find);
  70. /* 2. start below */
  71. range.end = prev_va;
  72. find = _aspace_bst_search_overlap(aspace, range);
  73. uassert_true(!!find);
  74. uassert_true(find->start == prev_va);
  75. /* 3. all wrapped */
  76. range.start = prev_va;
  77. range.end = prev_va + 1;
  78. find = _aspace_bst_search_overlap(aspace, range);
  79. uassert_true(!!find);
  80. uassert_true(find->start == prev_va);
  81. /* 4. end exceed */
  82. range.start = next_va;
  83. range.end = next_va + map_size + 1;
  84. find = _aspace_bst_search_overlap(aspace, range);
  85. uassert_true(!!find);
  86. uassert_true(find->start == next_va);
  87. /* 5. all exceed */
  88. range.start = next_va + map_size;
  89. find = _aspace_bst_search_overlap(aspace, range);
  90. uassert_true(!find);
  91. lwp_ref_dec(lwp);
  92. }
  93. #endif /* RT_USING_SMART */
  94. #endif /* __TEST_BST_ADPT_H__ */