Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #1 v1.0.3-alpha.1 #2

Merged
merged 8 commits into from
Dec 13, 2023
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# BallisticCalculator
LGPL library for small arms ballistic calculations (JavaScript ES6+)
ISC library for small arms ballistic calculations (JavaScript ES6+)

### Table of contents
* **[Installation](#installation)**
Expand Down
76 changes: 76 additions & 0 deletions __tests__/conditions.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import {
Atmo,
Wind,
Shot,
Unit,
calcSettings,
Distance,
Angular,
cStandardPressure,
cStandardTemperature
} from "../src/index";


describe('Conditions', () => {

describe("Atmo create", () => {
const atmo = Atmo.icao()

test("Atmo altitude check", () => {
expect(atmo.altitude.in(Unit.Foot)).toBeCloseTo(0, 4);
});

test("Atmo pressure check", () => {
expect(atmo.pressure.in(Unit.InHg)).toBeCloseTo(cStandardPressure, 4);
});

test("Atmo temperature check", () => {
expect(atmo.temperature.in(Unit.Fahrenheit)).toBeCloseTo(cStandardTemperature, 4);
});

// FIXME: add methods tests

});

describe("Wind create", () => {
const wind = new Wind(10, 10, 1000)

test("Wind velocity check", () => {
expect(wind.velocity.in(calcSettings.Units.velocity)).toBeCloseTo(10, 4);
});

test("Wind direction check", () => {
expect(wind.directionFrom.in(calcSettings.Units.angular)).toBeCloseTo(10, 4);
});

test("Wind distance check", () => {
expect(wind.untilDistance.in(calcSettings.Units.distance)).toBeCloseTo(1000, 4);
});

// FIXME: add methods tests

});

describe("Shot create", () => {
const shot = new Shot()
const atmo = Atmo.icao()
const winds = [new Wind()]

test("Shot create check", () => {
expect(shot).toEqual(
{
maxRange: new Distance(1000, calcSettings.Units.distance),
zeroAngle: new Angular(0, calcSettings.Units.angular),
relativeAngle: new Angular(0, calcSettings.Units.angular),
cantAngle: new Angular(0, calcSettings.Units.angular),
atmo: atmo,
winds: winds
}
);
});

// FIXME: add methods tests

});

});
9 changes: 9 additions & 0 deletions __tests__/drag_tables.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { DragTable } from "../src/index";

describe("Drag Tables", () => {
test("First element of TableG1 should have Mach: 0.00 and CD: 0.2629", () => {
const firstElement = DragTable.G1[0];
expect(firstElement.Mach).toBeCloseTo(0.00, 4); // Adjust the precision as needed
expect(firstElement.CD).toBeCloseTo(0.2629, 4); // Adjust the precision as needed
});
});
32 changes: 32 additions & 0 deletions __tests__/settings.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Distance, calcSettings } from '../src/index';


describe('Settings', () => {

test('should initialize with default values', () => {
expect(calcSettings.USE_POWDER_SENSITIVITY).toBe(false);
expect(calcSettings._MAX_CALC_STEP_SIZE).toBe(1);
// Add more assertions for default unit values if needed
});

test('should set MAX_CALC_STEP_SIZE', () => {
const distanceValue = new Distance(100, Distance.Meter); // Replace with an appropriate value
calcSettings.setMaxCalcStepSize(distanceValue);
// Adjust the expectation based on the calculation in your implementation
expect(calcSettings._MAX_CALC_STEP_SIZE).toEqual(new Distance(100, Distance.Meter));
});

test('should set MAX_CALC_STEP_SIZE', () => {
const distanceValue = 100; // Replace with an appropriate value
calcSettings.setMaxCalcStepSize(distanceValue);
// Adjust the expectation based on the calculation in your implementation
expect(calcSettings._MAX_CALC_STEP_SIZE).toEqual(new Distance(100, calcSettings.Units.distance));
});

test('should modify USE_POWDER_SENSITIVITY', () => {
calcSettings.USE_POWDER_SENSITIVITY = true;
expect(calcSettings.USE_POWDER_SENSITIVITY).toBe(true);
});

// Add more tests as needed for other methods or scenarios
});
2 changes: 1 addition & 1 deletion __tests__/units.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AbstractUnit, Angular, Distance, Velocity, Weight, Temperature, Pressure, Energy, Unit, UnitPropsDict } from "../src/units.js";
import { Angular, Distance, Velocity, Weight, Temperature, Pressure, Energy } from "../src/index";


