test.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. use super::*;
  2. use std::sync::Arc;
  3. #[test]
  4. fn test_store() {
  5. let mut xarray_arc: XArray<Arc<i32>> = XArray::new();
  6. for i in 1..10000 {
  7. let value = Arc::new(i * 2);
  8. xarray_arc.store((i * 3) as u64, value);
  9. }
  10. for i in 1..10000 {
  11. let value = xarray_arc.load((i * 3) as u64).unwrap();
  12. assert!(*value.as_ref() == i * 2)
  13. }
  14. }
  15. #[test]
  16. fn test_remove() {
  17. let mut xarray_arc: XArray<Arc<i32>> = XArray::new();
  18. for i in 0..10000 {
  19. let value = Arc::new(i * 2);
  20. xarray_arc.store(i as u64, value);
  21. }
  22. for i in 0..10000 {
  23. xarray_arc.remove(i as u64);
  24. let value = xarray_arc.load(i as u64);
  25. assert!(value == None)
  26. }
  27. }
  28. #[test]
  29. fn test_cow() {
  30. static mut INIT_COUNT: usize = 0;
  31. static mut DROP_COUNT: usize = 0;
  32. struct Wrapper {
  33. raw: usize,
  34. }
  35. impl Drop for Wrapper {
  36. fn drop(&mut self) {
  37. unsafe {
  38. DROP_COUNT += 1;
  39. }
  40. }
  41. }
  42. impl Wrapper {
  43. fn new(raw: usize) -> Self {
  44. unsafe {
  45. INIT_COUNT += 1;
  46. }
  47. Self { raw }
  48. }
  49. }
  50. let mut xarray_arc: XArray<Arc<Wrapper>> = XArray::new();
  51. for i in 1..10000 {
  52. let value = Arc::new(Wrapper::new(i * 2));
  53. xarray_arc.store(i as u64, value);
  54. }
  55. let mut xarray_clone = xarray_arc.clone();
  56. for i in 1..10000 {
  57. if i % 2 == 0 {
  58. let value = Arc::new(Wrapper::new(i * 6));
  59. xarray_arc.store(i as u64, value);
  60. } else {
  61. let value = Arc::new(Wrapper::new(i * 8));
  62. xarray_clone.store(i as u64, value);
  63. }
  64. }
  65. for i in 1..10000 {
  66. let value_origin = xarray_arc.load(i).unwrap();
  67. let value_clone = xarray_clone.load(i).unwrap();
  68. if i % 2 == 0 {
  69. assert!(value_origin.raw as u64 == i * 6);
  70. assert!(value_clone.raw as u64 == i * 2);
  71. } else {
  72. assert!(value_origin.raw as u64 == i * 2);
  73. assert!(value_clone.raw as u64 == i * 8);
  74. }
  75. }
  76. drop(xarray_arc);
  77. drop(xarray_clone);
  78. unsafe {
  79. assert!(INIT_COUNT == DROP_COUNT);
  80. }
  81. }