pub fn count_tokens(content: &str) -> usize {
let char_estimate = content.len() / 4;
let word_count = content.split_whitespace().count();
let word_estimate = (word_count as f64 * 1.3) as usize;
char_estimate.max(word_estimate).max(1)
}
pub fn estimate_tokens_from_bytes(bytes: usize) -> usize {
bytes / 4
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_count_tokens() {
assert!(count_tokens("hello") >= 1);
let code = "fn main() { println!(\"Hello\"); }";
let tokens = count_tokens(code);
assert!(tokens > 0 && tokens < 20);
let prose = "This is a sentence with several words in it.";
let tokens = count_tokens(prose);
assert!(tokens > 0 && tokens < 20);
}
#[test]
fn test_empty_string() {
assert_eq!(count_tokens(""), 1); }
}