index.rs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. use microrm::prelude::*;
  2. use microrm_macros::index_cols;
  3. use test_log::test;
  4. use microrm::schema::index::Index;
  5. mod common;
  6. #[derive(Entity)]
  7. struct TwoWay {
  8. up: String,
  9. left: String,
  10. right: String,
  11. }
  12. #[derive(Database)]
  13. struct TWDB {
  14. entries: microrm::IDMap<TwoWay>,
  15. left_index: Index<TwoWay, index_cols![TwoWay::left]>,
  16. right_index: Index<TwoWay, index_cols![TwoWay::right]>,
  17. }
  18. #[test]
  19. fn db_construction() {
  20. let _db = common::open_test_db::<TWDB>("index_db_construction");
  21. }
  22. #[test]
  23. fn lookup() {
  24. let db = common::open_test_db::<TWDB>("index_lookup");
  25. let e1 = db
  26. .entries
  27. .insert_and_return(TwoWay {
  28. up: "up1".into(),
  29. left: "left1".into(),
  30. right: "right1".into(),
  31. })
  32. .expect("couldn't insert entry");
  33. let e2 = db
  34. .entries
  35. .insert_and_return(TwoWay {
  36. up: "up2".into(),
  37. left: "left2".into(),
  38. right: "right2".into(),
  39. })
  40. .expect("couldn't insert entry");
  41. assert!(db
  42. .entries
  43. .indexed(&db.left_index, "left3")
  44. .get()
  45. .expect("couldn't query left index")
  46. .is_none());
  47. assert_eq!(
  48. db.entries
  49. .indexed(&db.left_index, "left2")
  50. .get()
  51. .expect("couldn't query left index")
  52. .as_ref(),
  53. Some(&e2)
  54. );
  55. assert_eq!(
  56. db.entries
  57. .indexed(&db.left_index, "left1")
  58. .get()
  59. .expect("couldn't query left index")
  60. .as_ref(),
  61. Some(&e1)
  62. );
  63. assert!(db
  64. .entries
  65. .indexed(&db.right_index, "right3")
  66. .get()
  67. .expect("couldn't query right index")
  68. .is_none());
  69. assert_eq!(
  70. db.entries
  71. .indexed(&db.right_index, "right2")
  72. .get()
  73. .expect("couldn't query right index")
  74. .as_ref(),
  75. Some(&e2)
  76. );
  77. assert_eq!(
  78. db.entries
  79. .indexed(&db.right_index, "right1")
  80. .get()
  81. .expect("couldn't query right index")
  82. .as_ref(),
  83. Some(&e1)
  84. );
  85. }