# kwindex
[![Build Status](https://travis-ci.com/ronniesong0809/kwindex.svg?token=ysuqwpSTd1nLYmpB7CY5&branch=master)](https://travis-ci.com/ronniesong0809/kwindex)
![Rust](https://github.com/ronniesong0809/kwindex/workflows/Rust/badge.svg)
Copyright (c) 2020 Ronnie Song
This is a Rust based "keyword index" library crate that maintaining an index of words from texts.
`pub struct KWIndex<'a>(Vec<&'a str>);`
## Usages
##### - Use crate to access functions
extern crate kwindex;
use kwindex::*;
##### - Make a new empty target words index:
```
let mut index = KWIndex::new();
```
##### - Parse text and add each valid word to index:
```
index = index.extend_from_text("Hello world.");
```
##### - Check if the index is empty:
```
assert_eq!(true, index.is_empty());
```
##### - Count the number of words:
```
assert_eq!(2, index.len());
```
##### - Count the number of occurrences of the `keyword`:
```
assert_eq!(1, index.count_matches("world"));
```
## Run Example
To run the example program, type the command below:
```
cargo run --example example
```
```
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\examples\example.exe`
is_empty(): true
[Hey] is add to KWIndex index
[!] is removed from [world!]
[world] is add to KWIndex index
is_empty(): false
len(): 2
count_matches('world'): 1
KWIndex { word: ["Hey", "world"] }
```
Everything went well! It parse the text and add to the list without issue, and successfully print its is_empty check, length, and the number of matches.
## Test
To test the library crate, type the command below:
```
cargo test
```
```
Compiling kwindex v0.1.0 (C:\Users\ronsong\Desktop\Docs\rust\kwindex)
Finished test [unoptimized + debuginfo] target(s) in 0.96s
Running target\debug\deps\test-8f8dfddd5ec24cfa.exe
running 6 tests
test kwindex_tests::test_is_empty ... ok
test kwindex_tests::test_count_matches ... ok
test kwindex_tests::test_count_matches2 ... ok
test kwindex_tests::test_is_not_empty ... ok
test kwindex_tests::test_len ... ok
test kwindex_tests::test_len2 ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
```
All tests passed with no issues.
The tests are placed in tests/rand.rs file that uses std *assert_eq!()*, and *assert_ne!()* to test equality of the actual result and expected result of the *new()*, *extend_to_text()*, *count_matches()*, *len()* and *is_empty()* functions in that file.
Travis CI is running to do the automated testing. [![Build Status](https://travis-ci.com/ronniesong0809/kwindex.svg?token=ysuqwpSTd1nLYmpB7CY5&branch=master)](https://travis-ci.com/ronniesong0809/kwindex)
## License
This program is licensed under the "MIT License". Please
see the file `LICENSE` in the source distribution of this
software for license terms.