describe('Ballistics Library Tests', () => {
Expand Down
241 changes: 241 additions & 0 deletions doc/units.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
# Units Module Documentation

- [AbstractUnit Class](#abstractunit-class)
- [Constructor](#constructor)
- [Methods](#methods)
- [`toString(): string`](#tostring-string)
- [`_unit_support_error(value: number, units: Unit): number`](#_unit_support_error-value-number-units-unit-number)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)
- [`to(units: Unit): AbstractUnit`](#to-units-unit-abstractunit)
- [`in(units: Unit): number`](#in-units-unit-number)
- [`get units: Unit`](#get-units-unit)
- [`get rawValue: number`](#get-rawvalue-number)

- [Angular Class (extends AbstractUnit)](#angular-class-extends-abstractunit)
- [Methods](#methods-1)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Distance Class (extends AbstractUnit)](#distance-class-extends-abstractunit)
- [Methods](#methods-2)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Velocity Class (extends AbstractUnit)](#velocity-class-extends-abstractunit)
- [Methods](#methods-3)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Weight Class (extends AbstractUnit)](#weight-class-extends-abstractunit)
- [Methods](#methods-4)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Pressure Class (extends AbstractUnit)](#pressure-class-extends-abstractunit)
- [Methods](#methods-5)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Temperature Class (extends AbstractUnit)](#temperature-class-extends-abstractunit)
- [Methods](#methods-6)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Energy Class (extends AbstractUnit)](#energy-class-extends-abstractunit)
- [Methods](#methods-7)
- [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)
- [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

- [Unit Enum](#unit-enum)
- [UnitPropsDict Object](#unitpropsdict-object)
- [unitTypeCoerce](#unittypecoerce)


## [AbstractUnit Class](#abstractunit-class)

An abstract class for unit of measure instance definition. It stores the defined unit and value, and applies conversions to other units.

### Constructor

- **Parameters:**
- `value` (number): Numeric value of the unit.
- `units` (Unit): Unit as a Unit enum.

### Methods

#### [`toString(): string`](#tostring-string)

Returns a human-readable representation of the value with its unit.

#### [`_unit_support_error(value: number, units: Unit): number`](#_unit_support_error-value-number-units-unit-number)

Validates the units.
- Parameters:
- `value` (number): Value of the unit.
- `units` (Unit): Unit enum type.
- Returns: number
- Throws:
- `TypeError` when the provided units are not of the expected type.
- `Error` when the provided units are not supported.

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Converts value with specified units to a raw value.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Converts raw value to specified units.

#### [`to(units: Unit): AbstractUnit`](#to-units-unit-abstractunit)

Returns a new unit instance in specified units.

#### [`in(units: Unit): number`](#in-units-unit-number)

Returns value in specified units.

#### [`get units: Unit`](#get-units-unit)

Returns defined units.

#### [`get rawValue: number`](#get-rawvalue-number)

Raw unit value getter.

---

## Angular Class (extends AbstractUnit)

Angular unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Angular-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Angular-specific conversion logic.

---

## Distance Class (extends AbstractUnit)

Distance unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Distance-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Distance-specific conversion logic.

---

## Velocity Class (extends AbstractUnit)

Velocity unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Velocity-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Velocity-specific conversion logic.

---

## Weight Class (extends AbstractUnit)

Weight unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Weight-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Weight-specific conversion logic.

---

## Pressure Class (extends AbstractUnit)

Pressure unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Pressure-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Pressure-specific conversion logic.

---

## Temperature Class (extends AbstractUnit)

Temperature unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Temperature-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Temperature-specific conversion logic.

---

## Energy Class (extends AbstractUnit)

Energy unit class, extending [AbstractUnit](#abstractunit-class).

### Methods

#### [`toRaw(value: number, units: Unit): number`](#toraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Energy-specific conversion logic.

#### [`fromRaw(value: number, units: Unit): number`](#fromraw-value-number-units-unit-number)

Overrides the method in AbstractUnit to provide Energy-specific conversion logic.

---

## Unit Enum

An enum representing unit types.

---

## UnitPropsDict Object

A dictionary of properties for the Unit enum type.

---

## unitTypeCoerce

Coerces the given instance to the specified class type or creates a new instance.
- Parameters:
- `instance` (Object): The instance to coerce or create.
- `expectedClass` (Class): The expected class type.
- `defaultUnit` (Unit): The default unit for creating a new instance.
- Returns: `AbstractUnit` or `Object`
- Throws:
- `TypeError` if the instance is
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading