// Copyright © 2024 Mikhail Hogrefe
//
// This file is part of Malachite.
//
// Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License (LGPL) as published by the Free Software Foundation; either version
// 3 of the License, or (at your option) any later version. See .
use crate::extra_variadic::Union3;
use malachite_base::unions::UnionFromStrError;
use std::result::Result;
use std::str::FromStr;
#[test]
fn test_from_str() {
let test = |s, out| {
assert_eq!(Union3::from_str(s), out);
};
test("A(a)", Ok(Union3::A('a')));
test("B(5)", Ok(Union3::B(5)));
test("C(false)", Ok(Union3::C(false)));
test("", Err(UnionFromStrError::Generic(String::new())));
test("xyz", Err(UnionFromStrError::Generic("xyz".to_string())));
test("D(a)", Err(UnionFromStrError::Generic("D(a)".to_string())));
test("A(a", Err(UnionFromStrError::Generic("A(a".to_string())));
let result: Result, _> = Union3::from_str("A(ab)");
if let Err(UnionFromStrError::Specific(Union3::A(_e))) = result {
} else {
panic!("wrong error variant")
}
let result: Result, _> = Union3::from_str("B(-1)");
if let Err(UnionFromStrError::Specific(Union3::B(_e))) = result {
} else {
panic!("wrong error variant")
}
let result: Result, _> = Union3::from_str("C(tralse)");
if let Err(UnionFromStrError::Specific(Union3::C(_e))) = result {
} else {
panic!("wrong error variant")
}
}