Proptest: doesn't crash

This commit is contained in:
Greg Shuflin 2022-12-04 00:22:33 -08:00
parent 50ca820cfe
commit daab699f1f

View File

@ -4,6 +4,15 @@ use parser_combinator::primitives::{any_char, literal, literal_char, one_of, pre
use parser_combinator::sequence::seq;
use parser_combinator::Parser;
use proptest::prelude::*;
proptest! {
#[test]
fn doesnt_crash(s in "\\PC*") {
let _output = json_object().parse(&s);
}
}
#[test]
fn test_parsing() {
let output = literal("a")("a yolo");
@ -41,7 +50,7 @@ fn json_bool<'a>() -> impl JsonParser<'a, JsonValue> {
))
}
fn json_number() -> impl JsonParser<'static, JsonValue> {
fn json_number<'a>() -> impl JsonParser<'a, JsonValue> {
let digit = || one_of("1234567890");
let digits = || repeated(digit()).at_least(1);
@ -74,7 +83,7 @@ fn json_number() -> impl JsonParser<'static, JsonValue> {
})
}
fn json_string_raw() -> impl JsonParser<'static, String> {
fn json_string_raw<'a>() -> impl JsonParser<'a, String> {
seq((
literal_char('"'),
repeated(pred(any_char, |ch| *ch != '"')),
@ -83,11 +92,11 @@ fn json_string_raw() -> impl JsonParser<'static, String> {
.map(|(_, s, _)| s.iter().cloned().collect::<String>())
}
fn json_string() -> impl JsonParser<'static, JsonValue> {
fn json_string<'a>() -> impl JsonParser<'a, JsonValue> {
json_string_raw().map(JsonValue::Str)
}
fn whitespace() -> impl JsonParser<'static, ()> {
fn whitespace<'a>() -> impl JsonParser<'a, ()> {
repeated(choice((
literal_char('\t'),
literal_char('\n'),
@ -96,7 +105,7 @@ fn whitespace() -> impl JsonParser<'static, ()> {
.to(())
}
fn json_array() -> impl JsonParser<'static, JsonValue> {
fn json_array<'a>() -> impl JsonParser<'a, JsonValue> {
move |input| {
let val = json_value().surrounded_by(whitespace());
@ -108,7 +117,7 @@ fn json_array() -> impl JsonParser<'static, JsonValue> {
}
}
fn json_object() -> impl JsonParser<'static, JsonValue> {
fn json_object<'a>() -> impl JsonParser<'a, JsonValue> {
move |input| {
let kv = json_string_raw()
.surrounded_by(whitespace())
@ -123,7 +132,7 @@ fn json_object() -> impl JsonParser<'static, JsonValue> {
}
}
fn json_value() -> impl JsonParser<'static, JsonValue> {
fn json_value<'a>() -> impl JsonParser<'a, JsonValue> {
choice((
json_null(),
json_bool(),