mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
ef2e30eca3
commit
fbfccb394b
3 changed files with 62 additions and 3 deletions
|
@ -34,3 +34,19 @@ W/H rotated: {{ $rotated.Width }}/{{ $rotated.Height }}
|
||||||
b := hugolib.Test(t, files)
|
b := hugolib.Test(t, files)
|
||||||
b.AssertFileContent("public/index.html", "W/H original: 80/40\n\nW/H rotated: 40/80")
|
b.AssertFileContent("public/index.html", "W/H original: 80/40\n\nW/H rotated: 40/80")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue 12733.
|
||||||
|
func TestOrientationEq(t *testing.T) {
|
||||||
|
files := `
|
||||||
|
-- hugo.toml --
|
||||||
|
-- assets/rotate270.jpg --
|
||||||
|
sourcefilename: ../testdata/exif/orientation6.jpg
|
||||||
|
-- layouts/index.html --
|
||||||
|
{{ $img := resources.Get "rotate270.jpg" }}
|
||||||
|
{{ $orientation := $img.Exif.Tags.Orientation }}
|
||||||
|
Orientation: {{ $orientation }}|eq 6: {{ eq $orientation 6 }}|Type: {{ printf "%T" $orientation }}|
|
||||||
|
`
|
||||||
|
|
||||||
|
b := hugolib.Test(t, files)
|
||||||
|
b.AssertFileContent("public/index.html", "Orientation: 6|eq 6: true|")
|
||||||
|
}
|
||||||
|
|
|
@ -117,7 +117,12 @@ func (n *Namespace) Eq(first any, others ...any) bool {
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
return vv.Float()
|
return vv.Float()
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
||||||
return vv.Uint()
|
i := vv.Uint()
|
||||||
|
// If it can fit in an int, convert it.
|
||||||
|
if i <= math.MaxInt64 {
|
||||||
|
return int64(i)
|
||||||
|
}
|
||||||
|
return i
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
return vv.String()
|
return vv.String()
|
||||||
default:
|
default:
|
||||||
|
@ -237,6 +242,16 @@ func (ns *Namespace) compareGet(a any, b any) (float64, float64) {
|
||||||
return ns.compareGetWithCollator(nil, a, b)
|
return ns.compareGetWithCollator(nil, a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ns *Namespace) compareTwoUints(a uint64, b uint64) (float64, float64) {
|
||||||
|
if a < b {
|
||||||
|
return 1, 0
|
||||||
|
} else if a == b {
|
||||||
|
return 0, 0
|
||||||
|
} else {
|
||||||
|
return 0, 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (ns *Namespace) compareGetWithCollator(collator *langs.Collator, a any, b any) (float64, float64) {
|
func (ns *Namespace) compareGetWithCollator(collator *langs.Collator, a any, b any) (float64, float64) {
|
||||||
if ac, ok := a.(compare.Comparer); ok {
|
if ac, ok := a.(compare.Comparer); ok {
|
||||||
c := ac.Compare(b)
|
c := ac.Compare(b)
|
||||||
|
@ -263,12 +278,22 @@ func (ns *Namespace) compareGetWithCollator(collator *langs.Collator, a any, b a
|
||||||
var left, right float64
|
var left, right float64
|
||||||
var leftStr, rightStr *string
|
var leftStr, rightStr *string
|
||||||
av := reflect.ValueOf(a)
|
av := reflect.ValueOf(a)
|
||||||
|
bv := reflect.ValueOf(b)
|
||||||
|
|
||||||
switch av.Kind() {
|
switch av.Kind() {
|
||||||
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
||||||
left = float64(av.Len())
|
left = float64(av.Len())
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
if hreflect.IsUint(bv.Kind()) {
|
||||||
|
return ns.compareTwoUints(uint64(av.Int()), bv.Uint())
|
||||||
|
}
|
||||||
left = float64(av.Int())
|
left = float64(av.Int())
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32:
|
||||||
|
left = float64(av.Uint())
|
||||||
|
case reflect.Uint64:
|
||||||
|
if hreflect.IsUint(bv.Kind()) {
|
||||||
|
return ns.compareTwoUints(av.Uint(), bv.Uint())
|
||||||
|
}
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
left = av.Float()
|
left = av.Float()
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
|
@ -290,13 +315,20 @@ func (ns *Namespace) compareGetWithCollator(collator *langs.Collator, a any, b a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bv := reflect.ValueOf(b)
|
|
||||||
|
|
||||||
switch bv.Kind() {
|
switch bv.Kind() {
|
||||||
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
||||||
right = float64(bv.Len())
|
right = float64(bv.Len())
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
if hreflect.IsUint(av.Kind()) {
|
||||||
|
return ns.compareTwoUints(av.Uint(), uint64(bv.Int()))
|
||||||
|
}
|
||||||
right = float64(bv.Int())
|
right = float64(bv.Int())
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32:
|
||||||
|
right = float64(bv.Uint())
|
||||||
|
case reflect.Uint64:
|
||||||
|
if hreflect.IsUint(av.Kind()) {
|
||||||
|
return ns.compareTwoUints(av.Uint(), bv.Uint())
|
||||||
|
}
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
right = bv.Float()
|
right = bv.Float()
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
package compare
|
package compare
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
"path"
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -199,6 +200,16 @@ func doTestCompare(t *testing.T, tp tstCompareType, funcUnderTest func(a, b any)
|
||||||
{5, 5, 0},
|
{5, 5, 0},
|
||||||
{int(5), int64(5), 0},
|
{int(5), int64(5), 0},
|
||||||
{int32(5), int(5), 0},
|
{int32(5), int(5), 0},
|
||||||
|
{int16(4), 4, 0},
|
||||||
|
{uint8(4), 4, 0},
|
||||||
|
{uint16(4), 4, 0},
|
||||||
|
{uint16(4), 4, 0},
|
||||||
|
{uint32(4), uint16(4), 0},
|
||||||
|
{uint32(4), uint16(3), 1},
|
||||||
|
{uint64(4), 4, 0},
|
||||||
|
{4, uint64(4), 0},
|
||||||
|
{uint64(math.MaxUint32), uint32(math.MaxUint32), 0},
|
||||||
|
{uint64(math.MaxUint16), int(math.MaxUint16), 0},
|
||||||
{int16(4), int(5), -1},
|
{int16(4), int(5), -1},
|
||||||
{uint(15), uint64(15), 0},
|
{uint(15), uint64(15), 0},
|
||||||
{-2, 1, -1},
|
{-2, 1, -1},
|
||||||
|
|
Loading…
Reference in a new issue