query_equiv.rs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. use microrm::prelude::*;
  2. use test_log::test;
  3. mod common;
  4. #[derive(Entity)]
  5. struct SingleItem {
  6. #[key]
  7. s: String,
  8. v: Vec<u8>,
  9. }
  10. #[derive(Entity)]
  11. struct DoubleItem {
  12. #[key]
  13. s: String,
  14. #[key]
  15. t: String,
  16. v: usize,
  17. }
  18. #[derive(Database)]
  19. struct ItemDB {
  20. single_items: microrm::IDMap<SingleItem>,
  21. double_items: microrm::IDMap<DoubleItem>,
  22. }
  23. #[test]
  24. fn single_item() {
  25. let db: ItemDB = common::open_test_db!();
  26. db.single_items
  27. .insert(SingleItem {
  28. s: "string 1".into(),
  29. v: vec![0u8, 1u8, 2u8],
  30. })
  31. .expect("couldn't insert test item");
  32. db.single_items
  33. .insert(SingleItem {
  34. s: "string 2".into(),
  35. v: vec![0u8, 1u8, 2u8],
  36. })
  37. .expect("couldn't insert test item");
  38. assert!(db
  39. .single_items
  40. .keyed("string 2")
  41. .get()
  42. .expect("couldn't query db")
  43. .is_some());
  44. assert!(db
  45. .single_items
  46. .keyed("string 3")
  47. .get()
  48. .expect("couldn't query db")
  49. .is_none());
  50. assert!(db
  51. .single_items
  52. .keyed(String::from("string 2"))
  53. .get()
  54. .expect("couldn't query db")
  55. .is_some());
  56. assert!(db
  57. .single_items
  58. .keyed(String::from("string 3"))
  59. .get()
  60. .expect("couldn't query db")
  61. .is_none());
  62. }
  63. #[test]
  64. fn double_item() {
  65. let db: ItemDB = common::open_test_db!();
  66. db.double_items
  67. .insert(DoubleItem {
  68. s: "string 1".into(),
  69. t: "second string 1".into(),
  70. v: 42,
  71. })
  72. .expect("couldn't insert test item");
  73. db.double_items
  74. .insert(DoubleItem {
  75. s: "string 2".into(),
  76. t: "second string 2".into(),
  77. v: 6,
  78. })
  79. .expect("couldn't insert test item");
  80. assert!(db
  81. .double_items
  82. .keyed(("string 2", "second string 2"))
  83. .get()
  84. .expect("couldn't query db")
  85. .is_some());
  86. assert!(db
  87. .double_items
  88. .keyed(("string 3", "second string 3"))
  89. .get()
  90. .expect("couldn't query db")
  91. .is_none());
  92. assert!(db
  93. .double_items
  94. .keyed((String::from("string 2"), String::from("second string 2")))
  95. .get()
  96. .expect("couldn't query db")
  97. .is_some());
  98. assert!(db
  99. .double_items
  100. .keyed((String::from("string 3"), String::from("second string 3")))
  101. .get()
  102. .expect("couldn't query db")
  103. .is_none());
  104. }
  105. #[test]
  106. fn with_test() {
  107. let db: ItemDB = common::open_test_db!();
  108. db.single_items
  109. .insert(SingleItem {
  110. s: "string 1".into(),
  111. v: vec![0u8, 1u8, 2u8],
  112. })
  113. .expect("couldn't insert test item");
  114. db.single_items
  115. .insert(SingleItem {
  116. s: "string 2".into(),
  117. v: vec![0u8, 1u8, 2u8],
  118. })
  119. .expect("couldn't insert test item");
  120. assert_eq!(
  121. db.single_items
  122. .with(SingleItem::V, [0u8].as_slice())
  123. .get()
  124. .expect("couldn't query db")
  125. .len(),
  126. 0
  127. );
  128. assert_eq!(
  129. db.single_items
  130. .with(SingleItem::V, [0u8, 1, 2].as_slice())
  131. .get()
  132. .expect("couldn't query db")
  133. .len(),
  134. 2
  135. );
  136. }