Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions benches/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ name = "interpreter"
harness = false
path = "src/interpreter.rs"

[[bench]]
name = "technical_analysis"
harness = false
path = "src/technical_analysis.rs"

[dependencies]
criterion = { package = "codspeed-criterion-compat", version = "2.7", features = [
"html_reports",
Expand Down
42 changes: 6 additions & 36 deletions benches/src/interpreter.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
mod test_data;

use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use pine_lang::core::DefaultPineOutput;
use pine_lang::{execute, ScriptBuilder};
use test_data::generate_bars;

const TEST_SCRIPTS: &[(&str, &str)] = &[
("simple", include_str!("../test_data/simple.pine")),
(
"moving_averages",
include_str!("../test_data/moving_averages.pine"),
),
("rsi", include_str!("../test_data/rsi.pine")),
("macd", include_str!("../test_data/macd.pine")),
("complex", include_str!("../test_data/complex.pine")),
];
use pine_core::MAX_LOOKBACK;
use pine_lang::execute;
use pinecone_benches::{generate_bars, TEST_SCRIPTS};

fn bench_single_bar(c: &mut Criterion) {
fn bench_full_run(c: &mut Criterion) {
let mut group = c.benchmark_group("interpreter/single_bar");
let data = generate_bars(200); // Generate enough bars for historical lookback
let data = generate_bars(MAX_LOOKBACK * 2);

for (name, source) in TEST_SCRIPTS {
group.bench_with_input(BenchmarkId::from_parameter(name), source, |b, source| {
Expand All @@ -31,22 +18,5 @@ fn bench_single_bar(c: &mut Criterion) {
group.finish();
}

fn bench_compile_only(c: &mut Criterion) {
let mut group = c.benchmark_group("interpreter/compile");

for (name, source) in TEST_SCRIPTS {
group.bench_with_input(BenchmarkId::from_parameter(name), source, |b, source| {
b.iter(|| {
let _ = ScriptBuilder::<DefaultPineOutput>::with_code(black_box(source))
.with_data(pine_lang::core::Data::default())
.compile()
.unwrap();
});
});
}

group.finish();
}

criterion_group!(benches, bench_compile_only, bench_single_bar);
criterion_group!(benches, bench_full_run);
criterion_main!(benches);
12 changes: 1 addition & 11 deletions benches/src/lexer.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use pine_lexer::Lexer;

const TEST_SCRIPTS: &[(&str, &str)] = &[
("simple", include_str!("../test_data/simple.pine")),
(
"moving_averages",
include_str!("../test_data/moving_averages.pine"),
),
("rsi", include_str!("../test_data/rsi.pine")),
("macd", include_str!("../test_data/macd.pine")),
("complex", include_str!("../test_data/complex.pine")),
];
use pinecone_benches::TEST_SCRIPTS;

fn bench_lexer(c: &mut Criterion) {
let mut group = c.benchmark_group("lexer");
Expand Down
12 changes: 1 addition & 11 deletions benches/src/parser.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,7 @@
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use pine_lexer::Lexer;
use pine_parser::Parser;

const TEST_SCRIPTS: &[(&str, &str)] = &[
("simple", include_str!("../test_data/simple.pine")),
(
"moving_averages",
include_str!("../test_data/moving_averages.pine"),
),
("rsi", include_str!("../test_data/rsi.pine")),
("macd", include_str!("../test_data/macd.pine")),
("complex", include_str!("../test_data/complex.pine")),
];
use pinecone_benches::TEST_SCRIPTS;

fn bench_parser(c: &mut Criterion) {
let mut group = c.benchmark_group("parser");
Expand Down
116 changes: 0 additions & 116 deletions benches/src/technical_analysis.rs

This file was deleted.

11 changes: 11 additions & 0 deletions benches/src/test_data.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
use pine_core::Bar;
use pine_core::Data;

pub const TEST_SCRIPTS: &[(&str, &str)] = &[
("simple", include_str!("../test_data/simple.pine")),
(
"moving_averages",
include_str!("../test_data/moving_averages.pine"),
),
("rsi", include_str!("../test_data/rsi.pine")),
("macd", include_str!("../test_data/macd.pine")),
("complex", include_str!("../test_data/complex.pine")),
];

/// Generate synthetic OHLCV bar data for benchmarking
pub fn generate_bars(count: usize) -> Data {
let mut bars = Vec::with_capacity(count);
Expand Down
14 changes: 5 additions & 9 deletions crates/pine-builtins/src/ta/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use pine_builtin_macro::BuiltinFunction;
use pine_core::{PineOutput, PineVersion, MAX_LOOKBACK};
use pine_core::{PineOutput, PineVersion, SeriesBuffer, MAX_LOOKBACK};
use pine_interpreter::{Builtin, Interpreter, PerBarAdvance, RuntimeError, Series, Value};
use std::cell::{Cell, RefCell};
use std::collections::HashMap;
Expand Down Expand Up @@ -121,7 +121,7 @@ pub fn register<O: PineOutput>(
Value::Series(Series {
id: format!("ta.{name}"),
current: Box::new(Value::Number(seed)),
history: Some(Rc::new(RefCell::new(Vec::new()))),
history: Some(Rc::new(RefCell::new(SeriesBuffer::default()))),
}),
);
}
Expand All @@ -132,7 +132,7 @@ pub fn register<O: PineOutput>(
let vwap_series = Rc::new(RefCell::new(Value::Series(Series {
id: "ta.vwap".to_string(),
current: Box::new(Value::Na),
history: Some(Rc::new(RefCell::new(Vec::new()))),
history: Some(Rc::new(RefCell::new(SeriesBuffer::default()))),
})));
ta_ns.insert("vwap".to_string(), {
let cell = Rc::clone(&vwap_series);
Expand Down Expand Up @@ -174,7 +174,7 @@ fn series_now<O: PineOutput>(ctx: &Interpreter<O>, name: &str) -> Option<f64> {
}

fn series_prev<O: PineOutput>(ctx: &Interpreter<O>, name: &str) -> Option<f64> {
ctx.user_series_history.get(name)?.last()?.as_number().ok()
ctx.user_series_history.get(name)?.get(0)?.as_number().ok()
}

/// The current bar's OHLCV plus the previous bar's `close`/`volume` — everything
Expand Down Expand Up @@ -302,11 +302,7 @@ fn step_series<O: PineOutput>(series: &mut Value<O>, push: bool, next: f64) {
if push {
if let Some(history) = &s.history {
let mut history = history.borrow_mut();
history.push((*s.current).clone());
if history.len() > MAX_LOOKBACK {
let excess = history.len() - MAX_LOOKBACK;
history.drain(..excess);
}
history.push((*s.current).clone(), MAX_LOOKBACK);
}
}
*s.current = Value::Number(next);
Expand Down
Loading
Loading