temporeest
Version:
49 lines (40 loc) • 1.23 kB
text/typescript
import { ChunkIterable, emptyChunkIterable } from '../../ChunkIterable.js';
import { Expression, HopExpression } from '../../Expression.js';
import HopPlan from '../../HopPlan.js';
import { IPlan } from '../../Plan.js';
import orderPlans from '../orderPlans.js';
class TestSourcePlan implements IPlan {
get derivations(): readonly Expression[] {
return [];
}
addDerivation(expression?: Expression): this {
return this;
}
get iterable(): ChunkIterable<any> {
return emptyChunkIterable;
}
async gen(): Promise<any[]> {
return [];
}
optimize(nextHop?: HopPlan): IPlan {
return this;
}
}
class TestHopExpression implements HopExpression<any, any> {
chainAfter(iterable: ChunkIterable<any>): ChunkIterable<any> {
return emptyChunkIterable;
}
optimize(sourcePlan: IPlan, plan: HopPlan, nextHop?: HopPlan): HopPlan {
return plan;
}
type: 'hop' = 'hop';
implicatedDataset(): string {
return '---';
}
}
test('re-orders hop plans', () => {
const source = new TestSourcePlan();
const hop1 = new HopPlan(source, new TestHopExpression(), []);
const hop2 = new HopPlan(hop1, new TestHopExpression(), []);
expect(orderPlans(hop2)).toEqual([source, hop1, hop2]);
});