Почему этот модуль не виден? - PullRequest
0 голосов
/ 27 февраля 2020

Я кодирую ха sh в Rust для практики. Код выглядит следующим образом:

pub fn get_fnv1a32(to_hash:&str) -> u32{
   const OFFSET_BASIS:u32 = 2_166_136_261;
   const PRIME:u32 = 16_777_619;

   if !to_hash.is_empty(){
      let mut hash = OFFSET_BASIS;
      for b in to_hash.bytes(){
         hash = hash ^ (b as u32);
         hash = hash.wrapping_mul(PRIME);
      }
      hash
   }
   else
   {
      0
   }
}

И вот код, который я пытаюсь использовать для проверки этого:

mod fnv;
#[cfg(test)]
mod tests {
    #[test]
    fn get_correct_hash(){
        assert_eq!(0x7a78f512, fnv::get_fnv1a32("Hello world!"));
    } 

    #[test]
    fn hash_handles_empty_string_correctly(){
        assert_eq!(0, fnv::get_fnv1a32(""));
    }
 } 

Тестовый код находится в lib.rs и get_fnv1a32 функция находится в фнв.рс. Они оба в одном каталоге. Но когда я пытаюсь запустить тест на машине go, я получаю следующие сообщения:

Compiling hashes v0.1.0 (U:\skunkworks\rust\hashes)
warning: function is never used: `get_fnv1a32`
 --> src\fnv.rs:1:8
  |
1 | pub fn get_fnv1a32(to_hash:&str) -> u32{
  |        ^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` on by default

error[E0433]: failed to resolve: use of undeclared type or module `fnv`
 --> src\lib.rs:7:32
  |
7 |         assert_eq!(0x7a78f512, fnv::get_fnv1a32("Hello world!"));
  |                                ^^^ use of undeclared type or module `fnv`

error[E0433]: failed to resolve: use of undeclared type or module `fnv`
  --> src\lib.rs:12:23
   |
12 |         assert_eq!(0, fnv::get_fnv1a32(""));
   |                       ^^^ use of undeclared type or module `fnv`

error: aborting due to 2 previous errors

Я не могу понять, что я делаю неправильно. Я попытался изменить строку mod fnv; вверху на pub mod fnv;, и это избавляет от предупреждения о мертвом коде, но не устраняет две ошибки. Что мне нужно сделать, чтобы функция get_fnv1a32 была видна в файле lib.rs?

Не то чтобы я думал, что это будет иметь значение, но версия ржавчины c - это ржавчина c 1,41,0 (5e1a79984 2020-01-27)

1 Ответ

1 голос
/ 27 февраля 2020

Тестовый модуль отделен от внешнего модуля. Добавьте

use super::*;

или эквивалентный оператор типа use crate::fnv внутри модуля tests, чтобы сделать модуль fnv видимым.

...