nixos-config/subprojects/bahaghari/tests/lib/trivial/default.nix

303 lines
6.1 KiB
Nix

{ pkgs, lib, self }:
let
# The typical rounding procedure for our results. 10 decimal places should be
# enough to test accuracy at least for a basic math subset like this.
round' = self.math.round' (-6);
customOctalGlyphs = {
"0" = "A";
"1" = "B";
"2" = "C";
"3" = "D";
"4" = "E";
"5" = "F";
"6" = "G";
"7" = "H";
};
base24GlyphsList = [
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"A"
"B"
"C"
"D"
"E"
"F"
"G"
"H"
"I"
"J"
"K"
"L"
"M"
"N"
];
customBase24Glyphs = {
"0" = "0";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "A";
"11" = "B";
"12" = "C";
"13" = "D";
"14" = "E";
"15" = "F";
"16" = "G";
"17" = "H";
"18" = "I";
"19" = "J";
"20" = "K";
"21" = "L";
"22" = "M";
"23" = "N";
};
base24Set = self.trivial.generateBaseDigitType base24GlyphsList;
in
lib.runTests {
testGenerateCustomGlyphSet = {
expr = self.trivial.generateGlyphSet [ "A" "B" "C" "D" "E" "F" "G" "H" ];
expected = customOctalGlyphs;
};
testGenerateBase24GlyphSet = {
expr = self.trivial.generateGlyphSet base24GlyphsList;
expected = customBase24Glyphs;
};
testGenerateConversionTable = {
expr = self.trivial.generateConversionTable [ "A" "B" "C" "D" "E" "F" "G" "H" ];
expected = {
"A" = 0;
"B" = 1;
"C" = 2;
"D" = 3;
"E" = 4;
"F" = 5;
"G" = 6;
"H" = 7;
};
};
testGenerateConversionTable2 = {
expr = self.trivial.generateConversionTable
[
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"A"
"B"
"C"
"D"
"E"
"F"
];
expected = {
"0" = 0;
"1" = 1;
"2" = 2;
"3" = 3;
"4" = 4;
"5" = 5;
"6" = 6;
"7" = 7;
"8" = 8;
"9" = 9;
"A" = 10;
"B" = 11;
"C" = 12;
"D" = 13;
"E" = 14;
"F" = 15;
};
};
# Testing out the custom factory methods if they are working as intended.
testCustomBaseDigitSetToDec = {
expr = base24Set.toDec "12H";
expected = 641;
};
testCustomBaseDigitSetFromDec = {
expr = base24Set.fromDec 641;
expected = "12H";
};
testBaseDigitWithCustomOctalGlyph = {
expr = self.trivial.toBaseDigitsWithGlyphs 8 9 customOctalGlyphs;
expected = "BB";
};
testBaseDigitWithCustomOctalGlyph2 = {
expr = self.trivial.toBaseDigitsWithGlyphs 8 641 customOctalGlyphs;
expected = "BCAB";
};
testBaseDigitWithProperBase24Glyph = {
expr = self.trivial.toBaseDigitsWithGlyphs 24 641 customBase24Glyphs;
expected = "12H";
};
testBaseDigitWithProperBase24Glyph2 = {
expr = self.trivial.toBaseDigitsWithGlyphs 24 2583 customBase24Glyphs;
expected = "4BF";
};
# We're mainly testing if the underlying YAML selfrary is mostly compliant
# with whatever it claims.
testImportBasicYAML = {
expr = self.trivial.importYAML ./simple.yml;
expected = {
hello = "there";
how-are-you-doing = "I'm fine. Thank you for asking.\n";
"It's a number" = 53;
dog-breeds = [ "chihuahua" "golden retriever" ];
};
};
testImportTintedThemingBase16YAML = {
expr = self.trivial.importYAML ../tinted-theming/sample-base16-scheme.yml;
expected = {
system = "base16";
name = "Bark on a tree";
author = "Gabriel Arazas (https://foodogsquared.one)";
description = "Rusty theme resembling forestry inspired from Nord theme.";
variant = "dark";
palette = {
base00 = "2b221f";
base01 = "412c26";
base02 = "5c362c";
base03 = "a45b43";
base04 = "e1bcb2";
base05 = "f5ecea";
base06 = "fefefe";
base07 = "eb8a65";
base08 = "d03e68";
base09 = "df937a";
base0A = "afa644";
base0B = "85b26e";
base0C = "eb914a";
base0D = "c67f62";
base0E = "8b7ab9";
base0F = "7f3F83";
};
};
};
# YAML is a superset of JSON (or was it the other way around?) after v1.2.
testToYAML = {
expr = self.trivial.toYAML { } { hello = "there"; };
expected = "{\"hello\":\"there\"}";
};
testNumberClamp = {
expr = self.trivial.clamp 1 10 4;
expected = 4;
};
testNumberClampMin = {
expr = self.trivial.clamp 1 10 (-5);
expected = 1;
};
testNumberClampMax = {
expr = self.trivial.clamp 1 10 453;
expected = 10;
};
testNumberScale = {
expr = self.trivial.scale { inMin = 0; inMax = 15; outMin = 0; outMax = 255; } 15;
expected = 255;
};
testNumberScale2 = {
expr = self.trivial.scale { inMin = 0; inMax = 15; outMin = 0; outMax = 255; } 4;
expected = 68;
};
testNumberScale3 = {
expr = self.trivial.scale { inMin = 0; inMax = 15; outMin = 0; outMax = 255; } (-4);
expected = (-68);
};
testNumberScaleFloat = {
expr = self.trivial.scale { inMin = 0; inMax = 255; outMin = 0.0; outMax = 1.0; } 255;
expected = 1.0;
};
testNumberScaleFloat2 = {
expr = self.trivial.scale { inMin = 0; inMax = 255; outMin = 0.0; outMax = 1.0; } 127.5;
expected = 0.5;
};
testNumberScaleFloat3 = {
expr = round' (self.trivial.scale { inMin = 0; inMax = 255; outMin = 0.0; outMax = 1.0; } 53);
expected = round' 0.207843;
};
testIsNumber1 = {
expr = self.trivial.isNumber 3;
expected = true;
};
testIsNumber2 = {
expr = self.trivial.isNumber 4.09;
expected = true;
};
testIsNumber3 = {
expr = self.trivial.isNumber "HELLO";
expected = false;
};
testIsNumber4 = {
expr = self.trivial.isNumber true;
expected = false;
};
testOptionalNull = {
expr = self.trivial.optionalNull true "HELLO";
expected = "HELLO";
};
testOptionalNull2 = {
expr = self.trivial.optionalNull false "HELLO";
expected = null;
};
testToFloat = {
expr = self.trivial.toFloat 46;
expected = 46.0;
};
testToFloat2 = {
expr = self.trivial.toFloat 26.5;
expected = 26.5;
};
}