176 lines
6.9 KiB
Go
176 lines
6.9 KiB
Go
package itemprops
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/shopspring/decimal"
|
|
"github.com/stretchr/testify/suite"
|
|
"testing"
|
|
)
|
|
|
|
type IpTestSuite struct {
|
|
suite.Suite
|
|
}
|
|
|
|
// метод для установки тестовых данных для всего набора, запускается до всего прочего
|
|
func (suite *IpTestSuite) SetupSuite() {
|
|
}
|
|
|
|
// метод для сноса наделанного тестом до идеально чистого состояния, запускается после всего прочего
|
|
func (suite *IpTestSuite) TearDownSuite() {
|
|
}
|
|
|
|
// запускается перед каждым тестом
|
|
func (suite *IpTestSuite) SetupTest() {}
|
|
|
|
// запускается после каждого теста
|
|
func (suite *IpTestSuite) TearDownTest() {}
|
|
|
|
func TestApi(t *testing.T) {
|
|
tests := new(IpTestSuite)
|
|
suite.Run(t, tests)
|
|
}
|
|
|
|
func (suite *IpTestSuite) TestMaterialWeightAndVolume() {
|
|
// плотность https://tekkos.ru/katalog/poleznaya-informatsiya/tablica-plotnosti-stali-kg-m3.html
|
|
// ударная вязкость https://nposanef.ru/DOCUMENTS/PB-03-605-03/PB-03-605-03_Tab-2.6.pdf
|
|
// температура плавления http://zaozmi.ru/polezno/temperatura_plavleniya_metallov.html
|
|
// температура кипения http://temperatures.ru/pages/temperatura_plavleniya_i_kipeniya
|
|
// Пределы прочности некоторых материалов https://sevparitet.ru/raznoe/koefficient-uprugosti-tablica.html
|
|
|
|
metalMaterialFlags := MaterialFlags{
|
|
ConductsElictricity: true,
|
|
BlocksLiquid: true,
|
|
AcidResistant: true,
|
|
BlocksGas: true,
|
|
Flammable: false,
|
|
ConductsHeat: true,
|
|
Radiates: true,
|
|
}
|
|
|
|
woodMaterialFlags := MaterialFlags{
|
|
ConductsElictricity: false,
|
|
BlocksLiquid: true,
|
|
AcidResistant: false,
|
|
BlocksGas: true,
|
|
Flammable: true,
|
|
ConductsHeat: false,
|
|
Radiates: false,
|
|
}
|
|
|
|
teststeel := Material{
|
|
Name: "teststeel",
|
|
Flags: metalMaterialFlags,
|
|
Density: DimensionItemDensity{decimal.NewFromInt(7800)},
|
|
FractureToughness: DimensionFractureToughness{decimal.NewFromInt(30)},
|
|
MeltingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(1400), true}},
|
|
BoilingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(3200), true}},
|
|
}
|
|
|
|
testOakWood := Material{
|
|
Name: "testoakwood",
|
|
Flags: woodMaterialFlags,
|
|
Density: DimensionItemDensity{decimal.NewFromInt(700)},
|
|
FractureToughness: DimensionFractureToughness{decimal.NewFromFloat(4.5)},
|
|
MeltingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(600), true}}, //загорается при 600 град Цельсия
|
|
}
|
|
|
|
testCube := ItemPhysics{
|
|
Material: teststeel,
|
|
DimensionItemRigidity: DimensionItemRigidity{decimal.NewFromInt(65)},
|
|
DimensionItemSize: DimensionItemSize{
|
|
Width: decimal.NewFromFloat(0.1),
|
|
Height: decimal.NewFromFloat(0.1),
|
|
Depth: decimal.NewNullDecimal(decimal.NewFromFloat(0.1)),
|
|
Thickness: decimal.NullDecimal{},
|
|
},
|
|
DimensionItemTemperature: DimensionItemTemperature{decimal.NewFromInt(20)},
|
|
}
|
|
|
|
suite.Equal(decimal.NewFromFloat(7.8).String(), testCube.Weight().String())
|
|
suite.Equal(decimal.NewFromFloat(0.001).String(), testCube.Volume().String())
|
|
|
|
testOakCube := ItemPhysics{
|
|
Material: testOakWood,
|
|
DimensionItemRigidity: DimensionItemRigidity{decimal.NewFromInt(4)},
|
|
DimensionItemSize: DimensionItemSize{
|
|
Width: decimal.NewFromFloat(0.1),
|
|
Height: decimal.NewFromFloat(0.1),
|
|
Depth: decimal.NewNullDecimal(decimal.NewFromFloat(0.1)),
|
|
Thickness: decimal.NullDecimal{},
|
|
},
|
|
DimensionItemTemperature: DimensionItemTemperature{decimal.NewFromInt(20)},
|
|
}
|
|
|
|
//oakwood is ~10 times lighter than steel
|
|
suite.Equal(decimal.NewFromFloat(0.7).String(), testOakCube.Weight().String())
|
|
suite.Equal(decimal.NewFromFloat(0.001).String(), testOakCube.Volume().String())
|
|
|
|
testCuirass := ItemPhysics{
|
|
Material: teststeel,
|
|
DimensionItemRigidity: DimensionItemRigidity{decimal.NewFromInt(55)},
|
|
DimensionItemSize: DimensionItemSize{
|
|
Width: decimal.NewFromFloat(0.5), //60 cm wide
|
|
Height: decimal.NewFromFloat(0.8), //80 cm high
|
|
Depth: decimal.NewNullDecimal(decimal.NewFromFloat(0.4)), //50 cm deep
|
|
Thickness: decimal.NewNullDecimal(decimal.NewFromFloat(0.001)), // 1mm thick
|
|
},
|
|
DimensionItemTemperature: DimensionItemTemperature{},
|
|
}
|
|
|
|
//12.1992 kg HEAVY ARMOR IS HEAVY
|
|
suite.Equal(decimal.NewFromFloat(12.1992).String(), testCuirass.Weight().String())
|
|
//0.001564 m3 of steel
|
|
suite.Equal(decimal.NewFromFloat(0.001564).String(), testCuirass.Volume().String())
|
|
}
|
|
|
|
func (suite *IpTestSuite) TestMaterialSerialization() {
|
|
metalMaterialFlags := MaterialFlags{
|
|
ConductsElictricity: true,
|
|
BlocksLiquid: true,
|
|
AcidResistant: true,
|
|
BlocksGas: true,
|
|
Flammable: false,
|
|
ConductsHeat: true,
|
|
Radiates: true,
|
|
}
|
|
|
|
woodMaterialFlags := MaterialFlags{
|
|
ConductsElictricity: false,
|
|
BlocksLiquid: true,
|
|
AcidResistant: false,
|
|
BlocksGas: true,
|
|
Flammable: true,
|
|
ConductsHeat: false,
|
|
Radiates: false,
|
|
}
|
|
|
|
teststeel := Material{
|
|
Name: "teststeel",
|
|
Flags: metalMaterialFlags,
|
|
Density: DimensionItemDensity{decimal.NewFromInt(7800)},
|
|
FractureToughness: DimensionFractureToughness{decimal.NewFromInt(30)},
|
|
MeltingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(1400), true}},
|
|
BoilingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(3200), true}},
|
|
}
|
|
|
|
testOakWood := Material{
|
|
Name: "testoakwood",
|
|
Flags: woodMaterialFlags,
|
|
Density: DimensionItemDensity{decimal.NewFromInt(700)},
|
|
FractureToughness: DimensionFractureToughness{decimal.NewFromFloat(4.5)},
|
|
MeltingPoint: DimensionItemNullTemperature{decimal.NullDecimal{decimal.NewFromInt(600), true}}, //загорается при 600 град Цельсия
|
|
}
|
|
bytes, err := json.Marshal(teststeel)
|
|
suite.NoError(err)
|
|
suite.Equal(
|
|
`{"name":"teststeel","material_flags":{"conducts_elictricity":true,"blocks_liquid":true,"acid_resistant":true,"blocks_gas":true,"flammable":false,"conducts_heat":true,"radiates":true},"density":"7800","fracture_toughness":"30","melting_point":"1400","boiling_point":"3200"}`,
|
|
string(bytes),
|
|
)
|
|
|
|
bytes, err = json.Marshal(testOakWood)
|
|
suite.NoError(err)
|
|
suite.Equal(`{"name":"testoakwood","material_flags":{"conducts_elictricity":false,"blocks_liquid":true,"acid_resistant":false,"blocks_gas":true,"flammable":true,"conducts_heat":false,"radiates":false},"density":"700","fracture_toughness":"4.5","melting_point":"600","boiling_point":null}`,
|
|
string(bytes),
|
|
)
|
|
}
|