Skip to content

Instantly share code, notes, and snippets.

@13hulk
Last active January 29, 2026 10:57
Show Gist options
  • Select an option

  • Save 13hulk/3fbb7e8b3634d508a6a4acda264df728 to your computer and use it in GitHub Desktop.

Select an option

Save 13hulk/3fbb7e8b3634d508a6a4acda264df728 to your computer and use it in GitHub Desktop.
Pybites Rust Cohort: Tests for JSON tokenizer - Week 1
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_empty_braces() {
let tokens = tokenize("{}");
assert_eq!(tokens.len(), 2);
assert_eq!(tokens[0], Token::LeftBrace);
assert_eq!(tokens[1], Token::RightBrace);
}
#[test]
fn test_simple_string() {
let tokens = tokenize(r#""hello""#);
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::String("hello".to_string()));
}
#[test]
fn test_number() {
let tokens = tokenize("42");
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::Number(42.0));
}
#[test]
fn test_number_negative() {
let tokens = tokenize("-42");
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::Number(-42.0));
}
#[test]
fn test_number_simple_decimal() {
let tokens = tokenize("3.14");
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::Number(3.14));
}
#[test]
fn test_number_negative_decimal() {
let tokens = tokenize("-0.99");
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::Number(-0.99));
}
#[test]
fn test_tokenize_string() {
let tokens = tokenize(r#""hello world""#);
assert_eq!(tokens.len(), 1);
assert_eq!(tokens[0], Token::String("hello world".to_string()));
}
#[test]
fn test_boolean_and_null() {
let tokens = tokenize("true false null");
assert_eq!(tokens.len(), 3);
assert_eq!(tokens[0], Token::Boolean(true));
assert_eq!(tokens[1], Token::Boolean(false));
assert_eq!(tokens[2], Token::Null);
}
#[test]
fn test_simple_object() {
let tokens = tokenize(r#"{"name": "Alice"}"#);
assert_eq!(tokens.len(), 5);
assert_eq!(tokens[0], Token::LeftBrace);
assert_eq!(tokens[1], Token::String("name".to_string()));
assert_eq!(tokens[2], Token::Colon);
assert_eq!(tokens[3], Token::String("Alice".to_string()));
assert_eq!(tokens[4], Token::RightBrace);
}
#[test]
fn test_multiple_values() {
let tokens = tokenize(r#"{"age": 30, "active": true}"#);
// Verify we have the right tokens
assert!(tokens.contains(&Token::String("age".to_string())));
assert!(tokens.contains(&Token::Number(30.0)));
assert!(tokens.contains(&Token::Comma));
assert!(tokens.contains(&Token::String("active".to_string())));
assert!(tokens.contains(&Token::Boolean(true)));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment