test: unit tests to prompt builder [TAB-180] (#387)

* test: unit tests to prompt builder

* chore: fix typo

* chore: fix lint

* chore: resolve comments
release-v0.1
vodkaslime 2023-09-01 09:20:20 +08:00 committed by GitHub
parent 90aadad3ce
commit 63c00494f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 153 additions and 0 deletions

View File

@ -200,3 +200,156 @@ lazy_static! {
static ref LANGUAGE_LINE_COMMENT_CHAR: HashMap<&'static str, &'static str> =
HashMap::from([("python", "#"), ("rust", "//"),]);
}
#[cfg(test)]
mod tests {
use super::*;
fn create_prompt_builder(with_template: bool) -> PromptBuilder {
let prompt_template = if with_template {
// Init prompt builder with codellama prompt template
Some("<PRE> {prefix} <SUF>{suffix} <MID>".into())
} else {
None
};
// Init prompt builder with prompt rewrite disabled.
PromptBuilder::new(prompt_template, false)
}
#[test]
fn test_prompt_template() {
let pb = create_prompt_builder(true);
// Rewrite disabled, so the language doesn't matter.
let language = "python";
// Test w/ prefix, w/ suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("this is some suffix".into()),
};
assert_eq!(
pb.build(language, segments),
"<PRE> this is some prefix <SUF>this is some suffix <MID>"
);
}
// Test w/ prefix, w/o suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: None,
};
assert_eq!(
pb.build(language, segments),
"<PRE> this is some prefix <SUF>\n <MID>"
);
}
// Test w/ prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("".into()),
};
assert_eq!(
pb.build(language, segments),
"<PRE> this is some prefix <SUF> <MID>"
);
}
// Test w/ empty prefix, w/ suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("this is some suffix".into()),
};
assert_eq!(
pb.build(language, segments),
"<PRE> <SUF>this is some suffix <MID>"
);
}
// Test w/ empty prefix, w/o suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: None,
};
assert_eq!(pb.build(language, segments), "<PRE> <SUF>\n <MID>");
}
// Test w/ emtpy prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("".into()),
};
assert_eq!(pb.build(language, segments), "<PRE> <SUF> <MID>");
}
}
#[test]
fn test_no_prompt_template() {
let pb = create_prompt_builder(false);
// Rewrite disabled, so the language doesn't matter.
let language = "python";
// Test w/ prefix, w/ suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("this is some suffix".into()),
};
assert_eq!(pb.build(language, segments), "this is some prefix");
}
// Test w/ prefix, w/o suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: None,
};
assert_eq!(pb.build(language, segments), "this is some prefix");
}
// Test w/ prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "this is some prefix".into(),
suffix: Some("".into()),
};
assert_eq!(pb.build(language, segments), "this is some prefix");
}
// Test w/ empty prefix, w/ suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("this is some suffix".into()),
};
assert_eq!(pb.build(language, segments), "");
}
// Test w/ empty prefix, w/o suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: None,
};
assert_eq!(pb.build(language, segments), "");
}
// Test w/ empty prefix, w/ empty suffix.
{
let segments = Segments {
prefix: "".into(),
suffix: Some("".into()),
};
assert_eq!(pb.build(language, segments), "");
}
}
}