2021-12-01 16:24:29 +00:00
|
|
|
/// SPDX-License-Identifier: GPL-3.0-or-later
|
2024-02-03 14:59:22 +00:00
|
|
|
/// SPDX-FileCopyrightText: Copyright © 2016-2024 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
2021-12-01 16:24:29 +00:00
|
|
|
|
2024-04-04 13:46:19 +00:00
|
|
|
import { GenericEmbedded, KeyedSet } from '@preserves/core';
|
2023-12-17 21:07:46 +00:00
|
|
|
import { Bag, ChangeDescription } from '../src/runtime/bag';
|
|
|
|
|
|
|
|
describe('bag', () => {
|
|
|
|
it('should be initializable from a set', () => {
|
2024-04-04 13:46:19 +00:00
|
|
|
const b = new Bag(new KeyedSet<GenericEmbedded, string>(['a', 'b', 'c']));
|
2023-12-17 21:07:46 +00:00
|
|
|
expect(b.size).toBe(3);
|
|
|
|
expect(b.get('a')).toBe(1);
|
|
|
|
expect(b.get('z')).toBe(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should be mutable', () => {
|
|
|
|
const b = new Bag();
|
|
|
|
b.change('a', 1);
|
|
|
|
b.change('a', 1);
|
|
|
|
expect(b.get('a')).toBe(2);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should count up', () => {
|
|
|
|
const b = new Bag();
|
|
|
|
expect(b.change('a', 1)).toBe(ChangeDescription.ABSENT_TO_PRESENT);
|
|
|
|
expect(b.change('a', 1)).toBe(ChangeDescription.PRESENT_TO_PRESENT);
|
|
|
|
expect(b.get('a')).toBe(2);
|
|
|
|
expect(b.get('z')).toBe(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should count down', () => {
|
2024-04-04 13:46:19 +00:00
|
|
|
const b = new Bag(new KeyedSet<GenericEmbedded, string>(['a']));
|
2023-12-17 21:07:46 +00:00
|
|
|
expect(b.change('a', 1)).toBe(ChangeDescription.PRESENT_TO_PRESENT);
|
|
|
|
expect(b.change('a', -1)).toBe(ChangeDescription.PRESENT_TO_PRESENT);
|
|
|
|
expect(b.size).toBe(1);
|
|
|
|
expect(b.change('a', -1)).toBe(ChangeDescription.PRESENT_TO_ABSENT);
|
|
|
|
expect(b.size).toBe(0);
|
|
|
|
expect(b.get('a')).toBe(0);
|
|
|
|
expect(b.get('z')).toBe(0);
|
|
|
|
expect(b.change('a', -1)).toBe(ChangeDescription.ABSENT_TO_PRESENT);
|
|
|
|
expect(b.size).toBe(1);
|
|
|
|
expect(b.get('a')).toBe(-1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should be clamped', function() {
|
|
|
|
const b = new Bag(new KeyedSet(['a']));
|
|
|
|
for (let i = 0; i < 4; i++) b.change('a', -1, true);
|
|
|
|
expect(b.size).toBe(0);
|
|
|
|
expect(b.get('a')).toBe(0);
|
|
|
|
});
|
2018-09-09 17:12:50 +00:00
|
|
|
});
|