@@ -12,6 +12,7 @@ public class ConversionTests
1212 private const double HslTolerance = 0.00000001 ;
1313 private const double XyzTolerance = 0.00000001 ;
1414 private const double LabTolerance = 0.00000001 ;
15+ private const double OklabTolerance = 0.000001 ;
1516
1617 [ Test ]
1718 // no point doing this test starting with Wikipedia's HSB / HSL values since they're rounded
@@ -44,6 +45,9 @@ public void HslSameAfterDeconversion()
4445
4546 [ Test ]
4647 public void LabSameAfterDeconversion ( ) => AssertUtils . AssertRandomLabColours ( AssertLabDeconversion ) ;
48+
49+ [ Test ]
50+ public void OklabSameAfterDeconversion ( ) => AssertUtils . AssertRandomOklabColours ( AssertOklabDeconversion ) ;
4751
4852 private static void AssertRgbConversion ( TestColour namedColour )
4953 {
@@ -65,66 +69,73 @@ private static void AssertRgbConversion(TestColour namedColour)
6569 Assert . That ( Math . Round ( hsl . L , 2 ) , Is . EqualTo ( expectedRoundedHsl . Third ) . Within ( 0.02 ) , namedColour . Name ! ) ;
6670 }
6771
68- private static void AssertRgbDeconversion ( TestColour namedColour ) => AssertRgbDeconversion ( GetRgbTupleFromHex ( namedColour . Hex ! ) ) ;
69- private static void AssertRgb255Deconversion ( ColourTuple tuple ) => AssertRgbDeconversion ( GetNormalisedRgb255Tuple ( tuple ) ) ;
70- private static void AssertRgbDeconversion ( ColourTuple tuple ) => AssertRgbDeconversion ( new Rgb ( tuple . First , tuple . Second , tuple . Third , Configuration . Default ) ) ;
72+ private static void AssertRgbDeconversion ( TestColour namedColour ) => AssertRgbDeconversion ( GetRgbTripletFromHex ( namedColour . Hex ! ) ) ;
73+ private static void AssertRgb255Deconversion ( ColourTriplet triplet ) => AssertRgbDeconversion ( GetNormalisedRgb255Triplet ( triplet ) ) ;
74+ private static void AssertRgbDeconversion ( ColourTriplet triplet ) => AssertRgbDeconversion ( new Rgb ( triplet . First , triplet . Second , triplet . Third , Configuration . Default ) ) ;
7175 private static void AssertRgbDeconversion ( Rgb original )
7276 {
7377 var deconvertedViaHsb = Conversion . HsbToRgb ( Conversion . RgbToHsb ( original ) , Configuration . Default ) ;
74- AssertUtils . AssertColourTuple ( deconvertedViaHsb . Tuple , original . Tuple , RgbTolerance ) ;
75- AssertUtils . AssertColourTuple ( deconvertedViaHsb . TupleLinear , original . TupleLinear , RgbTolerance ) ;
76- AssertUtils . AssertColourTuple ( deconvertedViaHsb . Tuple255 , original . Tuple255 , RgbTolerance ) ;
78+ AssertUtils . AssertColourTriplet ( deconvertedViaHsb . Triplet , original . Triplet , RgbTolerance ) ;
79+ AssertUtils . AssertColourTriplet ( deconvertedViaHsb . TripletLinear , original . TripletLinear , RgbTolerance ) ;
80+ AssertUtils . AssertColourTriplet ( deconvertedViaHsb . Triplet255 , original . Triplet255 , RgbTolerance ) ;
7781
7882 var deconvertedViaXyz = Conversion . XyzToRgb ( Conversion . RgbToXyz ( original , Configuration . Default ) , Configuration . Default ) ;
79- AssertUtils . AssertColourTuple ( deconvertedViaXyz . Tuple , original . Tuple , RgbTolerance ) ;
80- AssertUtils . AssertColourTuple ( deconvertedViaXyz . TupleLinear , original . TupleLinear , RgbTolerance ) ;
81- AssertUtils . AssertColourTuple ( deconvertedViaXyz . Tuple255 , original . Tuple255 , RgbTolerance ) ;
83+ AssertUtils . AssertColourTriplet ( deconvertedViaXyz . Triplet , original . Triplet , RgbTolerance ) ;
84+ AssertUtils . AssertColourTriplet ( deconvertedViaXyz . TripletLinear , original . TripletLinear , RgbTolerance ) ;
85+ AssertUtils . AssertColourTriplet ( deconvertedViaXyz . Triplet255 , original . Triplet255 , RgbTolerance ) ;
8286 }
8387
8488 private static void AssertHsbDeconversion ( TestColour namedColour ) => AssertHsbDeconversion ( namedColour . Hsb ! ) ;
85- private static void AssertHsbDeconversion ( ColourTuple tuple ) => AssertHsbDeconversion ( new Hsb ( tuple . First , tuple . Second , tuple . Third ) ) ;
89+ private static void AssertHsbDeconversion ( ColourTriplet triplet ) => AssertHsbDeconversion ( new Hsb ( triplet . First , triplet . Second , triplet . Third ) ) ;
8690 private static void AssertHsbDeconversion ( Hsb original )
8791 {
8892 var deconvertedViaRgb = Conversion . RgbToHsb ( Conversion . HsbToRgb ( original , Configuration . Default ) ) ;
89- AssertUtils . AssertColourTuple ( deconvertedViaRgb . Tuple , original . Tuple , HsbTolerance , true ) ;
93+ AssertUtils . AssertColourTriplet ( deconvertedViaRgb . Triplet , original . Triplet , HsbTolerance , true ) ;
9094
9195 var deconvertedViaHsl = Conversion . HslToHsb ( Conversion . HsbToHsl ( original ) ) ;
92- AssertUtils . AssertColourTuple ( deconvertedViaHsl . Tuple , original . Tuple , HsbTolerance , true ) ;
96+ AssertUtils . AssertColourTriplet ( deconvertedViaHsl . Triplet , original . Triplet , HsbTolerance , true ) ;
9397 }
9498
9599 private static void AssertHslDeconversion ( TestColour namedColour ) => AssertHslDeconversion ( namedColour . Hsl ! ) ;
96- private static void AssertHslDeconversion ( ColourTuple tuple ) => AssertHslDeconversion ( new Hsl ( tuple . First , tuple . Second , tuple . Third ) ) ;
100+ private static void AssertHslDeconversion ( ColourTriplet triplet ) => AssertHslDeconversion ( new Hsl ( triplet . First , triplet . Second , triplet . Third ) ) ;
97101 private static void AssertHslDeconversion ( Hsl original )
98102 {
99103 var deconverted = Conversion . RgbToHsl ( Conversion . HsbToRgb ( Conversion . HslToHsb ( original ) , Configuration . Default ) ) ;
100- AssertUtils . AssertColourTuple ( deconverted . Tuple , original . Tuple , HslTolerance , true ) ;
104+ AssertUtils . AssertColourTriplet ( deconverted . Triplet , original . Triplet , HslTolerance , true ) ;
101105 }
102106
103- private static void AssertXyzDeconversion ( ColourTuple tuple ) => AssertXyzDeconversion ( new Xyz ( tuple . First , tuple . Second , tuple . Third ) ) ;
107+ private static void AssertXyzDeconversion ( ColourTriplet triplet ) => AssertXyzDeconversion ( new Xyz ( triplet . First , triplet . Second , triplet . Third ) ) ;
104108 private static void AssertXyzDeconversion ( Xyz original )
105109 {
106110 // note: cannot test deconversion via RGB space as XYZ <-> RGB is not 1:1
107111 var deconverted = Conversion . LabToXyz ( Conversion . XyzToLab ( original , Configuration . Default ) , Configuration . Default ) ;
108- AssertUtils . AssertColourTuple ( deconverted . Tuple , original . Tuple , XyzTolerance ) ;
112+ AssertUtils . AssertColourTriplet ( deconverted . Triplet , original . Triplet , XyzTolerance ) ;
109113 }
110114
111- private static void AssertLabDeconversion ( ColourTuple tuple ) => AssertLabDeconversion ( new Lab ( tuple . First , tuple . Second , tuple . Third ) ) ;
115+ private static void AssertLabDeconversion ( ColourTriplet triplet ) => AssertLabDeconversion ( new Lab ( triplet . First , triplet . Second , triplet . Third ) ) ;
112116 private static void AssertLabDeconversion ( Lab original )
113117 {
114118 // note: cannot test deconversion via RGB space as XYZ <-> RGB is not 1:1
115119 var deconverted = Conversion . XyzToLab ( Conversion . LabToXyz ( original , Configuration . Default ) , Configuration . Default ) ;
116- AssertUtils . AssertColourTuple ( deconverted . Tuple , original . Tuple , LabTolerance ) ;
120+ AssertUtils . AssertColourTriplet ( deconverted . Triplet , original . Triplet , LabTolerance ) ;
121+ }
122+
123+ private static void AssertOklabDeconversion ( ColourTriplet triplet ) => AssertOklabDeconversion ( new Oklab ( triplet . First , triplet . Second , triplet . Third ) ) ;
124+ private static void AssertOklabDeconversion ( Oklab original )
125+ {
126+ var deconverted = Conversion . XyzToOklab ( Conversion . OklabToXyz ( original , Configuration . Default ) , Configuration . Default ) ;
127+ AssertUtils . AssertColourTriplet ( deconverted . Triplet , original . Triplet , OklabTolerance ) ;
117128 }
118129
119- private static ColourTuple GetRgbTupleFromHex ( string hex )
130+ private static ColourTriplet GetRgbTripletFromHex ( string hex )
120131 {
121132 var ( r255 , g255 , b255 , _) = Wacton . Unicolour . Utils . ParseColourHex ( hex ) ;
122133 return new ( r255 / 255.0 , g255 / 255.0 , b255 / 255.0 ) ;
123134 }
124135
125- private static ColourTuple GetNormalisedRgb255Tuple ( ColourTuple tuple )
136+ private static ColourTriplet GetNormalisedRgb255Triplet ( ColourTriplet triplet )
126137 {
127- var ( r255 , g255 , b255 ) = tuple ;
138+ var ( r255 , g255 , b255 ) = triplet ;
128139 return new ( r255 / 255.0 , g255 / 255.0 , b255 / 255.0 ) ;
129140 }
130141}
0 commit comments